@neralabs/rerail-pack-python 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +7 -0
  3. package/README.md +36 -0
  4. package/licenses/bandit/LICENSE +175 -0
  5. package/licenses/bandit/UPSTREAM.md +100 -0
  6. package/licenses/ruff/LICENSE +430 -0
  7. package/licenses/ruff/UPSTREAM.md +338 -0
  8. package/pack.json +912 -0
  9. package/package.json +30 -0
  10. package/rules/bandit-b101-assert-used.json +38 -0
  11. package/rules/bandit-b102-exec-used.json +125 -0
  12. package/rules/bandit-b110-try-except-pass.json +109 -0
  13. package/rules/bandit-b112-try-except-continue.json +109 -0
  14. package/rules/bandit-b113-request-without-timeout.json +138 -0
  15. package/rules/bandit-b301-pickle.json +58 -0
  16. package/rules/bandit-b302-marshal.json +48 -0
  17. package/rules/bandit-b303-md5.json +79 -0
  18. package/rules/bandit-b305-cipher-modes.json +47 -0
  19. package/rules/bandit-b306-mktemp-q.json +54 -0
  20. package/rules/bandit-b307-eval.json +125 -0
  21. package/rules/bandit-b308-mark-safe.json +47 -0
  22. package/rules/bandit-b310-urllib-urlopen.json +54 -0
  23. package/rules/bandit-b311-random.json +57 -0
  24. package/rules/bandit-b312-telnetlib.json +47 -0
  25. package/rules/bandit-b313-xml-bad-celementtree.json +50 -0
  26. package/rules/bandit-b314-xml-bad-elementtree.json +50 -0
  27. package/rules/bandit-b315-xml-bad-expatreader.json +47 -0
  28. package/rules/bandit-b316-xml-bad-expatbuilder.json +48 -0
  29. package/rules/bandit-b317-xml-bad-sax.json +58 -0
  30. package/rules/bandit-b318-xml-bad-minidom.json +48 -0
  31. package/rules/bandit-b319-xml-bad-pulldom.json +48 -0
  32. package/rules/bandit-b321-ftplib.json +47 -0
  33. package/rules/bandit-b323-unverified-context.json +47 -0
  34. package/rules/bandit-b401-import-telnetlib.json +48 -0
  35. package/rules/bandit-b402-import-ftplib.json +48 -0
  36. package/rules/bandit-b405-import-xml-etree.json +69 -0
  37. package/rules/bandit-b406-import-xml-sax.json +73 -0
  38. package/rules/bandit-b407-import-xml-expat.json +54 -0
  39. package/rules/bandit-b408-import-xml-minidom.json +54 -0
  40. package/rules/bandit-b409-import-xml-pulldom.json +54 -0
  41. package/rules/bandit-b411-import-xmlrpclib.json +48 -0
  42. package/rules/bandit-b413-import-pycrypto.json +159 -0
  43. package/rules/bandit-b415-import-pyghmi.json +48 -0
  44. package/rules/bandit-b502-ssl-with-bad-version.json +90 -0
  45. package/rules/bandit-b505-weak-cryptographic-key.json +166 -0
  46. package/rules/bandit-b507-ssh-no-host-key-verification.json +210 -0
  47. package/rules/bandit-b606-start-process-with-no-shell.json +63 -0
  48. package/rules/bandit-b610-django-extra-used.json +268 -0
  49. package/rules/bandit-b615-huggingface-unsafe-download.json +1152 -0
  50. package/rules/ruff-async100-cancel-scope-no-checkpoint.json +357 -0
  51. package/rules/ruff-async105-trio-sync-call.json +199 -0
  52. package/rules/ruff-async115-async-zero-sleep.json +264 -0
  53. package/rules/ruff-async116-long-sleep-not-forever.json +267 -0
  54. package/rules/ruff-async210-blocking-http-call-in-async-function.json +161 -0
  55. package/rules/ruff-async221-run-process-in-async-function.json +342 -0
  56. package/rules/ruff-async222-wait-for-process-in-async-function.json +144 -0
  57. package/rules/ruff-async230-blocking-open-call-in-async-function.json +339 -0
  58. package/rules/ruff-async250-blocking-input-in-async-function.json +143 -0
  59. package/rules/ruff-async251-blocking-sleep-in-async-function.json +140 -0
  60. package/rules/ruff-b002-unary-prefix-increment-decrement.json +54 -0
  61. package/rules/ruff-b003-assignment-to-os-environ.json +54 -0
  62. package/rules/ruff-b004-unreliable-callable-check.json +171 -0
  63. package/rules/ruff-b005-strip-with-multi-characters.json +131 -0
  64. package/rules/ruff-b007-unused-loop-control-variable.json +368 -0
  65. package/rules/ruff-b009-get-attr-with-constant.json +190 -0
  66. package/rules/ruff-b010-set-attr-with-constant.json +219 -0
  67. package/rules/ruff-b011-assert-false.json +62 -0
  68. package/rules/ruff-b013-redundant-tuple-in-exception-handler.json +94 -0
  69. package/rules/ruff-b014-duplicate-handler-exception.json +126 -0
  70. package/rules/ruff-b016-raise-literal.json +47 -0
  71. package/rules/ruff-b020-loop-variable-overrides-iterator.json +341 -0
  72. package/rules/ruff-b021-f-string-docstring.json +48 -0
  73. package/rules/ruff-b022-useless-contextlib-suppress.json +95 -0
  74. package/rules/ruff-b023-function-uses-loop-variable.json +560 -0
  75. package/rules/ruff-b025-duplicate-try-block-exception.json +182 -0
  76. package/rules/ruff-b026-star-arg-unpacking-after-keyword-arg.json +57 -0
  77. package/rules/ruff-b028-no-explicit-stacklevel.json +177 -0
  78. package/rules/ruff-b029-except-with-empty-tuple.json +102 -0
  79. package/rules/ruff-b032-unintentional-type-annotation.json +157 -0
  80. package/rules/ruff-b033-duplicate-value.json +129 -0
  81. package/rules/ruff-b034-re-sub-positional-args.json +159 -0
  82. package/rules/ruff-b039-mutable-contextvar-default.json +281 -0
  83. package/rules/ruff-b904-raise-without-from-inside-except.json +194 -0
  84. package/rules/ruff-b905-zip-without-explicit-strict.json +429 -0
  85. package/rules/ruff-e711-none-comparison.json +199 -0
  86. package/rules/ruff-e721-type-comparison.json +293 -0
  87. package/rules/ruff-e722-bare-except.json +57 -0
  88. package/rules/ruff-e742-ambiguous-class-name.json +47 -0
  89. package/rules/ruff-e743-ambiguous-function-name.json +47 -0
  90. package/rules/ruff-f403-undefined-local-with-import-star.json +73 -0
  91. package/rules/ruff-f405-undefined-local-with-import-star-usage.json +87 -0
  92. package/rules/ruff-f406-undefined-local-with-nested-import-star-usage.json +39 -0
  93. package/rules/ruff-f407-future-feature-not-defined.json +56 -0
  94. package/rules/ruff-f501-percent-format-invalid-format.json +88 -0
  95. package/rules/ruff-f502-percent-format-expected-mapping.json +127 -0
  96. package/rules/ruff-f503-percent-format-expected-sequence.json +127 -0
  97. package/rules/ruff-f504-percent-format-extra-named-arguments.json +46 -0
  98. package/rules/ruff-f505-percent-format-missing-argument.json +49 -0
  99. package/rules/ruff-f506-percent-format-mixed-positional-and-named.json +114 -0
  100. package/rules/ruff-f507-percent-format-positional-count-mismatch.json +78 -0
  101. package/rules/ruff-f508-percent-format-star-requires-sequence.json +112 -0
  102. package/rules/ruff-f509-percent-format-unsupported-format-character.json +86 -0
  103. package/rules/ruff-f521-string-dot-format-invalid-format.json +83 -0
  104. package/rules/ruff-f522-string-dot-format-extra-named-arguments.json +46 -0
  105. package/rules/ruff-f523-string-dot-format-extra-positional-arguments.json +48 -0
  106. package/rules/ruff-f524-string-dot-format-missing-arguments.json +46 -0
  107. package/rules/ruff-f525-string-dot-format-mixing-automatic.json +99 -0
  108. package/rules/ruff-f541-f-string-missing-placeholders.json +52 -0
  109. package/rules/ruff-f601-multi-value-repeated-key-literal.json +215 -0
  110. package/rules/ruff-f602-multi-value-repeated-key-variable.json +123 -0
  111. package/rules/ruff-f622-multiple-starred-expressions.json +57 -0
  112. package/rules/ruff-f632-is-literal.json +232 -0
  113. package/rules/ruff-f633-invalid-print-syntax.json +299 -0
  114. package/rules/ruff-f701-break-outside-loop.json +64 -0
  115. package/rules/ruff-f702-continue-outside-loop.json +64 -0
  116. package/rules/ruff-f706-return-outside-function.json +61 -0
  117. package/rules/ruff-f707-default-except-not-last.json +50 -0
  118. package/rules/ruff-f722-forward-annotation-syntax-error.json +654 -0
  119. package/rules/ruff-f822-undefined-export.json +55 -0
  120. package/rules/ruff-f823-undefined-local.json +42 -0
  121. package/rules/ruff-f842-unused-annotation.json +51 -0
  122. package/rules/ruff-f901-raise-not-implemented.json +97 -0
  123. package/rules/ruff-pie794-duplicate-class-field-definition.json +157 -0
  124. package/rules/ruff-pie796-non-unique-enums.json +460 -0
  125. package/rules/ruff-pie800-unnecessary-spread.json +62 -0
  126. package/rules/ruff-pie804-unnecessary-dict-kwargs.json +179 -0
  127. package/rules/ruff-pie807-reimplemented-container-builtin.json +100 -0
  128. package/rules/ruff-pie810-multiple-starts-ends-with.json +585 -0
  129. package/rules/ruff-ret501-unnecessary-return-none.json +256 -0
  130. package/rules/ruff-ret502-implicit-return-value.json +163 -0
  131. package/rules/ruff-ret505-superfluous-else-return.json +211 -0
  132. package/rules/ruff-ret506-superfluous-else-raise.json +211 -0
  133. package/rules/ruff-ret507-superfluous-else-continue.json +211 -0
  134. package/rules/ruff-ret508-superfluous-else-break.json +211 -0
  135. package/rules/ruff-sim101-duplicate-isinstance-call.json +384 -0
  136. package/rules/ruff-sim107-return-in-try-except-finally.json +82 -0
  137. package/rules/ruff-sim109-compare-with-tuple.json +205 -0
  138. package/rules/ruff-sim112-uncapitalized-environment-variables.json +168 -0
  139. package/rules/ruff-sim113-enumerate-for-loop.json +562 -0
  140. package/rules/ruff-sim208-double-negation.json +58 -0
  141. package/rules/ruff-sim210-if-expr-with-true-false.json +90 -0
  142. package/rules/ruff-sim211-if-expr-with-false-true.json +90 -0
  143. package/rules/ruff-sim212-if-expr-with-twisted-arms.json +95 -0
  144. package/rules/ruff-sim300-yoda-conditions.json +487 -0
  145. package/rules/ruff-sim905-split-static-string.json +579 -0
  146. package/rules/ruff-sim910-dict-get-with-none-default.json +518 -0
  147. package/rules/ruff-t100-debugger.json +197 -0
@@ -0,0 +1,48 @@
1
+ {
2
+ "format": "rerail.policy/v1",
3
+ "id": "bandit-b316-xml-bad-expatbuilder",
4
+ "revision": 1,
5
+ "mode": "steer",
6
+ "description": "Detect vulnerable xml.dom.expatbuilder parsing calls",
7
+ "scope": {
8
+ "include": [
9
+ "**/*.py"
10
+ ],
11
+ "exclude": []
12
+ },
13
+ "clauses": [
14
+ {
15
+ "id": "bandit:B316",
16
+ "forbid": {
17
+ "ast": {
18
+ "language": "python",
19
+ "rule": {
20
+ "pattern": "$F($$$ARGS)"
21
+ },
22
+ "constraints": {
23
+ "F": {
24
+ "resolves": {
25
+ "import": [
26
+ "xml.dom.expatbuilder.parse",
27
+ "xml.dom.expatbuilder.parseString"
28
+ ]
29
+ }
30
+ }
31
+ }
32
+ }
33
+ },
34
+ "violation": {
35
+ "code": "B316",
36
+ "anchor": "witness.span",
37
+ "message": "Using xml.dom.expatbuilder to parse untrusted XML may permit XML attacks; use defusedxml.",
38
+ "suppress": {
39
+ "nosec": {
40
+ "codes": [
41
+ "B316"
42
+ ]
43
+ }
44
+ }
45
+ }
46
+ }
47
+ ]
48
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "format": "rerail.policy/v1",
3
+ "id": "bandit-b317-xml-bad-sax",
4
+ "revision": 1,
5
+ "mode": "steer",
6
+ "description": "Detect vulnerable xml.sax parsing calls",
7
+ "scope": {
8
+ "include": [
9
+ "**/*.py"
10
+ ],
11
+ "exclude": []
12
+ },
13
+ "clauses": [
14
+ {
15
+ "id": "bandit:B317",
16
+ "forbid": {
17
+ "ast": {
18
+ "language": "python",
19
+ "rule": {
20
+ "all": [
21
+ {
22
+ "kind": "expression_statement"
23
+ },
24
+ {
25
+ "has": {
26
+ "pattern": "$F($$$ARGS)"
27
+ }
28
+ }
29
+ ]
30
+ },
31
+ "constraints": {
32
+ "F": {
33
+ "resolves": {
34
+ "import": [
35
+ "xml.sax.parse",
36
+ "xml.sax.parseString",
37
+ "xml.sax.make_parser"
38
+ ]
39
+ }
40
+ }
41
+ }
42
+ }
43
+ },
44
+ "violation": {
45
+ "code": "B317",
46
+ "anchor": "witness.span",
47
+ "message": "Using xml.sax to parse untrusted XML may permit XML attacks; use defusedxml.",
48
+ "suppress": {
49
+ "nosec": {
50
+ "codes": [
51
+ "B317"
52
+ ]
53
+ }
54
+ }
55
+ }
56
+ }
57
+ ]
58
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "format": "rerail.policy/v1",
3
+ "id": "bandit-b318-xml-bad-minidom",
4
+ "revision": 1,
5
+ "mode": "steer",
6
+ "description": "Detect unsafe xml.dom.minidom parsing calls",
7
+ "scope": {
8
+ "include": [
9
+ "**/*.py"
10
+ ],
11
+ "exclude": []
12
+ },
13
+ "clauses": [
14
+ {
15
+ "id": "B318",
16
+ "forbid": {
17
+ "ast": {
18
+ "language": "python",
19
+ "rule": {
20
+ "pattern": "$F($$$ARGS)"
21
+ },
22
+ "constraints": {
23
+ "F": {
24
+ "resolves": {
25
+ "import": [
26
+ "xml.dom.minidom.parse",
27
+ "xml.dom.minidom.parseString"
28
+ ]
29
+ }
30
+ }
31
+ }
32
+ }
33
+ },
34
+ "violation": {
35
+ "code": "B318",
36
+ "anchor": "witness.span",
37
+ "message": "Using xml.dom.minidom to parse untrusted XML is vulnerable to XML attacks; use the defusedxml equivalent.",
38
+ "suppress": {
39
+ "nosec": {
40
+ "codes": [
41
+ "B318"
42
+ ]
43
+ }
44
+ }
45
+ }
46
+ }
47
+ ]
48
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "format": "rerail.policy/v1",
3
+ "id": "bandit-b319-xml-bad-pulldom",
4
+ "revision": 1,
5
+ "mode": "steer",
6
+ "description": "Detect unsafe xml.dom.pulldom parsing calls",
7
+ "scope": {
8
+ "include": [
9
+ "**/*.py"
10
+ ],
11
+ "exclude": []
12
+ },
13
+ "clauses": [
14
+ {
15
+ "id": "B319",
16
+ "forbid": {
17
+ "ast": {
18
+ "language": "python",
19
+ "rule": {
20
+ "pattern": "$F($$$ARGS)"
21
+ },
22
+ "constraints": {
23
+ "F": {
24
+ "resolves": {
25
+ "import": [
26
+ "xml.dom.pulldom.parse",
27
+ "xml.dom.pulldom.parseString"
28
+ ]
29
+ }
30
+ }
31
+ }
32
+ }
33
+ },
34
+ "violation": {
35
+ "code": "B319",
36
+ "anchor": "witness.span",
37
+ "message": "Using xml.dom.pulldom to parse untrusted XML is vulnerable to XML attacks; use the defusedxml equivalent.",
38
+ "suppress": {
39
+ "nosec": {
40
+ "codes": [
41
+ "B319"
42
+ ]
43
+ }
44
+ }
45
+ }
46
+ }
47
+ ]
48
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "format": "rerail.policy/v1",
3
+ "id": "bandit-b321-ftplib",
4
+ "revision": 1,
5
+ "mode": "steer",
6
+ "description": "Detect insecure ftplib.FTP construction",
7
+ "scope": {
8
+ "include": [
9
+ "**/*.py"
10
+ ],
11
+ "exclude": []
12
+ },
13
+ "clauses": [
14
+ {
15
+ "id": "B321",
16
+ "forbid": {
17
+ "ast": {
18
+ "language": "python",
19
+ "rule": {
20
+ "pattern": "$F($$$ARGS)"
21
+ },
22
+ "constraints": {
23
+ "F": {
24
+ "resolves": {
25
+ "import": [
26
+ "ftplib.FTP"
27
+ ]
28
+ }
29
+ }
30
+ }
31
+ }
32
+ },
33
+ "violation": {
34
+ "code": "B321",
35
+ "anchor": "witness.span",
36
+ "message": "FTP is unencrypted and insecure; use SSH, SFTP, SCP, or another encrypted protocol.",
37
+ "suppress": {
38
+ "nosec": {
39
+ "codes": [
40
+ "B321"
41
+ ]
42
+ }
43
+ }
44
+ }
45
+ }
46
+ ]
47
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "format": "rerail.policy/v1",
3
+ "id": "bandit-b323-unverified-context",
4
+ "revision": 1,
5
+ "mode": "steer",
6
+ "description": "Detect creation of unverified SSL contexts",
7
+ "scope": {
8
+ "include": [
9
+ "**/*.py"
10
+ ],
11
+ "exclude": []
12
+ },
13
+ "clauses": [
14
+ {
15
+ "id": "B323",
16
+ "forbid": {
17
+ "ast": {
18
+ "language": "python",
19
+ "rule": {
20
+ "pattern": "$F($$$ARGS)"
21
+ },
22
+ "constraints": {
23
+ "F": {
24
+ "resolves": {
25
+ "import": [
26
+ "ssl._create_unverified_context"
27
+ ]
28
+ }
29
+ }
30
+ }
31
+ }
32
+ },
33
+ "violation": {
34
+ "code": "B323",
35
+ "anchor": "witness.span",
36
+ "message": "Creating an unverified SSL context disables certificate validation and hostname checks.",
37
+ "suppress": {
38
+ "nosec": {
39
+ "codes": [
40
+ "B323"
41
+ ]
42
+ }
43
+ }
44
+ }
45
+ }
46
+ ]
47
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "format": "rerail.policy/v1",
3
+ "id": "bandit-b401-import-telnetlib",
4
+ "revision": 1,
5
+ "mode": "steer",
6
+ "description": "Detect direct imports of the insecure telnetlib module.",
7
+ "scope": {
8
+ "include": [
9
+ "**/*.py"
10
+ ],
11
+ "exclude": []
12
+ },
13
+ "clauses": [
14
+ {
15
+ "id": "B401",
16
+ "forbid": {
17
+ "ast": {
18
+ "language": "python",
19
+ "rule": {
20
+ "any": [
21
+ {
22
+ "pattern": "import telnetlib"
23
+ },
24
+ {
25
+ "pattern": "import telnetlib as $ALIAS"
26
+ },
27
+ {
28
+ "pattern": "from telnetlib import $$$NAMES"
29
+ }
30
+ ]
31
+ }
32
+ }
33
+ },
34
+ "violation": {
35
+ "code": "B401",
36
+ "anchor": "witness.span",
37
+ "message": "A telnet-related module is being imported. Telnet is insecure; use SSH or another encrypted protocol.",
38
+ "suppress": {
39
+ "nosec": {
40
+ "codes": [
41
+ "B401"
42
+ ]
43
+ }
44
+ }
45
+ }
46
+ }
47
+ ]
48
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "format": "rerail.policy/v1",
3
+ "id": "bandit-b402-import-ftplib",
4
+ "revision": 1,
5
+ "mode": "steer",
6
+ "description": "Detect direct imports of the insecure ftplib module.",
7
+ "scope": {
8
+ "include": [
9
+ "**/*.py"
10
+ ],
11
+ "exclude": []
12
+ },
13
+ "clauses": [
14
+ {
15
+ "id": "B402",
16
+ "forbid": {
17
+ "ast": {
18
+ "language": "python",
19
+ "rule": {
20
+ "any": [
21
+ {
22
+ "pattern": "import ftplib"
23
+ },
24
+ {
25
+ "pattern": "import ftplib as $ALIAS"
26
+ },
27
+ {
28
+ "pattern": "from ftplib import $$$NAMES"
29
+ }
30
+ ]
31
+ }
32
+ }
33
+ },
34
+ "violation": {
35
+ "code": "B402",
36
+ "anchor": "witness.span",
37
+ "message": "An FTP-related module is being imported. FTP is insecure; use SSH, SFTP, SCP, or another encrypted protocol.",
38
+ "suppress": {
39
+ "nosec": {
40
+ "codes": [
41
+ "B402"
42
+ ]
43
+ }
44
+ }
45
+ }
46
+ }
47
+ ]
48
+ }
@@ -0,0 +1,69 @@
1
+ {
2
+ "format": "rerail.policy/v1",
3
+ "id": "bandit-b405-import-xml-etree",
4
+ "revision": 1,
5
+ "mode": "steer",
6
+ "description": "Detect direct imports of xml.etree.cElementTree and xml.etree.ElementTree.",
7
+ "scope": {
8
+ "include": [
9
+ "**/*.py"
10
+ ],
11
+ "exclude": []
12
+ },
13
+ "clauses": [
14
+ {
15
+ "id": "B405",
16
+ "forbid": {
17
+ "ast": {
18
+ "language": "python",
19
+ "rule": {
20
+ "any": [
21
+ {
22
+ "pattern": "import xml.etree.cElementTree"
23
+ },
24
+ {
25
+ "pattern": "import xml.etree.cElementTree as $ALIAS"
26
+ },
27
+ {
28
+ "pattern": "from xml.etree.cElementTree import $$$NAMES"
29
+ },
30
+ {
31
+ "pattern": "from xml.etree import cElementTree"
32
+ },
33
+ {
34
+ "pattern": "from xml.etree import cElementTree as $ALIAS"
35
+ },
36
+ {
37
+ "pattern": "import xml.etree.ElementTree"
38
+ },
39
+ {
40
+ "pattern": "import xml.etree.ElementTree as $ALIAS"
41
+ },
42
+ {
43
+ "pattern": "from xml.etree.ElementTree import $$$NAMES"
44
+ },
45
+ {
46
+ "pattern": "from xml.etree import ElementTree"
47
+ },
48
+ {
49
+ "pattern": "from xml.etree import ElementTree as $ALIAS"
50
+ }
51
+ ]
52
+ }
53
+ }
54
+ },
55
+ "violation": {
56
+ "code": "B405",
57
+ "anchor": "witness.span",
58
+ "message": "ElementTree XML parsing may be vulnerable to XML attacks; use defusedxml or defuse the standard library.",
59
+ "suppress": {
60
+ "nosec": {
61
+ "codes": [
62
+ "B405"
63
+ ]
64
+ }
65
+ }
66
+ }
67
+ }
68
+ ]
69
+ }
@@ -0,0 +1,73 @@
1
+ {
2
+ "format": "rerail.policy/v1",
3
+ "id": "bandit-b406-import-xml-sax",
4
+ "revision": 2,
5
+ "mode": "steer",
6
+ "description": "Detect direct imports of xml.sax. Port of Bandit 1.9.4's B406 import_xml_sax. Divergence: an import of only xml.sax.saxutils (`from xml.sax.saxutils import ...`, `from xml.sax import saxutils`, aliased or parenthesised) is not reported. saxutils holds XML writing and escaping helpers (escape, quoteattr, unescape, XMLGenerator) and no parser, so defusedxml, which the steer points to, has nothing to replace it with. `import xml.sax.saxutils` is still reported, since it also binds xml.sax and its parse functions (NER-1827).",
7
+ "scope": {
8
+ "include": [
9
+ "**/*.py"
10
+ ],
11
+ "exclude": []
12
+ },
13
+ "clauses": [
14
+ {
15
+ "id": "B406",
16
+ "forbid": {
17
+ "ast": {
18
+ "language": "python",
19
+ "rule": {
20
+ "any": [
21
+ {
22
+ "pattern": "import xml.sax"
23
+ },
24
+ {
25
+ "pattern": "import xml.sax as $ALIAS"
26
+ },
27
+ {
28
+ "pattern": "from xml.sax import $$$NAMES"
29
+ },
30
+ {
31
+ "pattern": "from xml import sax"
32
+ },
33
+ {
34
+ "pattern": "from xml import sax as $ALIAS"
35
+ }
36
+ ],
37
+ "not": {
38
+ "any": [
39
+ {
40
+ "pattern": "from xml.sax.saxutils import $$$NAMES"
41
+ },
42
+ {
43
+ "pattern": "from xml.sax import saxutils"
44
+ },
45
+ {
46
+ "pattern": "from xml.sax import saxutils as $ALIAS"
47
+ },
48
+ {
49
+ "pattern": "from xml.sax import (saxutils)"
50
+ },
51
+ {
52
+ "pattern": "from xml.sax import (saxutils as $ALIAS)"
53
+ }
54
+ ]
55
+ }
56
+ }
57
+ }
58
+ },
59
+ "violation": {
60
+ "code": "B406",
61
+ "anchor": "witness.span",
62
+ "message": "xml.sax parsing may be vulnerable to XML attacks; use defusedxml or defuse the standard library.",
63
+ "suppress": {
64
+ "nosec": {
65
+ "codes": [
66
+ "B406"
67
+ ]
68
+ }
69
+ }
70
+ }
71
+ }
72
+ ]
73
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "format": "rerail.policy/v1",
3
+ "id": "bandit-b407-import-xml-expat",
4
+ "revision": 1,
5
+ "mode": "steer",
6
+ "description": "Detect direct imports of xml.dom.expatbuilder.",
7
+ "scope": {
8
+ "include": [
9
+ "**/*.py"
10
+ ],
11
+ "exclude": []
12
+ },
13
+ "clauses": [
14
+ {
15
+ "id": "B407",
16
+ "forbid": {
17
+ "ast": {
18
+ "language": "python",
19
+ "rule": {
20
+ "any": [
21
+ {
22
+ "pattern": "import xml.dom.expatbuilder"
23
+ },
24
+ {
25
+ "pattern": "import xml.dom.expatbuilder as $ALIAS"
26
+ },
27
+ {
28
+ "pattern": "from xml.dom.expatbuilder import $$$NAMES"
29
+ },
30
+ {
31
+ "pattern": "from xml.dom import expatbuilder"
32
+ },
33
+ {
34
+ "pattern": "from xml.dom import expatbuilder as $ALIAS"
35
+ }
36
+ ]
37
+ }
38
+ }
39
+ },
40
+ "violation": {
41
+ "code": "B407",
42
+ "anchor": "witness.span",
43
+ "message": "xml.dom.expatbuilder parsing may be vulnerable to XML attacks; use defusedxml or defuse the standard library.",
44
+ "suppress": {
45
+ "nosec": {
46
+ "codes": [
47
+ "B407"
48
+ ]
49
+ }
50
+ }
51
+ }
52
+ }
53
+ ]
54
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "format": "rerail.policy/v1",
3
+ "id": "bandit-b408-import-xml-minidom",
4
+ "revision": 1,
5
+ "mode": "steer",
6
+ "description": "Detect direct imports of xml.dom.minidom.",
7
+ "scope": {
8
+ "include": [
9
+ "**/*.py"
10
+ ],
11
+ "exclude": []
12
+ },
13
+ "clauses": [
14
+ {
15
+ "id": "B408",
16
+ "forbid": {
17
+ "ast": {
18
+ "language": "python",
19
+ "rule": {
20
+ "any": [
21
+ {
22
+ "pattern": "import xml.dom.minidom"
23
+ },
24
+ {
25
+ "pattern": "import xml.dom.minidom as $ALIAS"
26
+ },
27
+ {
28
+ "pattern": "from xml.dom.minidom import $$$NAMES"
29
+ },
30
+ {
31
+ "pattern": "from xml.dom import minidom"
32
+ },
33
+ {
34
+ "pattern": "from xml.dom import minidom as $ALIAS"
35
+ }
36
+ ]
37
+ }
38
+ }
39
+ },
40
+ "violation": {
41
+ "code": "B408",
42
+ "anchor": "witness.span",
43
+ "message": "xml.dom.minidom parsing may be vulnerable to XML attacks; use defusedxml or defuse the standard library.",
44
+ "suppress": {
45
+ "nosec": {
46
+ "codes": [
47
+ "B408"
48
+ ]
49
+ }
50
+ }
51
+ }
52
+ }
53
+ ]
54
+ }