updates
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
r"""
|
||||
=====================================================
|
||||
B613: TrojanSource - Bidirectional control characters
|
||||
=====================================================
|
||||
|
||||
This plugin checks for the presence of unicode bidirectional control characters
|
||||
in Python source files. Those characters can be embedded in comments and strings
|
||||
to reorder source code characters in a way that changes its logic.
|
||||
|
||||
:Example:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
>> Issue: [B613:trojansource] A Python source file contains bidirectional control characters ('\u202e').
|
||||
Severity: High Confidence: Medium
|
||||
CWE: CWE-838 (https://cwe.mitre.org/data/definitions/838.html)
|
||||
More Info: https://bandit.readthedocs.io/en/1.7.5/plugins/b113_trojansource.html
|
||||
Location: examples/trojansource.py:4:25
|
||||
3 access_level = "user"
|
||||
4 if access_level != 'none': # Check if admin ' and access_level != 'user
|
||||
5 print("You are an admin.\n")
|
||||
|
||||
.. seealso::
|
||||
|
||||
- https://trojansource.codes/
|
||||
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-42574
|
||||
|
||||
.. versionadded:: 1.7.10
|
||||
|
||||
""" # noqa: E501
|
||||
from tokenize import detect_encoding
|
||||
|
||||
import bandit
|
||||
from bandit.core import issue
|
||||
from bandit.core import test_properties as test
|
||||
|
||||
|
||||
BIDI_CHARACTERS = (
|
||||
"\u202a",
|
||||
"\u202b",
|
||||
"\u202c",
|
||||
"\u202d",
|
||||
"\u202e",
|
||||
"\u2066",
|
||||
"\u2067",
|
||||
"\u2068",
|
||||
"\u2069",
|
||||
"\u200f",
|
||||
)
|
||||
|
||||
|
||||
@test.test_id("B613")
|
||||
@test.checks("File")
|
||||
def trojansource(context):
|
||||
with open(context.filename, "rb") as src_file:
|
||||
encoding, _ = detect_encoding(src_file.readline)
|
||||
with open(context.filename, encoding=encoding) as src_file:
|
||||
for lineno, line in enumerate(src_file.readlines(), start=1):
|
||||
for char in BIDI_CHARACTERS:
|
||||
try:
|
||||
col_offset = line.index(char) + 1
|
||||
except ValueError:
|
||||
continue
|
||||
text = (
|
||||
"A Python source file contains bidirectional"
|
||||
" control characters (%r)." % char
|
||||
)
|
||||
b_issue = bandit.Issue(
|
||||
severity=bandit.HIGH,
|
||||
confidence=bandit.MEDIUM,
|
||||
cwe=issue.Cwe.INAPPROPRIATE_ENCODING_FOR_OUTPUT_CONTEXT,
|
||||
text=text,
|
||||
lineno=lineno,
|
||||
col_offset=col_offset,
|
||||
)
|
||||
b_issue.linerange = [lineno]
|
||||
return b_issue
|
||||
Reference in New Issue
Block a user