@zhuma4/cli 4.0.0-alpha.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 (288) hide show
  1. package/README.md +42 -0
  2. package/dist/commands/config.d.ts +3 -0
  3. package/dist/commands/config.d.ts.map +1 -0
  4. package/dist/commands/config.js +18 -0
  5. package/dist/commands/config.js.map +1 -0
  6. package/dist/commands/init.d.ts +3 -0
  7. package/dist/commands/init.d.ts.map +1 -0
  8. package/dist/commands/init.js +11 -0
  9. package/dist/commands/init.js.map +1 -0
  10. package/dist/commands/scan.d.ts +3 -0
  11. package/dist/commands/scan.d.ts.map +1 -0
  12. package/dist/commands/scan.js +96 -0
  13. package/dist/commands/scan.js.map +1 -0
  14. package/dist/commands/scan_appid.d.ts +20 -0
  15. package/dist/commands/scan_appid.d.ts.map +1 -0
  16. package/dist/commands/scan_appid.js +301 -0
  17. package/dist/commands/scan_appid.js.map +1 -0
  18. package/dist/commands/scan_manifest.d.ts +13 -0
  19. package/dist/commands/scan_manifest.d.ts.map +1 -0
  20. package/dist/commands/scan_manifest.js +103 -0
  21. package/dist/commands/scan_manifest.js.map +1 -0
  22. package/dist/engine/api-submit.d.ts +16 -0
  23. package/dist/engine/api-submit.d.ts.map +1 -0
  24. package/dist/engine/api-submit.js +66 -0
  25. package/dist/engine/api-submit.js.map +1 -0
  26. package/dist/engine/batch_scan.d.ts +36 -0
  27. package/dist/engine/batch_scan.d.ts.map +1 -0
  28. package/dist/engine/batch_scan.js +192 -0
  29. package/dist/engine/batch_scan.js.map +1 -0
  30. package/dist/engine/config.d.ts +12 -0
  31. package/dist/engine/config.d.ts.map +1 -0
  32. package/dist/engine/config.js +27 -0
  33. package/dist/engine/config.js.map +1 -0
  34. package/dist/engine/errors.d.ts +36 -0
  35. package/dist/engine/errors.d.ts.map +1 -0
  36. package/dist/engine/errors.js +99 -0
  37. package/dist/engine/errors.js.map +1 -0
  38. package/dist/engine/filter.d.ts +13 -0
  39. package/dist/engine/filter.d.ts.map +1 -0
  40. package/dist/engine/filter.js +64 -0
  41. package/dist/engine/filter.js.map +1 -0
  42. package/dist/engine/finding_classifier.d.ts +108 -0
  43. package/dist/engine/finding_classifier.d.ts.map +1 -0
  44. package/dist/engine/finding_classifier.js +440 -0
  45. package/dist/engine/finding_classifier.js.map +1 -0
  46. package/dist/engine/incremental/engine.d.ts +25 -0
  47. package/dist/engine/incremental/engine.d.ts.map +1 -0
  48. package/dist/engine/incremental/engine.js +337 -0
  49. package/dist/engine/incremental/engine.js.map +1 -0
  50. package/dist/engine/incremental/git-diff.d.ts +19 -0
  51. package/dist/engine/incremental/git-diff.d.ts.map +1 -0
  52. package/dist/engine/incremental/git-diff.js +175 -0
  53. package/dist/engine/incremental/git-diff.js.map +1 -0
  54. package/dist/engine/incremental/types.d.ts +33 -0
  55. package/dist/engine/incremental/types.d.ts.map +1 -0
  56. package/dist/engine/incremental/types.js +11 -0
  57. package/dist/engine/incremental/types.js.map +1 -0
  58. package/dist/engine/manifest_scanner.d.ts +48 -0
  59. package/dist/engine/manifest_scanner.d.ts.map +1 -0
  60. package/dist/engine/manifest_scanner.js +599 -0
  61. package/dist/engine/manifest_scanner.js.map +1 -0
  62. package/dist/engine/project.d.ts +22 -0
  63. package/dist/engine/project.d.ts.map +1 -0
  64. package/dist/engine/project.js +279 -0
  65. package/dist/engine/project.js.map +1 -0
  66. package/dist/engine/sarif.d.ts +13 -0
  67. package/dist/engine/sarif.d.ts.map +1 -0
  68. package/dist/engine/sarif.js +44 -0
  69. package/dist/engine/sarif.js.map +1 -0
  70. package/dist/engine/sca-integration.d.ts +36 -0
  71. package/dist/engine/sca-integration.d.ts.map +1 -0
  72. package/dist/engine/sca-integration.js +91 -0
  73. package/dist/engine/sca-integration.js.map +1 -0
  74. package/dist/engine/scanner.d.ts +18 -0
  75. package/dist/engine/scanner.d.ts.map +1 -0
  76. package/dist/engine/scanner.js +138 -0
  77. package/dist/engine/scanner.js.map +1 -0
  78. package/dist/index.d.ts +13 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +41 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/report/render.d.ts +23 -0
  83. package/dist/report/render.d.ts.map +1 -0
  84. package/dist/report/render.js +335 -0
  85. package/dist/report/render.js.map +1 -0
  86. package/package.json +41 -0
  87. package/rules/android/mobile-cleartext-traffic.yaml +46 -0
  88. package/rules/android/mobile-component-security.yaml +107 -0
  89. package/rules/android/mobile-crypto-weakness.yaml +139 -0
  90. package/rules/android/mobile-cwe-1021-tapjacking.yaml +81 -0
  91. package/rules/android/mobile-cwe-114-dynamic-dex-loading.yaml +41 -0
  92. package/rules/android/mobile-cwe-200-clipboard-data-leak.yaml +66 -0
  93. package/rules/android/mobile-cwe-200-debug-builds.yaml +111 -0
  94. package/rules/android/mobile-cwe-200-log-sensitive-data.yaml +61 -0
  95. package/rules/android/mobile-cwe-200-webview-debugging.yaml +56 -0
  96. package/rules/android/mobile-cwe-200-webview-universal-access.yaml +30 -0
  97. package/rules/android/mobile-cwe-200-window-flags.yaml +96 -0
  98. package/rules/android/mobile-cwe-22-content-provider-openfile.yaml +73 -0
  99. package/rules/android/mobile-cwe-22-path-traversal.yaml +86 -0
  100. package/rules/android/mobile-cwe-287-biometric-weakness.yaml +102 -0
  101. package/rules/android/mobile-cwe-295-cert-pinning-missing.yaml +78 -0
  102. package/rules/android/mobile-cwe-295-webview-ssl-bypass.yaml +104 -0
  103. package/rules/android/mobile-cwe-312-cleartext-storage.yaml +109 -0
  104. package/rules/android/mobile-cwe-319-cleartext-communication.yaml +84 -0
  105. package/rules/android/mobile-cwe-321-hardcoded-crypto-keys.yaml +132 -0
  106. package/rules/android/mobile-cwe-326-short-rsa.yaml +108 -0
  107. package/rules/android/mobile-cwe-327-rc4-3des.yaml +107 -0
  108. package/rules/android/mobile-cwe-329-cbc-padding-oracle.yaml +76 -0
  109. package/rules/android/mobile-cwe-470-reflection-injection.yaml +39 -0
  110. package/rules/android/mobile-cwe-489-root-detection-weak.yaml +125 -0
  111. package/rules/android/mobile-cwe-489-stetho-debug.yaml +107 -0
  112. package/rules/android/mobile-cwe-502-insecure-deserialization.yaml +76 -0
  113. package/rules/android/mobile-cwe-552-world-readable-files.yaml +63 -0
  114. package/rules/android/mobile-cwe-749-webview-java-objects.yaml +78 -0
  115. package/rules/android/mobile-cwe-749-webview-jsbridge.yaml +57 -0
  116. package/rules/android/mobile-cwe-749-webview-loadurl-injection.yaml +80 -0
  117. package/rules/android/mobile-cwe-78-command-injection.yaml +77 -0
  118. package/rules/android/mobile-cwe-780-rsa-no-oaep.yaml +80 -0
  119. package/rules/android/mobile-cwe-79-webview-setdata.yaml +78 -0
  120. package/rules/android/mobile-cwe-79-webview-xss.yaml +65 -0
  121. package/rules/android/mobile-cwe-798-hardcoded-credentials.yaml +108 -0
  122. package/rules/android/mobile-cwe-89-sql-injection.yaml +100 -0
  123. package/rules/android/mobile-cwe-927-implicit-intent.yaml +121 -0
  124. package/rules/android/mobile-cwe-927-ipc-file-provider.yaml +102 -0
  125. package/rules/android/mobile-cwe-939-deeplink-validation.yaml +76 -0
  126. package/rules/android/mobile-sdk-google-firebase-open.yaml +117 -0
  127. package/rules/android/mobile-sdk-tencent-tpns-config-leak.yaml +131 -0
  128. package/rules/android/mobile-secrets-storage.yaml +136 -0
  129. package/rules/android/mobile-webview-security.yaml +88 -0
  130. package/rules/common/cwe-200-sensitive-data-exposure.yaml +61 -0
  131. package/rules/common/cwe-22-path-traversal.yaml +47 -0
  132. package/rules/common/cwe-295-ssl-bypass.yaml +217 -0
  133. package/rules/common/cwe-295-ssl-verification-disabled.yaml +64 -0
  134. package/rules/common/cwe-306-missing-authentication.yaml +44 -0
  135. package/rules/common/cwe-326-weak-key-size.yaml +107 -0
  136. package/rules/common/cwe-327-weak-crypto.yaml +177 -0
  137. package/rules/common/cwe-328-weak-hash.yaml +96 -0
  138. package/rules/common/cwe-329-cbc-mode.yaml +26 -0
  139. package/rules/common/cwe-352-csrf.yaml +23 -0
  140. package/rules/common/cwe-434-unrestricted-file-upload.yaml +41 -0
  141. package/rules/common/cwe-502-insecure-deserialization.yaml +44 -0
  142. package/rules/common/cwe-601-url-redirect.yaml +110 -0
  143. package/rules/common/cwe-611-xxe.yaml +70 -0
  144. package/rules/common/cwe-732-incorrect-permission.yaml +49 -0
  145. package/rules/common/cwe-770-resource-exhaustion.yaml +44 -0
  146. package/rules/common/cwe-78-os-command-injection.yaml +43 -0
  147. package/rules/common/cwe-787-out-of-bounds-write.yaml +37 -0
  148. package/rules/common/cwe-79-xss.yaml +51 -0
  149. package/rules/common/cwe-862-missing-authorization.yaml +40 -0
  150. package/rules/common/cwe-89-sqli.yaml +89 -0
  151. package/rules/common/cwe-918-ssrf.yaml +45 -0
  152. package/rules/common/cwe-94-code-injection.yaml +59 -0
  153. package/rules/common/zm-go-cwe22-path-traversal-fs.yaml +117 -0
  154. package/rules/common/zm-go-cwe22-path-traversal.yaml +103 -0
  155. package/rules/common/zm-go-cwe307-brute-force.yaml +129 -0
  156. package/rules/common/zm-go-cwe326-weak-crypto.yaml +124 -0
  157. package/rules/common/zm-go-cwe327-weak-cipher.yaml +152 -0
  158. package/rules/common/zm-go-cwe384-session-fixation.yaml +128 -0
  159. package/rules/common/zm-go-cwe502-deserialization.yaml +120 -0
  160. package/rules/common/zm-go-cwe78-command-injection.yaml +95 -0
  161. package/rules/common/zm-go-cwe79-xss.yaml +104 -0
  162. package/rules/common/zm-go-cwe798-hardcoded-creds.yaml +153 -0
  163. package/rules/common/zm-go-cwe89-sqli.yaml +89 -0
  164. package/rules/common/zm-go-cwe918-ssrf.yaml +117 -0
  165. package/rules/common/zm-java-cwe117-log-injection.yaml +83 -0
  166. package/rules/common/zm-java-cwe117-logforging.yaml +153 -0
  167. package/rules/common/zm-java-cwe200-actuator-exposure.yaml +8 -0
  168. package/rules/common/zm-java-cwe200-info-disclosure.yaml +91 -0
  169. package/rules/common/zm-java-cwe22-file-depth.yaml +135 -0
  170. package/rules/common/zm-java-cwe22-path-traversal-spring.yaml +81 -0
  171. package/rules/common/zm-java-cwe284-missing-auth-spring.yaml +131 -0
  172. package/rules/common/zm-java-cwe295-webview-ssl.yaml +123 -0
  173. package/rules/common/zm-java-cwe327-weakcrypto.yaml +197 -0
  174. package/rules/common/zm-java-cwe347-jwt.yaml +30 -0
  175. package/rules/common/zm-java-cwe352-csrf-depth.yaml +107 -0
  176. package/rules/common/zm-java-cwe352-csrf-disabled.yaml +15 -0
  177. package/rules/common/zm-java-cwe501-trust-boundary.yaml +124 -0
  178. package/rules/common/zm-java-cwe502-deserial-depth.yaml +128 -0
  179. package/rules/common/zm-java-cwe502-fastjson.yaml +137 -0
  180. package/rules/common/zm-java-cwe502-gadget.yaml +158 -0
  181. package/rules/common/zm-java-cwe502-jndi-injection.yaml +91 -0
  182. package/rules/common/zm-java-cwe502-shiro.yaml +108 -0
  183. package/rules/common/zm-java-cwe601-url-redirect-spring.yaml +85 -0
  184. package/rules/common/zm-java-cwe611-xxe-enhanced.yaml +80 -0
  185. package/rules/common/zm-java-cwe611-xxe-transformer.yaml +85 -0
  186. package/rules/common/zm-java-cwe639-idor.yaml +123 -0
  187. package/rules/common/zm-java-cwe79-xss-depth.yaml +98 -0
  188. package/rules/common/zm-java-cwe862-authz-depth.yaml +127 -0
  189. package/rules/common/zm-java-cwe915-mass-assignment.yaml +16 -0
  190. package/rules/common/zm-java-cwe917-expression-injection.yaml +120 -0
  191. package/rules/common/zm-java-cwe918-resttemplate.yaml +67 -0
  192. package/rules/common/zm-java-cwe918-ssrf-depth.yaml +103 -0
  193. package/rules/common/zm-java-cwe918-ssrf-resttemplate.yaml +77 -0
  194. package/rules/common/zm-java-cwe918-webclient.yaml +44 -0
  195. package/rules/common/zm-java-cwe94-ognl.yaml +66 -0
  196. package/rules/common/zm-java-cwe94-spel-injection.yaml +85 -0
  197. package/rules/common/zm-java-cwe94-spel.yaml +112 -0
  198. package/rules/common/zm-java-cwe94-ssti.yaml +22 -0
  199. package/rules/common/zm-java-cwe942-cors.yaml +15 -0
  200. package/rules/common/zm-js-cwe1321-prototype-pollution.yaml +61 -0
  201. package/rules/common/zm-js-cwe200-info-disclosure.yaml +95 -0
  202. package/rules/common/zm-js-cwe22-path-traversal-fs.yaml +113 -0
  203. package/rules/common/zm-js-cwe22-pathtraversal.yaml +111 -0
  204. package/rules/common/zm-js-cwe307-brute-force.yaml +136 -0
  205. package/rules/common/zm-js-cwe345-postmessage.yaml +75 -0
  206. package/rules/common/zm-js-cwe347-jwt-weak.yaml +95 -0
  207. package/rules/common/zm-js-cwe352-csrf.yaml +52 -0
  208. package/rules/common/zm-js-cwe384-session-fixation.yaml +132 -0
  209. package/rules/common/zm-js-cwe502-deserialization.yaml +119 -0
  210. package/rules/common/zm-js-cwe611-xxe.yaml +108 -0
  211. package/rules/common/zm-js-cwe639-idor.yaml +122 -0
  212. package/rules/common/zm-js-cwe693-helmet-missing.yaml +46 -0
  213. package/rules/common/zm-js-cwe78-exec.yaml +37 -0
  214. package/rules/common/zm-js-cwe78-spawn.yaml +37 -0
  215. package/rules/common/zm-js-cwe79-domxss.yaml +84 -0
  216. package/rules/common/zm-js-cwe79-react-xss.yaml +18 -0
  217. package/rules/common/zm-js-cwe79-xss-ejs.yaml +70 -0
  218. package/rules/common/zm-js-cwe89-sqli.yaml +153 -0
  219. package/rules/common/zm-js-cwe915-mass-assignment.yaml +111 -0
  220. package/rules/common/zm-js-cwe918-ssrf-fetch.yaml +134 -0
  221. package/rules/common/zm-js-cwe918-ssrf.yaml +132 -0
  222. package/rules/common/zm-js-cwe94-template-injection.yaml +130 -0
  223. package/rules/common/zm-js-cwe942-cors.yaml +49 -0
  224. package/rules/common/zm-js-cwe943-nosql-injection.yaml +52 -0
  225. package/rules/common/zm-js-cwe95-eval.yaml +59 -0
  226. package/rules/common/zm-js-cwe95-function-ctor.yaml +31 -0
  227. package/rules/common/zm-py-cwe22-path-traversal.yaml +86 -0
  228. package/rules/common/zm-py-cwe327-weak-crypto.yaml +103 -0
  229. package/rules/common/zm-py-cwe502-pickle.yaml +92 -0
  230. package/rules/common/zm-py-cwe611-xxe.yaml +100 -0
  231. package/rules/common/zm-py-cwe78-command-injection.yaml +121 -0
  232. package/rules/common/zm-py-cwe79-xss.yaml +123 -0
  233. package/rules/common/zm-py-cwe798-hardcoded-creds.yaml +86 -0
  234. package/rules/common/zm-py-cwe89-sqli.yaml +59 -0
  235. package/rules/common/zm-py-cwe918-ssrf.yaml +123 -0
  236. package/rules/common/zm-py-cwe94-ssti.yaml +87 -0
  237. package/rules/common/zm-py-cwe943-nosql-injection.yaml +123 -0
  238. package/rules/iac/ansible/zm-ansible-cwe269-privilege-escalation.yaml +63 -0
  239. package/rules/iac/ansible/zm-ansible-cwe78-command-injection.yaml +67 -0
  240. package/rules/iac/ansible/zm-ansible-cwe798-hardcoded-creds.yaml +93 -0
  241. package/rules/iac/terraform/zm-tf-cwe200-s3-bucket-public.yaml +100 -0
  242. package/rules/iac/terraform/zm-tf-cwe284-sg-wide-open.yaml +88 -0
  243. package/rules/iac/terraform/zm-tf-cwe311-iam-wildcard.yaml +83 -0
  244. package/rules/iac/terraform/zm-tf-cwe319-rds-public.yaml +72 -0
  245. package/rules/iac/terraform/zm-tf-cwe798-hardcoded-creds.yaml +102 -0
  246. package/rules/iac/zm-docker-cwe250-root-user.yaml +50 -0
  247. package/rules/iac/zm-docker-cwe400-resource-limit.yaml +92 -0
  248. package/rules/iac/zm-docker-security.yaml +104 -0
  249. package/rules/iac/zm-k8s-cwe200-service-account.yaml +83 -0
  250. package/rules/iac/zm-k8s-cwe250-privileged.yaml +56 -0
  251. package/rules/iac/zm-k8s-security.yaml +79 -0
  252. package/rules/rules_index.yaml.off +477 -0
  253. package/rules/semgrep-registry/anonymous-ldap-bind.yaml +34 -0
  254. package/rules/semgrep-registry/bad-hexa-conversion.yaml +32 -0
  255. package/rules/semgrep-registry/blowfish-insufficient-key-size.yaml +39 -0
  256. package/rules/semgrep-registry/cbc-padding-oracle.yaml +38 -0
  257. package/rules/semgrep-registry/command-injection-formatted-runtime-call.yaml +90 -0
  258. package/rules/semgrep-registry/command-injection-process-builder.yaml +148 -0
  259. package/rules/semgrep-registry/cookie-missing-httponly.yaml +38 -0
  260. package/rules/semgrep-registry/cookie-missing-secure-flag.yaml +38 -0
  261. package/rules/semgrep-registry/crlf-injection-logs.yaml +86 -0
  262. package/rules/semgrep-registry/dangerous-groovy-shell.yaml +46 -0
  263. package/rules/semgrep-registry/el-injection.yaml +137 -0
  264. package/rules/semgrep-registry/formatted-sql-string.yaml +95 -0
  265. package/rules/semgrep-registry/http-response-splitting.yaml +44 -0
  266. package/rules/semgrep-registry/index.txt +1 -0
  267. package/rules/semgrep-registry/insecure-smtp-connection.yaml +34 -0
  268. package/rules/semgrep-registry/java-reverse-shell.yaml +43 -0
  269. package/rules/semgrep-registry/jdbc-sql-formatted-string.yaml +120 -0
  270. package/rules/semgrep-registry/ldap-entry-poisoning.yaml +41 -0
  271. package/rules/semgrep-registry/ldap-injection.yaml +82 -0
  272. package/rules/semgrep-registry/md5-used-as-password.yaml +44 -0
  273. package/rules/semgrep-registry/object-deserialization.yaml +34 -0
  274. package/rules/semgrep-registry/ognl-injection.yaml +839 -0
  275. package/rules/semgrep-registry/overly-permissive-file-permission.yaml +49 -0
  276. package/rules/semgrep-registry/permissive-cors.yaml +77 -0
  277. package/rules/semgrep-registry/script-engine-injection.yaml +66 -0
  278. package/rules/semgrep-registry/tainted-cmd-from-http-request.yaml +74 -0
  279. package/rules/semgrep-registry/tainted-env-from-http-request.yaml +46 -0
  280. package/rules/semgrep-registry/tainted-ldapi-from-http-request.yaml +42 -0
  281. package/rules/semgrep-registry/tainted-session-from-http-request.yaml +70 -0
  282. package/rules/semgrep-registry/tainted-xpath-from-http-request.yaml +38 -0
  283. package/rules/semgrep-registry/unsafe-reflection.yaml +39 -0
  284. package/rules/semgrep-registry/unvalidated-redirect.yaml +127 -0
  285. package/rules/semgrep-registry/url-rewriting.yaml +82 -0
  286. package/rules/semgrep-registry/weak-ssl-context.yaml +34 -0
  287. package/rules/semgrep-registry/xml-decoder.yaml +53 -0
  288. package/rules/semgrep-registry/xssrequestwrapper-is-insecure.yaml +40 -0
@@ -0,0 +1,477 @@
1
+ # 逐码 ZhuMa V4.0 — 通用规则库清单
2
+ # 自动生成 | 覆盖 CWE Top 25 (2024) Java 规则
3
+
4
+ version: "4.0.0-alpha"
5
+ total_rules: 54
6
+ coverage:
7
+ cwe_top_25_p0: 14
8
+ cwe_top_25_p1: 10
9
+ cwe_crypto: 23
10
+ total_covered: 24
11
+
12
+ rules:
13
+ # ============================================
14
+ # P0 — CWE Top 25 关键规则 (14条)
15
+ # ============================================
16
+
17
+ - id: zm-java-sqli-001
18
+ cwe: "CWE-89"
19
+ title: "JDBC Statement 字符串拼接 SQL 注入"
20
+ severity: CRITICAL
21
+ file: cwe-89-sqli.yaml
22
+ status: PASS
23
+
24
+ - id: zm-java-sqli-002
25
+ cwe: "CWE-89"
26
+ title: "MyBatis ${} 动态 SQL"
27
+ severity: CRITICAL
28
+ file: cwe-89-sqli.yaml
29
+ status: PASS
30
+
31
+ - id: zm-java-sqli-003
32
+ cwe: "CWE-89"
33
+ title: "JdbcTemplate 字符串拼接"
34
+ severity: HIGH
35
+ file: cwe-89-sqli.yaml
36
+ status: PASS
37
+
38
+ - id: zm-java-sqli-004
39
+ cwe: "CWE-89"
40
+ title: "String.format 构造 SQL"
41
+ severity: HIGH
42
+ file: cwe-89-sqli.yaml
43
+ status: PASS
44
+
45
+ - id: zm-java-xss-001
46
+ cwe: "CWE-79"
47
+ title: "response.getWriter 未转义输出 request.getParameter"
48
+ severity: HIGH
49
+ file: cwe-79-xss.yaml
50
+ status: PASS
51
+
52
+ - id: zm-java-xss-002
53
+ cwe: "CWE-79"
54
+ title: "request.getParameter 赋值后未转义直接输出"
55
+ severity: HIGH
56
+ file: cwe-79-xss.yaml
57
+ status: PASS
58
+
59
+ - id: zm-java-osci-001
60
+ cwe: "CWE-78"
61
+ title: "Runtime.exec 字符串拼接"
62
+ severity: CRITICAL
63
+ file: cwe-78-os-command-injection.yaml
64
+ status: PASS
65
+
66
+ - id: zm-java-osci-002
67
+ cwe: "CWE-78"
68
+ title: "ProcessBuilder 参数拼接"
69
+ severity: HIGH
70
+ file: cwe-78-os-command-injection.yaml
71
+ status: PASS
72
+
73
+ - id: zm-java-pt-001
74
+ cwe: "CWE-22"
75
+ title: "File/FileInputStream 拼接用户输入"
76
+ severity: HIGH
77
+ file: cwe-22-path-traversal.yaml
78
+ status: PASS
79
+
80
+ - id: zm-java-pt-002
81
+ cwe: "CWE-22"
82
+ title: "直接使用 request.getParameter 作为文件路径"
83
+ severity: MEDIUM
84
+ file: cwe-22-path-traversal.yaml
85
+ status: PASS
86
+
87
+ - id: zm-java-csrf-001
88
+ cwe: "CWE-352"
89
+ title: "Spring Security 显式禁用 CSRF"
90
+ severity: HIGH
91
+ file: cwe-352-csrf.yaml
92
+ status: PASS
93
+
94
+ - id: zm-java-xxe-001
95
+ cwe: "CWE-611"
96
+ title: "DocumentBuilderFactory 未禁用外部实体"
97
+ severity: HIGH
98
+ file: cwe-611-xxe.yaml
99
+ status: PASS
100
+
101
+ - id: zm-java-xxe-002
102
+ cwe: "CWE-611"
103
+ title: "SAXParserFactory 未禁用外部实体"
104
+ severity: HIGH
105
+ file: cwe-611-xxe.yaml
106
+ status: PASS
107
+
108
+ - id: zm-java-xxe-003
109
+ cwe: "CWE-611"
110
+ title: "XMLInputFactory 未禁用 DTD"
111
+ severity: HIGH
112
+ file: cwe-611-xxe.yaml
113
+ status: PASS
114
+
115
+ - id: zm-java-hc-001
116
+ cwe: "CWE-798"
117
+ title: "硬编码密码字面量"
118
+ severity: CRITICAL
119
+ file: cwe-798-hardcoded-credentials.yaml
120
+ status: PASS
121
+
122
+ - id: zm-java-hc-002
123
+ cwe: "CWE-798"
124
+ title: "password/passwd 变量赋字符串字面量"
125
+ severity: HIGH
126
+ file: cwe-798-hardcoded-credentials.yaml
127
+ status: PASS
128
+
129
+ - id: zm-java-hc-003
130
+ cwe: "CWE-798"
131
+ title: "JDBC 连接字符串硬编码密码"
132
+ severity: HIGH
133
+ file: cwe-798-hardcoded-credentials.yaml
134
+ status: PASS
135
+
136
+ - id: zm-java-ma-001
137
+ cwe: "CWE-306"
138
+ title: "@GetMapping/@PostMapping 无认证注解"
139
+ severity: MEDIUM
140
+ file: cwe-306-missing-authentication.yaml
141
+ status: PASS
142
+
143
+ - id: zm-java-ma-002
144
+ cwe: "CWE-306"
145
+ title: "Spring Security permitAll 无认证要求"
146
+ severity: MEDIUM
147
+ file: cwe-306-missing-authentication.yaml
148
+ status: PASS
149
+
150
+ - id: zm-java-ds-001
151
+ cwe: "CWE-502"
152
+ title: "ObjectInputStream.readObject 无过滤"
153
+ severity: CRITICAL
154
+ file: cwe-502-insecure-deserialization.yaml
155
+ status: PASS
156
+
157
+ - id: zm-java-ds-002
158
+ cwe: "CWE-502"
159
+ title: "ObjectInputStream 无类型过滤包装"
160
+ severity: MEDIUM
161
+ file: cwe-502-insecure-deserialization.yaml
162
+ status: PASS
163
+
164
+ - id: zm-java-sde-001
165
+ cwe: "CWE-200"
166
+ title: "日志输出敏感变量 (password/token/apiKey)"
167
+ severity: HIGH
168
+ file: cwe-200-sensitive-data-exposure.yaml
169
+ status: PASS
170
+
171
+ - id: zm-java-sde-002
172
+ cwe: "CWE-200"
173
+ title: "toString 暴露敏感字段"
174
+ severity: MEDIUM
175
+ file: cwe-200-sensitive-data-exposure.yaml
176
+ status: PASS
177
+
178
+ - id: zm-java-sde-003
179
+ cwe: "CWE-200"
180
+ title: "printStackTrace 泄漏堆栈信息"
181
+ severity: LOW
182
+ file: cwe-200-sensitive-data-exposure.yaml
183
+ status: PASS
184
+
185
+ - id: zm-java-ci-001
186
+ cwe: "CWE-94"
187
+ title: "ScriptEngine.eval 用户输入"
188
+ severity: CRITICAL
189
+ file: cwe-94-code-injection.yaml
190
+ status: PASS
191
+
192
+ - id: zm-java-ci-002
193
+ cwe: "CWE-94"
194
+ title: "GroovyShell 动态执行"
195
+ severity: CRITICAL
196
+ file: cwe-94-code-injection.yaml
197
+ status: PASS
198
+
199
+ - id: zm-java-ci-003
200
+ cwe: "CWE-94"
201
+ title: "Class.forName 动态加载"
202
+ severity: MEDIUM
203
+ file: cwe-94-code-injection.yaml
204
+ status: PASS
205
+
206
+ # ============================================
207
+ # P1 — CWE Top 25 扩展规则 (10条)
208
+ # ============================================
209
+
210
+ - id: zm-java-ssl-001
211
+ cwe: "CWE-295"
212
+ title: "X509TrustManager 信任所有证书"
213
+ severity: HIGH
214
+ file: cwe-295-ssl-verification-disabled.yaml
215
+ status: PASS
216
+
217
+ - id: zm-java-ssl-002
218
+ cwe: "CWE-295"
219
+ title: "HostnameVerifier 总是返回 true"
220
+ severity: HIGH
221
+ file: cwe-295-ssl-verification-disabled.yaml
222
+ status: PASS
223
+
224
+ - id: zm-java-ssl-003
225
+ cwe: "CWE-295"
226
+ title: "ALLOW_ALL_HOSTNAME_VERIFIER"
227
+ severity: HIGH
228
+ file: cwe-295-ssl-verification-disabled.yaml
229
+ status: PASS
230
+
231
+ - id: zm-java-ssrf-001
232
+ cwe: "CWE-918"
233
+ title: "HttpURLConnection URL 用户可控"
234
+ severity: HIGH
235
+ file: cwe-918-ssrf.yaml
236
+ status: PASS
237
+
238
+ - id: zm-java-ssrf-002
239
+ cwe: "CWE-918"
240
+ title: "RestTemplate URL 用户可控"
241
+ severity: MEDIUM
242
+ file: cwe-918-ssrf.yaml
243
+ status: PASS
244
+
245
+ - id: zm-java-fu-001
246
+ cwe: "CWE-434"
247
+ title: "MultipartFile.transferTo 无扩展名校验"
248
+ severity: HIGH
249
+ file: cwe-434-unrestricted-file-upload.yaml
250
+ status: PASS
251
+
252
+ - id: zm-java-fu-002
253
+ cwe: "CWE-434"
254
+ title: "FileOutputStream 直接用用户文件名"
255
+ severity: MEDIUM
256
+ file: cwe-434-unrestricted-file-upload.yaml
257
+ status: PASS
258
+
259
+ - id: zm-java-maz-001
260
+ cwe: "CWE-862"
261
+ title: "敏感操作无授权检查"
262
+ severity: HIGH
263
+ file: cwe-862-missing-authorization.yaml
264
+ status: PASS
265
+
266
+ - id: zm-java-re-001
267
+ cwe: "CWE-770"
268
+ title: "while(true) 无超时退出条件"
269
+ severity: MEDIUM
270
+ file: cwe-770-resource-exhaustion.yaml
271
+ status: PASS
272
+
273
+ - id: zm-java-re-002
274
+ cwe: "CWE-770"
275
+ title: "无限制读取输入流"
276
+ severity: LOW
277
+ file: cwe-770-resource-exhaustion.yaml
278
+ status: PASS
279
+
280
+ - id: zm-java-oob-001
281
+ cwe: "CWE-787"
282
+ title: "数组索引无边界检查"
283
+ severity: MEDIUM
284
+ file: cwe-787-out-of-bounds-write.yaml
285
+ status: PASS
286
+
287
+ - id: zm-java-oob-002
288
+ cwe: "CWE-787"
289
+ title: "ByteBuffer put 无 capacity 检查"
290
+ severity: LOW
291
+ file: cwe-787-out-of-bounds-write.yaml
292
+ status: PASS
293
+
294
+ - id: zm-java-ip-001
295
+ cwe: "CWE-732"
296
+ title: "setWritable/readable/executable 过宽权限"
297
+ severity: MEDIUM
298
+ file: cwe-732-incorrect-permission.yaml
299
+ status: PASS
300
+
301
+ - id: zm-java-ip-002
302
+ cwe: "CWE-732"
303
+ title: "Runtime.exec chmod 777"
304
+ severity: HIGH
305
+ file: cwe-732-incorrect-permission.yaml
306
+ status: PASS
307
+
308
+ # ============================================
309
+ # P2 — 密码学规则 (CWE-327/326/328/329/295/798, 23条)
310
+ # ============================================
311
+
312
+ # CWE-327: 弱加密算法 (6条)
313
+ - id: zm-java-weakcrypto-001
314
+ cwe: "CWE-327"
315
+ title: "DES/3DES 加密算法"
316
+ severity: CRITICAL
317
+ file: cwe-327-weak-crypto.yaml
318
+ status: PASS
319
+
320
+ - id: zm-java-weakcrypto-002
321
+ cwe: "CWE-327"
322
+ title: "RC2/RC4/Blowfish 弱算法"
323
+ severity: CRITICAL
324
+ file: cwe-327-weak-crypto.yaml
325
+ status: PASS
326
+
327
+ - id: zm-java-weakcrypto-003
328
+ cwe: "CWE-327"
329
+ title: "ECB 模式 (无认证加密)"
330
+ severity: HIGH
331
+ file: cwe-327-weak-crypto.yaml
332
+ status: PASS
333
+
334
+ - id: zm-java-weakcrypto-004
335
+ cwe: "CWE-327"
336
+ title: "RSA 无OAEP填充或弱填充"
337
+ severity: HIGH
338
+ file: cwe-327-weak-crypto.yaml
339
+ status: PASS
340
+
341
+ - id: zm-java-weakcrypto-005
342
+ cwe: "CWE-327"
343
+ title: "JWT Algorithm=none"
344
+ severity: CRITICAL
345
+ file: cwe-327-weak-crypto.yaml
346
+ status: PASS
347
+
348
+ - id: zm-java-weakcrypto-006
349
+ cwe: "CWE-327"
350
+ title: "固定IV/Hardcoded IV"
351
+ severity: HIGH
352
+ file: cwe-327-weak-crypto.yaml
353
+ status: PASS
354
+
355
+ # CWE-326: 密钥强度不足 (3条)
356
+ - id: zm-java-weakkey-001
357
+ cwe: "CWE-326"
358
+ title: "AES 密钥长度 <128 位"
359
+ severity: CRITICAL
360
+ file: cwe-326-weak-key-size.yaml
361
+ status: PASS
362
+
363
+ - id: zm-java-weakkey-002
364
+ cwe: "CWE-326"
365
+ title: "RSA 密钥 <2048 位"
366
+ severity: CRITICAL
367
+ file: cwe-326-weak-key-size.yaml
368
+ status: PASS
369
+
370
+ - id: zm-java-weakkey-003
371
+ cwe: "CWE-326"
372
+ title: "EC 密钥 <256 位"
373
+ severity: HIGH
374
+ file: cwe-326-weak-key-size.yaml
375
+ status: PASS
376
+
377
+ # CWE-328: 弱哈希函数 (4条)
378
+ - id: zm-java-weakhash-001
379
+ cwe: "CWE-328"
380
+ title: "MD2/MD4/MD5 哈希算法"
381
+ severity: CRITICAL
382
+ file: cwe-328-weak-hash.yaml
383
+ status: PASS
384
+
385
+ - id: zm-java-weakhash-002
386
+ cwe: "CWE-328"
387
+ title: "PBKDF2 迭代次数不足"
388
+ severity: CRITICAL
389
+ file: cwe-328-weak-hash.yaml
390
+ status: PASS
391
+
392
+ - id: zm-java-weakhash-003
393
+ cwe: "CWE-328"
394
+ title: "SHA-1 在安全场景使用"
395
+ severity: HIGH
396
+ file: cwe-328-weak-hash.yaml
397
+ status: PASS
398
+
399
+ - id: zm-java-weakhash-004
400
+ cwe: "CWE-328"
401
+ title: "无盐哈希存储"
402
+ severity: MEDIUM
403
+ file: cwe-328-weak-hash.yaml
404
+ status: PASS
405
+
406
+ # CWE-329: CBC Padding Oracle (2条)
407
+ - id: zm-java-cbcmode-001
408
+ cwe: "CWE-329"
409
+ title: "AES/CBC/PKCS5Padding (Padding Oracle风险)"
410
+ severity: HIGH
411
+ file: cwe-329-cbc-mode.yaml
412
+ status: PASS
413
+
414
+ - id: zm-java-cbcmode-002
415
+ cwe: "CWE-329"
416
+ title: "Cipher.doFinal() 未检查 BadPaddingException"
417
+ severity: MEDIUM
418
+ file: cwe-329-cbc-mode.yaml
419
+ status: PASS
420
+
421
+ # CWE-295: SSL/TLS 证书绕过 (4条扩展)
422
+ - id: zm-java-sslverify-001
423
+ cwe: "CWE-295"
424
+ title: "X509TrustManager 空校验 (checkServerTrusted)"
425
+ severity: CRITICAL
426
+ file: cwe-295-ssl-bypass.yaml
427
+ status: PASS
428
+
429
+ - id: zm-java-sslverify-002
430
+ cwe: "CWE-295"
431
+ title: "HostnameVerifier 全部接受 (return true)"
432
+ severity: HIGH
433
+ file: cwe-295-ssl-bypass.yaml
434
+ status: PASS
435
+
436
+ - id: zm-java-sslverify-003
437
+ cwe: "CWE-295"
438
+ title: "allowAllHostnames() 调用"
439
+ severity: HIGH
440
+ file: cwe-295-ssl-bypass.yaml
441
+ status: PASS
442
+
443
+ - id: zm-java-sslverify-004
444
+ cwe: "CWE-295"
445
+ title: "SSLContext.init 空 TrustManager"
446
+ severity: CRITICAL
447
+ file: cwe-295-ssl-bypass.yaml
448
+ status: PASS
449
+
450
+ # CWE-798: 硬编码凭证扩展 (4条)
451
+ - id: zm-java-hardcoded-003
452
+ cwe: "CWE-798"
453
+ title: "OAuth Client Secret 硬编码"
454
+ severity: CRITICAL
455
+ file: cwe-798-hardcoded-creds.yaml
456
+ status: PASS
457
+
458
+ - id: zm-java-hardcoded-004
459
+ cwe: "CWE-798"
460
+ title: "SMTP/Email 密码硬编码"
461
+ severity: HIGH
462
+ file: cwe-798-hardcoded-creds.yaml
463
+ status: PASS
464
+
465
+ - id: zm-java-hardcoded-005
466
+ cwe: "CWE-798"
467
+ title: "数据库密码在 JDBC URL 中"
468
+ severity: CRITICAL
469
+ file: cwe-798-hardcoded-creds.yaml
470
+ status: PASS
471
+
472
+ - id: zm-java-hardcoded-006
473
+ cwe: "CWE-798"
474
+ title: "云 AK/SK 硬编码 (AWS/阿里云/腾讯云)"
475
+ severity: CRITICAL
476
+ file: cwe-798-hardcoded-creds.yaml
477
+ status: PASS
@@ -0,0 +1,34 @@
1
+ rules:
2
+ - id: anonymous-ldap-bind
3
+ metadata:
4
+ cwe:
5
+ - 'CWE-287: Improper Authentication'
6
+ owasp:
7
+ - A02:2017 - Broken Authentication
8
+ - A07:2021 - Identification and Authentication Failures
9
+ - A07:2025 - Authentication Failures
10
+ source-rule-url: https://find-sec-bugs.github.io/bugs.htm#LDAP_ANONYMOUS
11
+ category: security
12
+ technology:
13
+ - java
14
+ references:
15
+ - https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures
16
+ cwe2022-top25: true
17
+ cwe2021-top25: true
18
+ subcategory:
19
+ - audit
20
+ likelihood: LOW
21
+ impact: HIGH
22
+ confidence: LOW
23
+ message: >-
24
+ Detected anonymous LDAP bind.
25
+ This permits anonymous users to execute LDAP statements. Consider enforcing
26
+ authentication for LDAP. See https://docs.oracle.com/javase/tutorial/jndi/ldap/auth_mechs.html
27
+ for more information.
28
+ severity: WARNING
29
+ pattern: |
30
+ $ENV.put($CTX.SECURITY_AUTHENTICATION, "none");
31
+ ...
32
+ $DCTX = new InitialDirContext($ENV, ...);
33
+ languages:
34
+ - java
@@ -0,0 +1,32 @@
1
+ rules:
2
+ - id: bad-hexa-conversion
3
+ metadata:
4
+ cwe:
5
+ - 'CWE-704: Incorrect Type Conversion or Cast'
6
+ owasp: 'A03:2017 - Sensitive Data Exposure'
7
+ source-rule-url: https://find-sec-bugs.github.io/bugs.htm#BAD_HEXA_CONVERSION
8
+ category: security
9
+ technology:
10
+ - java
11
+ references:
12
+ - https://cwe.mitre.org/data/definitions/704.html
13
+ subcategory:
14
+ - audit
15
+ likelihood: LOW
16
+ impact: LOW
17
+ confidence: LOW
18
+ message: >-
19
+ 'Integer.toHexString()' strips leading zeroes from each byte if read byte-by-byte.
20
+ This mistake weakens the hash value computed since it introduces more collisions.
21
+ Use 'String.format("%02X", ...)' instead.
22
+ severity: WARNING
23
+ languages: [java]
24
+ pattern: |-
25
+ $X $METHOD(...) {
26
+ ...
27
+ MessageDigest $MD = ...;
28
+ ...
29
+ $MD.digest(...);
30
+ ...
31
+ Integer.toHexString(...);
32
+ }
@@ -0,0 +1,39 @@
1
+ rules:
2
+ - id: blowfish-insufficient-key-size
3
+ metadata:
4
+ cwe:
5
+ - 'CWE-326: Inadequate Encryption Strength'
6
+ owasp:
7
+ - A03:2017 - Sensitive Data Exposure
8
+ - A02:2021 - Cryptographic Failures
9
+ - A04:2025 - Cryptographic Failures
10
+ source-rule-url: https://find-sec-bugs.github.io/bugs.htm#BLOWFISH_KEY_SIZE
11
+ asvs:
12
+ section: V6 Stored Cryptography Verification Requirements
13
+ control_id: 6.2.5 Insecure Algorithm
14
+ control_url: https://github.com/OWASP/ASVS/blob/master/4.0/en/0x14-V6-Cryptography.md#v62-algorithms
15
+ version: '4'
16
+ category: security
17
+ technology:
18
+ - java
19
+ references:
20
+ - https://owasp.org/Top10/A02_2021-Cryptographic_Failures
21
+ subcategory:
22
+ - audit
23
+ likelihood: HIGH
24
+ impact: MEDIUM
25
+ confidence: HIGH
26
+ message: >-
27
+ Using less than 128 bits for Blowfish is considered insecure. Use 128 bits
28
+ or more, or switch to use AES instead.
29
+ severity: WARNING
30
+ languages:
31
+ - java
32
+ patterns:
33
+ - pattern: |
34
+ $KEYGEN = KeyGenerator.getInstance("Blowfish");
35
+ ...
36
+ $KEYGEN.init($SIZE);
37
+ - metavariable-comparison:
38
+ metavariable: $SIZE
39
+ comparison: $SIZE < 128
@@ -0,0 +1,38 @@
1
+ rules:
2
+ - id: cbc-padding-oracle
3
+ message: >-
4
+ Using CBC with PKCS5Padding is susceptible to padding oracle attacks. A malicious
5
+ actor
6
+ could discern the difference between plaintext with valid or invalid padding.
7
+ Further,
8
+ CBC mode does not include any integrity checks.
9
+ Use 'AES/GCM/NoPadding' instead.
10
+ metadata:
11
+ cwe:
12
+ - 'CWE-327: Use of a Broken or Risky Cryptographic Algorithm'
13
+ owasp:
14
+ - A03:2017 - Sensitive Data Exposure
15
+ - A02:2021 - Cryptographic Failures
16
+ - A04:2025 - Cryptographic Failures
17
+ source-rule-url: https://find-sec-bugs.github.io/bugs.htm#PADDING_ORACLE
18
+ references:
19
+ - https://capec.mitre.org/data/definitions/463.html
20
+ - https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html#cipher-modes
21
+ - https://find-sec-bugs.github.io/bugs.htm#CIPHER_INTEGRITY
22
+ category: security
23
+ technology:
24
+ - java
25
+ subcategory:
26
+ - audit
27
+ likelihood: HIGH
28
+ impact: MEDIUM
29
+ confidence: HIGH
30
+ severity: WARNING
31
+ fix: |
32
+ "AES/GCM/NoPadding"
33
+ languages:
34
+ - java
35
+ patterns:
36
+ - pattern-inside: Cipher.getInstance("=~/.*\/CBC\/PKCS5Padding/")
37
+ - pattern: |
38
+ "=~/.*\/CBC\/PKCS5Padding/"
@@ -0,0 +1,90 @@
1
+ rules:
2
+ - id: command-injection-formatted-runtime-call
3
+ patterns:
4
+ - metavariable-pattern:
5
+ metavariable: $RUNTIME
6
+ patterns:
7
+ - pattern-either:
8
+ - pattern: (java.lang.Runtime $R)
9
+ - pattern: java.lang.Runtime.getRuntime(...)
10
+ - pattern-either:
11
+ - pattern: $RUNTIME.exec($X + $Y);
12
+ - pattern: $RUNTIME.exec(String.format(...));
13
+ - pattern: $RUNTIME.loadLibrary($X + $Y);
14
+ - pattern: $RUNTIME.loadLibrary(String.format(...));
15
+ - patterns:
16
+ - pattern-either:
17
+ - pattern: |
18
+ $RUNTIME.exec("=~/(sh|bash|ksh|csh|tcsh|zsh)/", "-c", $ARG,...)
19
+ - pattern: |
20
+ $RUNTIME.exec(Arrays.asList("=~/(sh|bash|ksh|csh|tcsh|zsh)/","-c",$ARG,...),...)
21
+ - pattern: |
22
+ $RUNTIME.exec(new String[]{"=~/(sh|bash|ksh|csh|tcsh|zsh)/","-c",$ARG,...},...)
23
+ - patterns:
24
+ - pattern-either:
25
+ - pattern: |
26
+ $RUNTIME.exec($CMD,"-c",$ARG,...)
27
+ - pattern: |
28
+ $RUNTIME.exec(Arrays.asList($CMD,"-c",$ARG,...),...)
29
+ - pattern: |
30
+ $RUNTIME.exec(new String[]{$CMD,"-c",$ARG,...},...)
31
+ - pattern-inside: |
32
+ $CMD = "=~/(sh|bash|ksh|csh|tcsh|zsh)/";
33
+ ...
34
+ - patterns:
35
+ - pattern-either:
36
+ - pattern: |
37
+ $RUNTIME.exec($CMD, $EXECUTE, $ARG, ...)
38
+ - pattern-inside: |
39
+ $CMD = new String[]{"=~/(sh|bash|ksh|csh|tcsh|zsh)/", ...};
40
+ ...
41
+ - patterns:
42
+ - pattern-either:
43
+ - pattern: |
44
+ $RUNTIME.exec("=~/(sh|bash|ksh|csh|tcsh|zsh)/", $BASH, $ARG,...)
45
+ - pattern: |
46
+ $RUNTIME.exec(Arrays.asList("=~/(sh|bash|ksh|csh|tcsh|zsh)/",$BASH,$ARG,...),...)
47
+ - pattern: |
48
+ $RUNTIME.exec(new String[]{"=~/(sh|bash|ksh|csh|tcsh|zsh)/",$BASH,$ARG,...},...)
49
+ - pattern-inside: |
50
+ $BASH = new String[]{"=~/(-c)/", ...};
51
+ ...
52
+ - pattern-not-inside: |
53
+ $ARG = "...";
54
+ ...
55
+ - pattern-not: |
56
+ $RUNTIME.exec("...","...","...",...)
57
+ - pattern-not: |
58
+ $RUNTIME.exec(new String[]{"...","...","...",...},...)
59
+ - pattern-not: |
60
+ $RUNTIME.exec(Arrays.asList("...","...","...",...),...)
61
+ message: >-
62
+ A formatted or concatenated string was detected as input to a java.lang.Runtime
63
+ call.
64
+ This is dangerous if a variable is controlled by user input and could result in
65
+ a
66
+ command injection. Ensure your variables are not controlled by users or sufficiently
67
+ sanitized.
68
+ metadata:
69
+ cwe:
70
+ - "CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')"
71
+ owasp:
72
+ - A01:2017 - Injection
73
+ - A03:2021 - Injection
74
+ - A05:2025 - Injection
75
+ source-rule-url: https://find-sec-bugs.github.io/bugs.htm#COMMAND_INJECTION.
76
+ category: security
77
+ technology:
78
+ - java
79
+ references:
80
+ - https://owasp.org/Top10/A03_2021-Injection
81
+ cwe2022-top25: true
82
+ cwe2021-top25: true
83
+ subcategory:
84
+ - audit
85
+ likelihood: LOW
86
+ impact: HIGH
87
+ confidence: LOW
88
+ severity: ERROR
89
+ languages:
90
+ - java