Using `# nosec BXXX` annotation in a nested dict causes "higher" annotations to be ignored
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 8.3k
- Forks
- 836
- Avg merge
- 5d 3h
- Merged PRs (30d)
- 1
Description
Describe the bug
Using a # nosec BXXX annotation inside a nested data structure appears to cause "higher" nosec annotations to be ignored:
Test results:
>> Issue: [B108:hardcoded_tmp_directory] Probable insecure usage of temp file/directory.
Severity: Medium Confidence: Medium
CWE: CWE-377 (https://cwe.mitre.org/data/definitions/377.html)
More Info: https://bandit.readthedocs.io/en/1.7.5/plugins/b108_hardcoded_tmp_directory.html
Location: derp.py:7:23
6 ),
7 'LOCALFS_BASEDIR': '/var/tmp/herp', # nosec B108
8 'ALPINE_APORTS_DIR': '/tmp/derp', # nosec B108
9 }
--------------------------------------------------
>> Issue: [B108:hardcoded_tmp_directory] Probable insecure usage of temp file/directory.
Severity: Medium Confidence: Medium
CWE: CWE-377 (https://cwe.mitre.org/data/definitions/377.html)
More Info: https://bandit.readthedocs.io/en/1.7.5/plugins/b108_hardcoded_tmp_directory.html
Location: derp.py:8:25
7 'LOCALFS_BASEDIR': '/var/tmp/herp', # nosec B108
8 'ALPINE_APORTS_DIR': '/tmp/derp', # nosec B108
9 }
--------------------------------------------------
Reproduction steps
Use this as a test case (save to testcase.py):
example = {
'S3_CONFIG_PARAMS': dict( # nosec B106
aws_access_key_id='key_goes_here',
aws_secret_access_key='secret_goes_here',
endpoint_url='s3.amazonaws.com',
),
'LOCALFS_BASEDIR': '/var/tmp/herp', # nosec B108
'ALPINE_APORTS_DIR': '/tmp/derp', # nosec B108
}
..and run bandit testcase.py
Expected behavior
0 issues found.
Bandit version
1.7.5
Python version
3.11.2
Additional context
- Using plain
# nosecannotations works. - This test case also works, but throws warnings:
example = {
'LOCALFS_BASEDIR': '/var/tmp/herp', # nosec B108
'ALPINE_APORTS_DIR': '/tmp/derp', # nosec B108
'S3_CONFIG_PARAMS': dict(
aws_access_key_id='key_goes_here',
aws_secret_access_key='secret_goes_here', # nosec B106
endpoint_url='s3.amazonaws.com',
),
}
So the issue would appear to have something to do with ignoring individual tests, and nesting depth.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the provided testcase.py reproduction and run bandit testcase.py using the reported Bandit and Python versions; then trace how nested and line-level # nosec B106/B108 annotations are handled. Done means the reproduction reports 0 issues while preserving the expected behavior for the additional context cases.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- devtools, security
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100