@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,96 @@
1
+ # CWE-328: 弱哈希函数检测规则 (Sprint 2.2 — 显式枚举+直接调用覆盖)
2
+ # 修复: 显式枚举 MD2/MD4/MD5 常量名,排除 SHA-256/384/512
3
+ # 覆盖: 变量赋值 + 直接调用(.digest链式) 两种写法
4
+
5
+ rules:
6
+
7
+ # ZM-JAVA-WEAKHASH-001: MD2/MD4/MD5 使用
8
+ - id: zm-java-weakhash-001
9
+ severity: CRITICAL
10
+ message: |
11
+ 使用弱哈希 MD2/MD4/MD5。NIST SP 800-131A 已禁止。
12
+ 升级为 SHA-256 或更高强度算法。
13
+ languages:
14
+ - java
15
+ pattern-either:
16
+ - pattern: $MD = MessageDigest.getInstance("MD5")
17
+ - pattern: MessageDigest.getInstance("MD5")
18
+ - pattern: $MD = MessageDigest.getInstance("MD2")
19
+ - pattern: MessageDigest.getInstance("MD2")
20
+ - pattern: $MD = MessageDigest.getInstance("MD4")
21
+ - pattern: MessageDigest.getInstance("MD4")
22
+ - pattern: MessageDigest.getInstance("MD5", $PROVIDER)
23
+ - pattern: MessageDigest.getInstance("MD2", $PROVIDER)
24
+ - pattern: MessageDigest.getInstance("MD4", $PROVIDER)
25
+ metadata:
26
+ cwe: "CWE-328: Use of Weak Hash"
27
+ owasp: "A02:2021 - Cryptographic Failures"
28
+ precision: very-high
29
+ tags: [crypto, hash, weak-algorithm]
30
+ references:
31
+ - https://csrc.nist.gov/pubs/sp/800/131/a/r2/final
32
+
33
+ # ZM-JAVA-WEAKHASH-002: 密码存储使用弱 KDF
34
+ - id: zm-java-weakhash-002
35
+ severity: CRITICAL
36
+ message: |
37
+ PBKDF2WithHmacSHA1 或 PBEKeySpec salt 为 null 的弱密码存储。
38
+ OWASP 推荐 PBKDF2 迭代 >= 310000 (HMAC-SHA256)。
39
+ languages:
40
+ - java
41
+ pattern-either:
42
+ - pattern: SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1")
43
+ - pattern: $F = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1", $PROVIDER)
44
+ - pattern: new PBEKeySpec($PASSWORD, null, $ITER, $LEN)
45
+ - pattern: $SPEC = new PBEKeySpec($PASSWORD, null, $ITER, $LEN)
46
+ - pattern: new PBEKeySpec($PASSWORD)
47
+ - pattern: $SPEC = new PBEKeySpec($PASSWORD)
48
+ metadata:
49
+ cwe: "CWE-328: Use of Weak Hash"
50
+ owasp: "A02:2021 - Cryptographic Failures"
51
+ precision: high
52
+ tags: [crypto, password-storage, pbkdf2]
53
+ references:
54
+ - https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html
55
+
56
+ # ZM-JAVA-WEAKHASH-003: SHA-1 在安全场景使用
57
+ - id: zm-java-weakhash-003
58
+ severity: HIGH
59
+ message: |
60
+ SHA-1 在安全场景下使用(SHAttered 2017 已实现碰撞攻击)。
61
+ 升级为 SHA-256/384/512。
62
+ languages:
63
+ - java
64
+ pattern-either:
65
+ - pattern: MessageDigest.getInstance("SHA-1")
66
+ - pattern: MessageDigest.getInstance("SHA1")
67
+ - pattern: $MD = MessageDigest.getInstance("SHA-1")
68
+ - pattern: $MD = MessageDigest.getInstance("SHA1")
69
+ metadata:
70
+ cwe: "CWE-328: Use of Weak Hash"
71
+ owasp: "A02:2021 - Cryptographic Failures"
72
+ precision: high
73
+ tags: [crypto, hash, sha1]
74
+ references:
75
+ - https://shattered.io/
76
+
77
+ # ZM-JAVA-WEAKHASH-004: Spring Security 已废弃 Hashing API
78
+ - id: zm-java-weakhash-004
79
+ severity: MEDIUM
80
+ message: |
81
+ Spring Security 已废弃 Hashing API (Hashing.sha256/sha1/md5)。
82
+ 推荐迁移到 BCryptPasswordEncoder / Argon2PasswordEncoder。
83
+ languages:
84
+ - java
85
+ pattern-either:
86
+ - pattern: Hashing.sha256()
87
+ - pattern: Hashing.sha1()
88
+ - pattern: Hashing.md5()
89
+ - pattern: new Hashing()
90
+ metadata:
91
+ cwe: "CWE-328: Use of Weak Hash"
92
+ owasp: "A02:2021 - Cryptographic Failures"
93
+ precision: medium
94
+ tags: [crypto, password-storage, spring-security]
95
+ references:
96
+ - https://docs.spring.io/spring-security/reference/features/authentication/password-storage.html
@@ -0,0 +1,26 @@
1
+ # CWE-329: CBC模式下的Padding Oracle风险 (Sprint 2.2)
2
+ # 变更: 删除 ZM-JAVA-CBCMODE-002 (doFinal try-catch 检测)
3
+ # 原因: pattern-not 只作用于匹配区域——doFinal在try内但Cipher.getInstance在try外
4
+ # Semgrep无数据流分析能力,无法区分CBC vs GCM的doFinal调用
5
+ # ZM-JAVA-CBCMODE-001 (直接匹配Cipher.getInstance CBC) 已覆盖高置信度场景
6
+
7
+ rules:
8
+
9
+ # ZM-JAVA-CBCMODE-001: AES/CBC/PKCS5Padding 使用
10
+ - id: zm-java-cbcmode-001
11
+ severity: HIGH
12
+ message: |
13
+ AES/CBC/PKCS5Padding 易受 Padding Oracle 攻击。
14
+ 迁移到 AES/GCM/NoPadding (AEAD模式)。
15
+ languages:
16
+ - java
17
+ pattern-either:
18
+ - pattern: Cipher.getInstance("AES/CBC/PKCS5Padding")
19
+ - pattern: $CIP = Cipher.getInstance("AES/CBC/PKCS5Padding")
20
+ - pattern: Cipher.getInstance("AES/CBC/PKCS5Padding", $PROVIDER)
21
+ - pattern: $CIP = Cipher.getInstance("AES/CBC/PKCS5Padding", $PROVIDER)
22
+ metadata:
23
+ cwe: "CWE-329: Generation of Predictable IV with CBC Mode"
24
+ owasp: "A02:2021 - Cryptographic Failures"
25
+ precision: medium
26
+ tags: [crypto, cbc, padding-oracle]
@@ -0,0 +1,23 @@
1
+ # CWE-352: 跨站请求伪造 (CSRF) 检测规则
2
+ # 逐码 ZhuMa V4.0 Alpha — 通用规则库
3
+
4
+ rules:
5
+
6
+ # ZM-JAVA-CSRF-001: Spring Security 显式禁用 CSRF 保护
7
+ - id: zm-java-csrf-001
8
+ severity: HIGH
9
+ message: |
10
+ 检测到 Spring Security 配置中显式禁用了 CSRF 保护 (csrf().disable())。
11
+ 禁用 CSRF 保护会使应用容易受到跨站请求伪造攻击。
12
+ 除非是纯 REST API 使用无状态 Token 认证,否则应启用或手动实现 CSRF 防护。
13
+ languages:
14
+ - java
15
+ pattern-either:
16
+ - pattern: |
17
+ $HTTP.csrf().disable();
18
+ - pattern: |
19
+ $HTTP.csrf().disable()
20
+ metadata:
21
+ cwe: "CWE-352: Cross-Site Request Forgery (CSRF)"
22
+ owasp: "A01:2021 - Broken Access Control"
23
+ precision: very-high
@@ -0,0 +1,41 @@
1
+ # CWE-434: 不受限文件上传检测规则
2
+ # 逐码 ZhuMa V4.0 Alpha — 通用规则库
3
+
4
+ rules:
5
+
6
+ # ZM-JAVA-FU-001: MultipartFile 接收但未校验扩展名
7
+ - id: zm-java-fu-001
8
+ severity: HIGH
9
+ message: |
10
+ 检测到 MultipartFile 接收文件上传但未进行扩展名白名单校验。
11
+ 攻击者可上传 JSP/EXE 等可执行文件获取服务器控制权。
12
+ 必须校验文件扩展名 (白名单)、Content-Type、Magic Number。
13
+ languages:
14
+ - java
15
+ pattern-either:
16
+ - pattern: |
17
+ $FILE.transferTo(new File($PATH));
18
+ - pattern: |
19
+ $FILE.transferTo($PATH);
20
+ metadata:
21
+ cwe: "CWE-434: Unrestricted Upload of File with Dangerous Type"
22
+ owasp: "A03:2021 - Injection"
23
+ precision: medium
24
+
25
+ # ZM-JAVA-FU-002: FileOutputStream 直接写入上传数据
26
+ - id: zm-java-fu-002
27
+ severity: MEDIUM
28
+ message: |
29
+ 检测到文件上传直接使用用户提供的文件名写入磁盘。
30
+ 应生成随机文件名存储,使用 UUID 或 hash 值命名。
31
+ languages:
32
+ - java
33
+ pattern-either:
34
+ - pattern: |
35
+ FileOutputStream $FOS = new FileOutputStream($FILENAME);
36
+ ...
37
+ $FOS.write($DATA);
38
+ metadata:
39
+ cwe: "CWE-434: Unrestricted Upload of File with Dangerous Type"
40
+ owasp: "A03:2021 - Injection"
41
+ precision: low
@@ -0,0 +1,44 @@
1
+ # CWE-502: 不安全反序列化检测规则
2
+ # 逐码 ZhuMa V4.0 Alpha — 通用规则库
3
+
4
+ rules:
5
+
6
+ # ZM-JAVA-DS-001: ObjectInputStream.readObject 无过滤
7
+ - id: zm-java-ds-001
8
+ severity: CRITICAL
9
+ message: |
10
+ 检测到 ObjectInputStream.readObject() 调用,未配置类型白名单过滤。
11
+ 攻击者可通过构造恶意序列化对象执行任意代码。
12
+ 应使用 ValidatingObjectInputStream (Apache Commons IO) 限制可反序列化类型,
13
+ 或使用 JSON/Protobuf 等替代序列化方案。
14
+ languages:
15
+ - java
16
+ pattern-either:
17
+ - pattern: |
18
+ new ObjectInputStream($INPUT).readObject();
19
+ - pattern: |
20
+ $OIS = new ObjectInputStream($INPUT);
21
+ ...
22
+ $OIS.readObject();
23
+ metadata:
24
+ cwe: "CWE-502: Deserialization of Untrusted Data"
25
+ owasp: "A08:2021 - Software and Data Integrity Failures"
26
+ precision: high
27
+
28
+ # ZM-JAVA-DS-002: ObjectInputStream 未使用过滤包装
29
+ - id: zm-java-ds-002
30
+ severity: MEDIUM
31
+ message: |
32
+ ObjectInputStream 直接使用,未通过 ValidatingObjectInputStream 或 resolveClass 过滤。
33
+ 建议添加类型白名单验证。
34
+ languages:
35
+ - java
36
+ pattern-either:
37
+ - pattern: |
38
+ $OIS = new ObjectInputStream(...);
39
+ - pattern: |
40
+ new ObjectInputStream(...);
41
+ metadata:
42
+ cwe: "CWE-502: Deserialization of Untrusted Data"
43
+ owasp: "A08:2021 - Software and Data Integrity Failures"
44
+ precision: low
@@ -0,0 +1,110 @@
1
+ # CWE-601: URL 重定向 (Open Redirect) 检测规则 (Sprint 2 FPR优化版)
2
+ # 变更: ZM-JAVA-REDIRECT-001 "redirect:" + $VAR 降精度 low→very-low
3
+ # 原因: 任意变量拼接 "redirect:" 无法区分是否经过白名单校验, FPR=50%
4
+
5
+ rules:
6
+
7
+ # ZM-JAVA-REDIRECT-001: redirect: + req.getParameter() 用户可控 (高精度)
8
+ - id: zm-java-redirect-001
9
+ severity: MEDIUM
10
+ message: |
11
+ Spring Controller 返回 "redirect:" 拼接 req.getParameter() —— 用户直接可控重定向目标。
12
+ 攻击者可构造恶意 URL 实施钓鱼攻击。
13
+ 修复: 白名单校验重定向目标 URL,仅允许相对路径或已知域名。
14
+ languages:
15
+ - java
16
+ pattern-either:
17
+ - pattern: |
18
+ $METHOD(...) {
19
+ ...
20
+ return "redirect:" + $REQ.getParameter(...);
21
+ ...
22
+ }
23
+ - pattern: |
24
+ $METHOD(...) {
25
+ ...
26
+ $STR = $REQ.getParameter(...);
27
+ ...
28
+ return "redirect:" + $STR;
29
+ ...
30
+ }
31
+ metadata:
32
+ cwe: "CWE-601: URL Redirection to Untrusted Site ('Open Redirect')"
33
+ owasp: "A01:2021 - Broken Access Control"
34
+ precision: high
35
+
36
+ # ZM-JAVA-REDIRECT-005: redirect: + 任意变量 (低精度,需人工复核)
37
+ - id: zm-java-redirect-005
38
+ severity: LOW
39
+ message: |
40
+ Spring Controller 返回 "redirect:" 拼接变量,可能是开放重定向风险。
41
+ 需人工确认该变量是否经过 URL 白名单校验。如果已有白名单校验,忽略本规则。
42
+ languages:
43
+ - java
44
+ patterns:
45
+ - pattern: |
46
+ $METHOD(...) {
47
+ ...
48
+ return "redirect:" + $VAR;
49
+ ...
50
+ }
51
+ - pattern-not: |
52
+ $METHOD(...) {
53
+ ...
54
+ return "redirect:" + $REQ.getParameter(...);
55
+ ...
56
+ }
57
+ metadata:
58
+ cwe: "CWE-601: URL Redirection to Untrusted Site ('Open Redirect')"
59
+ owasp: "A01:2021 - Broken Access Control"
60
+ precision: very-low
61
+
62
+ # ZM-JAVA-REDIRECT-002: HttpServletResponse.sendRedirect 用户可控
63
+ - id: zm-java-redirect-002
64
+ severity: MEDIUM
65
+ message: |
66
+ HttpServletResponse.sendRedirect() 使用用户可控 URL 可能导致钓鱼攻击。
67
+ 修复: 白名单校验目标域名,使用 response.encodeRedirectURL() 编码。
68
+ languages:
69
+ - java
70
+ pattern-either:
71
+ - pattern: $RESP.sendRedirect($REQ.getParameter(...));
72
+ - pattern: $RESP.sendRedirect($URL);
73
+ metadata:
74
+ cwe: "CWE-601: URL Redirection to Untrusted Site ('Open Redirect')"
75
+ owasp: "A01:2021 - Broken Access Control"
76
+ precision: medium
77
+
78
+ # ZM-JAVA-REDIRECT-003: ModelAndView 构造重定向 URL 用户可控
79
+ - id: zm-java-redirect-003
80
+ severity: MEDIUM
81
+ message: |
82
+ ModelAndView 以 "redirect:" 前缀拼接用户输入可能导致开放重定向。
83
+ 修复: 使用 FlashAttributes 传递参数,对目标做白名单校验。
84
+ languages:
85
+ - java
86
+ pattern-either:
87
+ - pattern: new ModelAndView("redirect:" + $URL);
88
+ - pattern: ModelAndView $MV = new ModelAndView("redirect:" + $URL);
89
+ ...
90
+ metadata:
91
+ cwe: "CWE-601: URL Redirection to Untrusted Site ('Open Redirect')"
92
+ owasp: "A01:2021 - Broken Access Control"
93
+ precision: high
94
+
95
+ # ZM-JAVA-REDIRECT-004: Spring RedirectView URL 用户可控
96
+ - id: zm-java-redirect-004
97
+ severity: LOW
98
+ message: |
99
+ Spring RedirectView 使用用户可控 URL 可能导致开放重定向。
100
+ 修复: RedirectView.setHosts() 限制域名 + setContextRelative(true) 仅允许相对路径。
101
+ languages:
102
+ - java
103
+ pattern-either:
104
+ - pattern: new RedirectView($URL);
105
+ - pattern: RedirectView $RV = new RedirectView($URL);
106
+ ...
107
+ metadata:
108
+ cwe: "CWE-601: URL Redirection to Untrusted Site ('Open Redirect')"
109
+ owasp: "A01:2021 - Broken Access Control"
110
+ precision: medium
@@ -0,0 +1,70 @@
1
+ # CWE-611: XML 外部实体注入 (XXE) 检测规则
2
+ # 逐码 ZhuMa V4.0 Alpha — 通用规则库
3
+
4
+ rules:
5
+
6
+ # ZM-JAVA-XXE-001: DocumentBuilderFactory 未禁用外部实体
7
+ - id: zm-java-xxe-001
8
+ severity: HIGH
9
+ message: |
10
+ 检测到 DocumentBuilderFactory 未禁用 DTD 和外部实体解析。
11
+ 攻击者可构造恶意 XML 触发 XXE 攻击读取任意文件、内网探测或 DoS。
12
+ 必须设置 setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)
13
+ 或 setFeature("http://xml.org/sax/features/external-general-entities", false)
14
+ languages:
15
+ - java
16
+ pattern-either:
17
+ - pattern: |
18
+ DocumentBuilderFactory $DBF = DocumentBuilderFactory.newInstance();
19
+ ...
20
+ $DBF.newDocumentBuilder().parse(...);
21
+ - pattern: |
22
+ DocumentBuilderFactory $DBF = DocumentBuilderFactory.newInstance();
23
+ ...
24
+ $PARSER = $DBF.newDocumentBuilder();
25
+ ...
26
+ $PARSER.parse(...);
27
+ metadata:
28
+ cwe: "CWE-611: Improper Restriction of XML External Entity Reference"
29
+ owasp: "A05:2021 - Security Misconfiguration"
30
+ precision: medium
31
+
32
+ # ZM-JAVA-XXE-002: SAXParserFactory 未禁用外部实体
33
+ - id: zm-java-xxe-002
34
+ severity: HIGH
35
+ message: |
36
+ SAXParserFactory 未禁用外部实体解析,存在 XXE 攻击风险。
37
+ 必须设置 setFeature("http://xml.org/sax/features/external-general-entities", false)。
38
+ languages:
39
+ - java
40
+ pattern-either:
41
+ - pattern: |
42
+ SAXParserFactory $SPF = SAXParserFactory.newInstance();
43
+ ...
44
+ $SPF.newSAXParser().parse(...);
45
+ metadata:
46
+ cwe: "CWE-611: Improper Restriction of XML External Entity Reference"
47
+ owasp: "A05:2021 - Security Misconfiguration"
48
+ precision: medium
49
+
50
+ # ZM-JAVA-XXE-003: XMLInputFactory 未禁用外部实体
51
+ - id: zm-java-xxe-003
52
+ severity: HIGH
53
+ message: |
54
+ XMLInputFactory 未禁用外部实体和 DTD 处理,存在 XXE 攻击风险。
55
+ 应设置 XMLInputFactory.SUPPORT_DTD 为 false。
56
+ languages:
57
+ - java
58
+ pattern-either:
59
+ - pattern: |
60
+ XMLInputFactory $XIF = XMLInputFactory.newInstance();
61
+ ...
62
+ $XIF.createXMLEventReader(...);
63
+ - pattern: |
64
+ XMLInputFactory $XIF = XMLInputFactory.newInstance();
65
+ ...
66
+ $XIF.createXMLStreamReader(...);
67
+ metadata:
68
+ cwe: "CWE-611: Improper Restriction of XML External Entity Reference"
69
+ owasp: "A05:2021 - Security Misconfiguration"
70
+ precision: medium
@@ -0,0 +1,49 @@
1
+ # CWE-732: 不正确的权限分配检测规则
2
+ # 逐码 ZhuMa V4.0 Alpha — 通用规则库
3
+
4
+ rules:
5
+
6
+ # ZM-JAVA-IP-001: setWritable 设置过宽权限
7
+ - id: zm-java-ip-001
8
+ severity: MEDIUM
9
+ message: |
10
+ 检测到 setWritable/readable/executable 设置过宽的权限 (true, false 即全局可写)。
11
+ 可能导致敏感文件被非授权用户修改。
12
+ 生产环境应限制文件权限为所有者读写 (600)。
13
+ languages:
14
+ - java
15
+ pattern-either:
16
+ - pattern: |
17
+ $FILE.setWritable(true, false);
18
+ - pattern: |
19
+ $FILE.setReadable(true, false);
20
+ - pattern: |
21
+ $FILE.setExecutable(true, false);
22
+ - pattern: |
23
+ $FILE.setWritable(true);
24
+ - pattern: |
25
+ $FILE.setReadable(true);
26
+ - pattern: |
27
+ $FILE.setExecutable(true);
28
+ metadata:
29
+ cwe: "CWE-732: Incorrect Permission Assignment for Critical Resource"
30
+ owasp: "A01:2021 - Broken Access Control"
31
+ precision: medium
32
+
33
+ # ZM-JAVA-IP-002: chmod 777
34
+ - id: zm-java-ip-002
35
+ severity: HIGH
36
+ message: |
37
+ 检测到 Runtime.exec 执行 chmod 777 命令,授予所有用户完全读写执行权限。
38
+ 严重违反最小权限原则,可能导致任意用户篡改文件。
39
+ languages:
40
+ - java
41
+ pattern-either:
42
+ - pattern: |
43
+ Runtime.getRuntime().exec("chmod 777 ...");
44
+ - pattern: |
45
+ Runtime.getRuntime().exec("chmod -R 777 ...");
46
+ metadata:
47
+ cwe: "CWE-732: Incorrect Permission Assignment for Critical Resource"
48
+ owasp: "A01:2021 - Broken Access Control"
49
+ precision: very-high
@@ -0,0 +1,44 @@
1
+ # CWE-770: 资源耗尽 (DoS) 检测规则
2
+ # 逐码 ZhuMa V4.0 Alpha — 通用规则库
3
+
4
+ rules:
5
+
6
+ # ZM-JAVA-RE-001: 无限循环无超时/退出条件
7
+ - id: zm-java-re-001
8
+ severity: MEDIUM
9
+ message: |
10
+ 检测到 while(true) 循环未设置超时或退出条件。
11
+ 可能导致 CPU 资源耗尽造成拒绝服务。
12
+ 应添加最大迭代次数限制或超时退出机制。
13
+ languages:
14
+ - java
15
+ pattern-either:
16
+ - pattern: |
17
+ while (true) {
18
+ ...
19
+ }
20
+ - pattern: |
21
+ while (1 == 1) {
22
+ ...
23
+ }
24
+ metadata:
25
+ cwe: "CWE-770: Allocation of Resources Without Limits or Throttling"
26
+ owasp: "A05:2021 - Security Misconfiguration"
27
+ precision: low
28
+
29
+ # ZM-JAVA-RE-002: 无限制读取输入流
30
+ - id: zm-java-re-002
31
+ severity: LOW
32
+ message: |
33
+ 检测到未限制大小的输入流读取,可能导致内存溢出 DoS。
34
+ 应限制读取字节数或使用缓冲区分块处理。
35
+ languages:
36
+ - java
37
+ pattern-either:
38
+ - pattern: |
39
+ byte[] $BUF = new byte[$INPUT.available()];
40
+ $INPUT.read($BUF);
41
+ metadata:
42
+ cwe: "CWE-770: Allocation of Resources Without Limits or Throttling"
43
+ owasp: "A05:2021 - Security Misconfiguration"
44
+ precision: medium
@@ -0,0 +1,43 @@
1
+ # CWE-78: OS 命令注入检测规则
2
+ # 逐码 ZhuMa V4.0 Alpha — 通用规则库
3
+
4
+ rules:
5
+
6
+ # ZM-JAVA-OSCI-001: Runtime.exec 字符串拼接或用户输入
7
+ - id: zm-java-osci-001
8
+ severity: CRITICAL
9
+ message: |
10
+ 检测到 Runtime.getRuntime().exec() 使用字符串拼接构造系统命令。
11
+ 攻击者可注入额外命令 (如 ; rm -rf /) 导致任意代码执行。
12
+ 应使用 ProcessBuilder + 参数数组,避免 Shell 解析。
13
+ languages:
14
+ - java
15
+ pattern-either:
16
+ - pattern: |
17
+ String $CMD = ... + $PARAM;
18
+ ...
19
+ Runtime.getRuntime().exec($CMD);
20
+ - pattern: |
21
+ Runtime.getRuntime().exec($CMD + $PARAM);
22
+ - pattern: |
23
+ Runtime.getRuntime().exec($VAR);
24
+ metadata:
25
+ cwe: "CWE-78: OS Command Injection"
26
+ owasp: "A03:2021 - Injection"
27
+ precision: medium
28
+
29
+ # ZM-JAVA-OSCI-002: ProcessBuilder 参数拼接
30
+ - id: zm-java-osci-002
31
+ severity: HIGH
32
+ message: |
33
+ ProcessBuilder 使用了字符串拼接构造命令参数。
34
+ 应使用参数数组传入独立参数,避免命令注入。
35
+ languages:
36
+ - java
37
+ pattern-either:
38
+ - pattern: |
39
+ new ProcessBuilder($CMD + $PARAM);
40
+ metadata:
41
+ cwe: "CWE-78: OS Command Injection"
42
+ owasp: "A03:2021 - Injection"
43
+ precision: medium
@@ -0,0 +1,37 @@
1
+ # CWE-787: 越界写入检测规则
2
+ # 逐码 ZhuMa V4.0 Alpha — 通用规则库
3
+
4
+ rules:
5
+
6
+ # ZM-JAVA-OOB-001: 数组索引无边界检查
7
+ - id: zm-java-oob-001
8
+ severity: MEDIUM
9
+ message: |
10
+ 检测到数组访问使用变量索引但未进行边界检查。
11
+ 可能导致 ArrayIndexOutOfBoundsException,在 native 代码中可能被利用为越界写入。
12
+ 应检查 index >= 0 && index < array.length。
13
+ languages:
14
+ - java
15
+ pattern-either:
16
+ - pattern: |
17
+ $ARR[$INDEX] = $VAL;
18
+ metadata:
19
+ cwe: "CWE-787: Out-of-bounds Write"
20
+ owasp: "A06:2021 - Vulnerable and Outdated Components"
21
+ precision: very-low
22
+
23
+ # ZM-JAVA-OOB-002: ByteBuffer put 无 position 检查
24
+ - id: zm-java-oob-002
25
+ severity: LOW
26
+ message: |
27
+ 检测到 ByteBuffer.put() 写入字节数组但未检查 remaining() 容量。
28
+ 可能导致 BufferOverflowException,降低服务可用性。
29
+ languages:
30
+ - java
31
+ pattern-either:
32
+ - pattern: |
33
+ $BUF.put($DATA);
34
+ metadata:
35
+ cwe: "CWE-787: Out-of-bounds Write"
36
+ owasp: "A06:2021 - Vulnerable and Outdated Components"
37
+ precision: very-low
@@ -0,0 +1,51 @@
1
+ # CWE-79: 跨站脚本攻击 (XSS) 检测规则
2
+ # 逐码 ZhuMa V4.0 Alpha — 通用规则库
3
+
4
+ rules:
5
+
6
+ # ZM-JAVA-XSS-001: response.getWriter 未转义输出 request parameter
7
+ - id: zm-java-xss-001
8
+ severity: HIGH
9
+ message: |
10
+ 检测到 HttpServletResponse.getWriter().print/write 直接输出用户可控变量。
11
+ 攻击者可能注入恶意脚本导致 XSS 攻击。
12
+ 应对输出进行 HTML 实体编码 (OWASP Java Encoder / ESAPI)。
13
+ languages:
14
+ - java
15
+ pattern-either:
16
+ - pattern: |
17
+ $RESP.getWriter().print($REQ.getParameter(...));
18
+ - pattern: |
19
+ $RESP.getWriter().write($REQ.getParameter(...));
20
+ - pattern: |
21
+ $RESP.getWriter().println($REQ.getParameter(...));
22
+ metadata:
23
+ cwe: "CWE-79: Cross-site Scripting (XSS)"
24
+ owasp: "A03:2021 - Injection"
25
+ precision: high
26
+
27
+ # ZM-JAVA-XSS-002: request.getParameter 赋值后未转义直接输出
28
+ - id: zm-java-xss-002
29
+ severity: HIGH
30
+ message: |
31
+ 检测到从 HttpServletRequest 获取的参数直接输出到 response,未经 HTML 转义。
32
+ 建议对输出进行编码:Encode.forHtml(param)
33
+ languages:
34
+ - java
35
+ pattern-either:
36
+ - pattern: |
37
+ String $VAR = $REQ.getParameter(...);
38
+ ...
39
+ $RESP.getWriter().print($VAR);
40
+ - pattern: |
41
+ String $VAR = $REQ.getParameter(...);
42
+ ...
43
+ $RESP.getWriter().write($VAR);
44
+ - pattern: |
45
+ String $VAR = $REQ.getParameter(...);
46
+ ...
47
+ $RESP.getWriter().println($VAR);
48
+ metadata:
49
+ cwe: "CWE-79: Cross-site Scripting (XSS)"
50
+ owasp: "A03:2021 - Injection"
51
+ precision: high
@@ -0,0 +1,40 @@
1
+ # CWE-862: 缺少授权检查检测规则
2
+ # 逐码 ZhuMa V4.0 Alpha — 通用规则库
3
+
4
+ rules:
5
+
6
+ # ZM-JAVA-MAZ-001: 敏感操作无授权检查
7
+ - id: zm-java-maz-001
8
+ severity: HIGH
9
+ message: |
10
+ 检测到敏感操作 (删除) 端点可能缺少授权检查。
11
+ 即使通过认证,也应校验用户是否有权限执行该操作 (如是否为数据所有者)。
12
+ 建议添加 @PreAuthorize + 数据级权限校验。
13
+ languages:
14
+ - java
15
+ pattern-either:
16
+ - pattern: |
17
+ @DeleteMapping(...)
18
+ public $RET $METHOD(...) {
19
+ ...
20
+ $DAO.deleteById(...);
21
+ ...
22
+ }
23
+ - pattern: |
24
+ @PutMapping(...)
25
+ public $RET $METHOD(...) {
26
+ ...
27
+ $OBJ.update(...);
28
+ ...
29
+ }
30
+ - pattern: |
31
+ @RequestMapping(...)
32
+ public void $METHOD(...) {
33
+ ...
34
+ $DAO.deleteById(...);
35
+ ...
36
+ }
37
+ metadata:
38
+ cwe: "CWE-862: Missing Authorization"
39
+ owasp: "A01:2021 - Broken Access Control"
40
+ precision: low