@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,56 @@
1
+ # CWE-200: WebView 远程调试已开启 (Android)
2
+ # 逐码 ZhuMa V4.0 — Android 规则库
3
+ # 来源: V3 审计引擎 VULN-WV-005
4
+
5
+ rules:
6
+ - id: zm-android-webview-debugging-enabled
7
+ severity: WARNING
8
+ message: |
9
+ WebView 远程调试 (setWebContentsDebuggingEnabled) 已启用。
10
+ 在生产环境中,攻击者可通过 chrome://inspect 直接调试 WebView、注入任意 JavaScript、
11
+ 窃取 Cookie/Token 等敏感数据。
12
+ 修复: 仅在 BuildConfig.DEBUG 条件下启用;Release 构建必须关闭。
13
+ languages:
14
+ - java
15
+ patterns:
16
+ - pattern: |
17
+ $WV.setWebContentsDebuggingEnabled(true)
18
+ - pattern-not: |
19
+ if (BuildConfig.DEBUG) {
20
+ $WV.setWebContentsDebuggingEnabled(true);
21
+ }
22
+ metadata:
23
+ cwe: "CWE-200: Exposure of Sensitive Information to an Unauthorized Actor"
24
+ owasp-mobile: "M1: Improper Platform Usage"
25
+ masvs: "MASVS-RESILIENCE-2"
26
+ category: android-webview
27
+ precision: medium
28
+ confidence: high
29
+ likelihood: medium
30
+ impact: medium
31
+ source: "V3 Audit Engine - VULN-WV-005"
32
+ references:
33
+ - https://developer.android.com/reference/android/webkit/WebView#setWebContentsDebuggingEnabled(boolean)
34
+
35
+ - id: zm-android-webview-debugging-enabled-kotlin
36
+ severity: WARNING
37
+ message: |
38
+ WebView 远程调试已开启 (Kotlin)。
39
+ 生产环境应禁用 WebView 远程调试。
40
+ languages:
41
+ - kotlin
42
+ patterns:
43
+ - pattern: |
44
+ $WV.setWebContentsDebuggingEnabled(true)
45
+ - pattern-not: |
46
+ if (BuildConfig.DEBUG) {
47
+ $WV.setWebContentsDebuggingEnabled(true)
48
+ }
49
+ metadata:
50
+ cwe: "CWE-200: Exposure of Sensitive Information to an Unauthorized Actor"
51
+ owasp-mobile: "M1: Improper Platform Usage"
52
+ masvs: "MASVS-RESILIENCE-2"
53
+ category: android-webview
54
+ precision: medium
55
+ confidence: high
56
+ source: "V3 Audit Engine - VULN-WV-005"
@@ -0,0 +1,30 @@
1
+ # CWE-200: WebView setAllowUniversalAccessFromFileURLs (Android)
2
+ # 逐码 ZhuMa V4.0 — Android 规则库
3
+ # 来源: V3 审计引擎 VULN-WV-008
4
+
5
+ rules:
6
+ - id: zm-android-webview-universal-access-file-urls
7
+ severity: CRITICAL
8
+ message: |
9
+ 检测到 setAllowUniversalAccessFromFileURLs(true) - 极危配置。
10
+ 这使得 file:// 页面可通过 XMLHttpRequest 访问任意源,完全绕过同源策略。
11
+ 攻击者可通过恶意 file:// 页面窃取本地文件并通过网络发送到攻击者服务器。
12
+ 这是 Google 官方声明后悔引入的 API,必须禁用。
13
+ 修复: setAllowUniversalAccessFromFileURLs(false);
14
+ languages:
15
+ - java
16
+ pattern: |
17
+ $WV.getSettings().setAllowUniversalAccessFromFileURLs(true)
18
+ metadata:
19
+ cwe: "CWE-200: Exposure of Sensitive Information to an Unauthorized Actor"
20
+ owasp-mobile: "M1: Improper Platform Usage"
21
+ masvs: "MASVS-PLATFORM-2"
22
+ category: android-webview
23
+ precision: high
24
+ confidence: high
25
+ likelihood: critical
26
+ impact: high
27
+ source: "V3 Audit Engine - VULN-WV-008"
28
+ references:
29
+ - https://developer.android.com/reference/android/webkit/WebSettings#setAllowUniversalAccessFromFileURLs(boolean)
30
+ - https://bugs.chromium.org/p/chromium/issues/detail?id=522896
@@ -0,0 +1,96 @@
1
+ # CWE-200: Missing FLAG_SECURE for Sensitive Screens (Android)
2
+ # ZhuMa V4.0 - Android Rule Library
3
+ # Source: ZhuMa V4.1 Rule Expansion - screen capture and clipboard protection
4
+
5
+ rules:
6
+ - id: zm-android-activity-no-flag-secure
7
+ severity: MEDIUM
8
+ message: |
9
+ Detected Activity.onCreate() without getWindow().setFlags(FLAG_SECURE).
10
+ Without FLAG_SECURE, the screen content can be captured via screenshot, screen recording,
11
+ or the task switcher thumbnail, exposing sensitive data.
12
+ Remediation: Add getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, ...) in onCreate().
13
+ languages:
14
+ - java
15
+ patterns:
16
+ - pattern-either:
17
+ - pattern: |
18
+ public void onCreate(Bundle $B) {
19
+ ...
20
+ super.onCreate($B);
21
+ ...
22
+ setContentView($LAYOUT);
23
+ ...
24
+ }
25
+ metadata:
26
+ cwe: "CWE-200: Exposure of Sensitive Information to an Unauthorized Actor"
27
+ owasp-mobile: "M2: Insecure Data Storage"
28
+ masvs: "MASVS-STORAGE-4"
29
+ category: android-ui
30
+ precision: low
31
+ confidence: low
32
+ source: "ZhuMa V4.1 Rule Expansion"
33
+ references:
34
+ - https://cwe.mitre.org/data/definitions/200.html
35
+ - https://developer.android.com/privacy-and-security/risks/screenshots
36
+
37
+ - id: zm-android-sensitive-activity-no-flag-secure
38
+ severity: MEDIUM
39
+ message: |
40
+ Detected an Activity with a sensitive name (password, payment, creditcard, login, auth, transfer)
41
+ that does not use FLAG_SECURE. Screenshots and screen recording can capture credentials or financial data.
42
+ Remediation: Add getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, ...) in onCreate().
43
+ languages:
44
+ - java
45
+ patterns:
46
+ - pattern-either:
47
+ - pattern: |
48
+ class $ACT extends Activity {
49
+ ...
50
+ }
51
+ - pattern: |
52
+ class $ACT extends AppCompatActivity {
53
+ ...
54
+ }
55
+ - pattern: |
56
+ class $ACT extends FragmentActivity {
57
+ ...
58
+ }
59
+ - metavariable-regex:
60
+ metavariable: $ACT
61
+ regex: '(?i)(.*[Pp]assword.*|.*[Pp]ayment.*|.*[Cc]redit[Cc]ard.*|.*[Ll]ogin.*|.*[Aa]uth.*|.*[Tt]ransfer.*|.*[Cc]heckout.*|.*[Ww]allet.*)'
62
+ metadata:
63
+ cwe: "CWE-200: Exposure of Sensitive Information to an Unauthorized Actor"
64
+ owasp-mobile: "M2: Insecure Data Storage"
65
+ masvs: "MASVS-STORAGE-4"
66
+ category: android-ui
67
+ precision: low
68
+ confidence: low
69
+ source: "ZhuMa V4.1 Rule Expansion"
70
+ references:
71
+ - https://cwe.mitre.org/data/definitions/200.html
72
+
73
+ - id: zm-android-window-flags-no-secure
74
+ severity: MEDIUM
75
+ message: |
76
+ Detected window flag configuration without FLAG_SECURE.
77
+ If this window displays sensitive content (passwords, financial data), it may be captured.
78
+ Remediation: Add WindowManager.LayoutParams.FLAG_SECURE to window flags on sensitive screens.
79
+ languages:
80
+ - java
81
+ patterns:
82
+ - pattern-either:
83
+ - pattern: |
84
+ getWindow().setFlags($FLAGS, $MASK)
85
+ - pattern: |
86
+ getWindow().addFlags($FLAGS)
87
+ metadata:
88
+ cwe: "CWE-200: Exposure of Sensitive Information to an Unauthorized Actor"
89
+ owasp-mobile: "M2: Insecure Data Storage"
90
+ masvs: "MASVS-STORAGE-4"
91
+ category: android-ui
92
+ precision: low
93
+ confidence: low
94
+ source: "ZhuMa V4.1 Rule Expansion"
95
+ references:
96
+ - https://cwe.mitre.org/data/definitions/200.html
@@ -0,0 +1,73 @@
1
+ # CWE-22: Content Provider openFile Path Traversal (Android)
2
+ # ZhuMa V4.0 - Android Rule Library
3
+ # Source: ZhuMa V4.1 Rule Expansion - content provider path traversal hardening
4
+
5
+ rules:
6
+ - id: zm-android-openfile-no-path-validation
7
+ severity: HIGH
8
+ message: |
9
+ Detected ContentProvider.openFile() that constructs a file path from Uri without canonical path check.
10
+ An attacker can use "../" sequences in the Uri path to escape the intended directory and read arbitrary files
11
+ (e.g., /data/data/com.other.app/databases/accounts.db) via path traversal.
12
+ Remediation: Resolve to canonical path and verify it starts with the allowed base directory before opening.
13
+ languages:
14
+ - java
15
+ patterns:
16
+ - pattern-either:
17
+ - pattern: $URI.getPath()
18
+ - pattern: new File($BASE, $URI.getPath())
19
+ metadata:
20
+ cwe: "CWE-22: Improper Limitation of a Pathname to a Restricted Directory"
21
+ owasp-mobile: "M1: Improper Platform Usage"
22
+ masvs: "MASVS-PLATFORM-2"
23
+ category: android-ipc
24
+ precision: low
25
+ confidence: low
26
+ source: "ZhuMa V4.1 Rule Expansion"
27
+ references:
28
+ - https://cwe.mitre.org/data/definitions/22.html
29
+
30
+ - id: zm-android-contentresolver-access-no-validation
31
+ severity: MEDIUM
32
+ message: |
33
+ Detected ContentResolver accessing a content:// Uri without input validation on the path.
34
+ If the Uri comes from an external source (Intent, deeplink), an attacker can manipulate
35
+ the path to access unauthorized content providers or perform path traversal.
36
+ Remediation: Validate the Uri authority and path against expected values before accessing.
37
+ languages:
38
+ - java
39
+ patterns:
40
+ - pattern-either:
41
+ - pattern: $CR.query($URI, $PROJ, $SEL, $ARGS, $SORT)
42
+ metadata:
43
+ cwe: "CWE-22: Improper Limitation of a Pathname to a Restricted Directory"
44
+ owasp-mobile: "M1: Improper Platform Usage"
45
+ masvs: "MASVS-PLATFORM-2"
46
+ category: android-ipc
47
+ precision: low
48
+ confidence: low
49
+ source: "ZhuMa V4.1 Rule Expansion"
50
+ references:
51
+ - https://cwe.mitre.org/data/definitions/22.html
52
+
53
+ - id: zm-android-file-constructor-user-input
54
+ severity: MEDIUM
55
+ message: |
56
+ Detected File constructor using user-controlled input (Intent data, EditText text, URI parameter).
57
+ Using unsanitized input in file paths enables path traversal attacks to read/write arbitrary files.
58
+ Remediation: Always validate and sanitize user-supplied paths. Use getCanonicalPath() and prefix checks.
59
+ languages:
60
+ - java
61
+ patterns:
62
+ - pattern-either:
63
+ - pattern: new File($BASE, $USER_INPUT)
64
+ metadata:
65
+ cwe: "CWE-22: Improper Limitation of a Pathname to a Restricted Directory"
66
+ owasp-mobile: "M1: Improper Platform Usage"
67
+ masvs: "MASVS-PLATFORM-2"
68
+ category: android-ipc
69
+ precision: low
70
+ confidence: low
71
+ source: "ZhuMa V4.1 Rule Expansion"
72
+ references:
73
+ - https://cwe.mitre.org/data/definitions/22.html
@@ -0,0 +1,86 @@
1
+ # CWE-22: 路径遍历 / WebView file:// 协议 (Android)
2
+ # 逐码 ZhuMa V4.0 — Android 规则库
3
+ # 来源: V3 审计引擎 VULN-WV-001 / VULN-WV-006
4
+
5
+ rules:
6
+ - id: zm-android-webview-file-access-enabled
7
+ severity: CRITICAL
8
+ message: |
9
+ 检测到 WebView 允许 file:// 协议访问本地文件。
10
+ 结合 JavaScript 启用时,攻击者可通过恶意 HTML 页面读取 APP 私有目录下的任意文件,
11
+ 包括 databases/.db (含明文凭据)、shared_prefs/.xml (含 Token) 等。
12
+ 修复: setAllowFileAccess(false); 并从 AndroidManifest 中移除 android:allowFileAccess="true"。
13
+ languages:
14
+ - java
15
+ patterns:
16
+ - pattern-either:
17
+ - pattern: |
18
+ $WV.getSettings().setAllowFileAccess(true)
19
+ - pattern: |
20
+ $WV.getSettings().setAllowFileAccessFromFileURLs(true)
21
+ - pattern-not: |
22
+ $WV.getSettings().setAllowFileAccess(false)
23
+ metadata:
24
+ cwe: "CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')"
25
+ owasp-mobile: "M7: Client Code Quality"
26
+ masvs: "MASVS-PLATFORM-2"
27
+ category: android-webview
28
+ precision: high
29
+ confidence: high
30
+ likelihood: high
31
+ impact: critical
32
+ source: "V3 Audit Engine - VULN-WV-001"
33
+ references:
34
+ - https://developer.android.com/reference/android/webkit/WebSettings#setAllowFileAccess(boolean)
35
+ - https://dre.vanderbilt.edu/~schmidt/android/android-4.0/out/target/common/docs/doc-comment-check/guide/webapps/managingWebView.html
36
+
37
+ - id: zm-android-webview-file-access-kotlin
38
+ severity: CRITICAL
39
+ message: |
40
+ WebView 文件协议访问已启用 (Kotlin)。
41
+ 修复: getSettings().setAllowFileAccess(false)
42
+ languages:
43
+ - kotlin
44
+ patterns:
45
+ - pattern-either:
46
+ - pattern: |
47
+ $WV.getSettings().setAllowFileAccess(true)
48
+ - pattern: |
49
+ $WV.getSettings().setAllowFileAccessFromFileURLs(true)
50
+ metadata:
51
+ cwe: "CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')"
52
+ owasp-mobile: "M7: Client Code Quality"
53
+ masvs: "MASVS-PLATFORM-2"
54
+ category: android-webview
55
+ precision: high
56
+ confidence: high
57
+ source: "V3 Audit Engine - VULN-WV-001"
58
+
59
+ - id: zm-android-http-server-path-traversal
60
+ severity: CRITICAL
61
+ message: |
62
+ 检测到内嵌 HTTP Server 中用户输入直接构造文件路径,存在路径遍历风险。
63
+ 常见于 APK 内嵌的 NanoHTTPD / SimpleWebServer 实现中。
64
+ 攻击者可通过 HTTP Request URI 注入 "../" 序列读取任意文件。
65
+ 修复: 对用户输入做 canonical path 校验 + 白名单目录限制。
66
+ languages:
67
+ - java
68
+ patterns:
69
+ - pattern-either:
70
+ - pattern: |
71
+ new FileInputStream($BASE + $PARAM)
72
+ - pattern: |
73
+ new File($BASE + $PARAM)
74
+ - metavariable-regex:
75
+ metavariable: $PARAM
76
+ regex: '(?i)(getPath|getParameter|getQuery|getURI|queryParameter|getParam)'
77
+ metadata:
78
+ cwe: "CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')"
79
+ owasp-mobile: "M8: Code Tampering"
80
+ masvs: "MASVS-STORAGE-1"
81
+ category: android-storage
82
+ precision: medium
83
+ confidence: medium
84
+ source: "V3 Audit Engine - VULN-LS-003"
85
+ references:
86
+ - https://cwe.mitre.org/data/definitions/22.html
@@ -0,0 +1,102 @@
1
+ # CWE-287: Biometric Authentication Weakness (Android)
2
+ # ZhuMa V4.0 - Android Rule Library
3
+ # Source: V3 Audit Engine extension - biometric bypass patterns
4
+
5
+ rules:
6
+ - id: zm-android-biometric-no-crypto-object
7
+ severity: HIGH
8
+ message: |
9
+ Detected BiometricPrompt.authenticate() called without a CryptoObject.
10
+ Without CryptoObject, the biometric result can be bypassed via instrumentation or Frida hooking,
11
+ allowing authentication bypass while the app treats it as successful.
12
+ Remediation: Always pass a CryptoObject (Cipher/MessageDigest/Mac/Signature) to authenticate().
13
+ The crypto operation will fail if biometric was tampered with.
14
+ languages:
15
+ - java
16
+ patterns:
17
+ - pattern-either:
18
+ - pattern: $BP.authenticate($PROMPT)
19
+ - pattern: $BP.authenticate($PROMPT, $INFO)
20
+ metadata:
21
+ cwe: "CWE-287: Improper Authentication"
22
+ owasp-mobile: "M4: Insecure Authentication"
23
+ masvs: "MASVS-AUTH-3"
24
+ category: android-auth
25
+ precision: high
26
+ confidence: high
27
+ source: "ZhuMa V4.1 Rule Expansion"
28
+ references:
29
+ - https://cwe.mitre.org/data/definitions/287.html
30
+ - https://developer.android.com/reference/android/hardware/biometrics/BiometricPrompt
31
+
32
+ - id: zm-android-biometric-negative-button-no-crypto
33
+ severity: HIGH
34
+ message: |
35
+ Detected BiometricPrompt.setNegativeButton() used with authenticate() where no CryptoObject is passed.
36
+ The negative button (device credential fallback) without CryptoObject enables downgrade attack -
37
+ an attacker can cancel biometric and fall back to device PIN/pattern, bypassing biometric entirely.
38
+ Remediation: If using setNegativeButton (device credential fallback), ensure CryptoObject is always set.
39
+ languages:
40
+ - java
41
+ patterns:
42
+ - pattern-either:
43
+ - pattern: $PROMPT.setNegativeButton($TEXT, $EXECUTOR, $LISTENER)
44
+ metadata:
45
+ cwe: "CWE-287: Improper Authentication"
46
+ owasp-mobile: "M4: Insecure Authentication"
47
+ masvs: "MASVS-AUTH-3"
48
+ category: android-auth
49
+ precision: medium
50
+ confidence: medium
51
+ source: "ZhuMa V4.1 Rule Expansion"
52
+ references:
53
+ - https://cwe.mitre.org/data/definitions/287.html
54
+
55
+ - id: zm-android-fingerprint-no-crypto-object
56
+ severity: HIGH
57
+ message: |
58
+ Detected FingerprintManager.authenticate() called without a CryptoObject (legacy biometric API).
59
+ Without CryptoObject, the fingerprint result is vulnerable to bypass via hooking frameworks.
60
+ Remediation: Always pass a CryptoObject to FingerprintManager.authenticate().
61
+ Prefer migrating to BiometricPrompt (AndroidX) which enforces CryptoObject usage more strongly.
62
+ languages:
63
+ - java
64
+ patterns:
65
+ - pattern-either:
66
+ - pattern: $FM.authenticate(null, $CANCEL, 0, $CALLBACK, null)
67
+ - pattern: $FM.authenticate(null, $CANCEL, $FLAGS, $CALLBACK, null)
68
+ metadata:
69
+ cwe: "CWE-287: Improper Authentication"
70
+ owasp-mobile: "M4: Insecure Authentication"
71
+ masvs: "MASVS-AUTH-3"
72
+ category: android-auth
73
+ precision: very-high
74
+ confidence: very-high
75
+ source: "ZhuMa V4.1 Rule Expansion"
76
+ references:
77
+ - https://cwe.mitre.org/data/definitions/287.html
78
+ - https://developer.android.com/reference/android/hardware/fingerprint/FingerprintManager
79
+
80
+ - id: zm-android-keygen-no-user-auth
81
+ severity: HIGH
82
+ message: |
83
+ Detected KeyGenerator or KeyPairGenerator without setUserAuthenticationRequired(true).
84
+ Keys generated without user authentication requirement can be used without biometric/PIN confirmation,
85
+ meaning any code running in the app context can use the key.
86
+ Remediation: Call setUserAuthenticationRequired(true) on the KeyGenParameterSpec.Builder.
87
+ languages:
88
+ - java
89
+ patterns:
90
+ - pattern-either:
91
+ - pattern: new KeyGenParameterSpec.Builder($ALIAS, $PURPOSES)
92
+ metadata:
93
+ cwe: "CWE-287: Improper Authentication"
94
+ owasp-mobile: "M4: Insecure Authentication"
95
+ masvs: "MASVS-CRYPTO-2"
96
+ category: android-crypto
97
+ precision: low
98
+ confidence: low
99
+ source: "ZhuMa V4.1 Rule Expansion"
100
+ references:
101
+ - https://cwe.mitre.org/data/definitions/287.html
102
+ - https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec.Builder
@@ -0,0 +1,78 @@
1
+ # CWE-295: Missing Certificate Pinning (Android)
2
+ # ZhuMa V4.0 - Android Rule Library
3
+ # Source: V3 Audit Engine extension - cert pinning gaps
4
+
5
+ rules:
6
+ - id: zm-android-okhttp-no-cert-pinner
7
+ severity: MEDIUM
8
+ message: |
9
+ Detected OkHttpClient built without CertificatePinner.
10
+ Without certificate pinning, the app trusts any certificate signed by a system CA,
11
+ making it vulnerable to compromised CAs or corporate MITM proxies.
12
+ Remediation: Add CertificatePinner to the OkHttpClient.Builder with pin hashes for your server certificates.
13
+ languages:
14
+ - java
15
+ patterns:
16
+ - pattern-either:
17
+ - pattern: new OkHttpClient.Builder()
18
+ - pattern: new OkHttpClient()
19
+ metadata:
20
+ cwe: "CWE-295: Improper Certificate Validation"
21
+ owasp-mobile: "M3: Insecure Communication"
22
+ masvs: "MASVS-NETWORK-4"
23
+ category: android-network
24
+ precision: low
25
+ confidence: low
26
+ source: "ZhuMa V4.1 Rule Expansion"
27
+ references:
28
+ - https://cwe.mitre.org/data/definitions/295.html
29
+ - https://square.github.io/okhttp/features/https/#certificate-pinning
30
+
31
+ - id: zm-android-httpsurlconnection-no-hostname-verifier
32
+ severity: MEDIUM
33
+ message: |
34
+ Detected HttpsURLConnection used without a custom HostnameVerifier.
35
+ Default hostname verification only checks CN/SAN match; it does not pin to a specific certificate.
36
+ Remediation: Implement a custom HostnameVerifier that validates the certificate public key or SPKI hash.
37
+ languages:
38
+ - java
39
+ patterns:
40
+ - pattern-either:
41
+ - pattern: (HttpsURLConnection) $URL.openConnection()
42
+ metadata:
43
+ cwe: "CWE-295: Improper Certificate Validation"
44
+ owasp-mobile: "M3: Insecure Communication"
45
+ masvs: "MASVS-NETWORK-4"
46
+ category: android-network
47
+ precision: low
48
+ confidence: low
49
+ source: "ZhuMa V4.1 Rule Expansion"
50
+ references:
51
+ - https://cwe.mitre.org/data/definitions/295.html
52
+
53
+ - id: zm-android-trustmanager-empty-check
54
+ severity: HIGH
55
+ message: |
56
+ Detected a TrustManager or X509TrustManager implementation with empty checkServerTrusted() method body.
57
+ This disables all server certificate validation for TLS connections, enabling MITM attacks.
58
+ Remediation: Never leave checkServerTrusted() empty. Implement proper certificate chain validation.
59
+ languages:
60
+ - java
61
+ patterns:
62
+ - pattern-either:
63
+ - pattern: |
64
+ public void checkServerTrusted(X509Certificate[] $CHAIN, String $AUTH) {
65
+ }
66
+ - pattern: |
67
+ public void checkServerTrusted(X509Certificate[] $C, String $S) throws CertificateException { }
68
+ metadata:
69
+ cwe: "CWE-295: Improper Certificate Validation"
70
+ owasp-mobile: "M3: Insecure Communication"
71
+ masvs: "MASVS-NETWORK-1"
72
+ category: android-network
73
+ precision: very-high
74
+ confidence: very-high
75
+ source: "ZhuMa V4.1 Rule Expansion"
76
+ references:
77
+ - https://cwe.mitre.org/data/definitions/295.html
78
+ - https://developer.android.com/privacy-and-security/risks/ssl-validation
@@ -0,0 +1,104 @@
1
+ # CWE-295: WebView SSL 错误处理 (Android)
2
+ # 逐码 ZhuMa V4.0 — Android 规则库
3
+ # 来源: V3 审计引擎 VULN-LS-004 (TLS 全信任)
4
+
5
+ rules:
6
+ - id: zm-android-webview-ssl-error-handler-proceed
7
+ severity: CRITICAL
8
+ message: |
9
+ 检测到 WebView SSL 错误处理器调用 SslErrorHandler.proceed(),忽略所有证书错误。
10
+ 这使得 WebView 中所有 HTTPS 通信暴露于中间人攻击 (MITM)。
11
+ 攻击者可通过自签名证书拦截并篡改 WebView 中加载的所有内容。
12
+ 修复: 调用 SslErrorHandler.cancel();在 release 构建中绝不应调用 proceed()。
13
+ languages:
14
+ - java
15
+ patterns:
16
+ - pattern-either:
17
+ - pattern: |
18
+ public void onReceivedSslError(WebView $WV, SslErrorHandler $H, SslError $E) {
19
+ $H.proceed();
20
+ }
21
+ - pattern: |
22
+ $WV.setWebViewClient(new WebViewClient() {
23
+ public void onReceivedSslError(WebView $V, SslErrorHandler $H, SslError $E) {
24
+ $H.proceed();
25
+ }
26
+ })
27
+ metadata:
28
+ cwe: "CWE-295: Improper Certificate Validation"
29
+ owasp-mobile: "M3: Insecure Communication"
30
+ masvs: "MASVS-NETWORK-1"
31
+ category: android-webview
32
+ precision: very-high
33
+ confidence: very-high
34
+ likelihood: high
35
+ impact: critical
36
+ source: "V3 Audit Engine - VULN-LS-004 (extended)"
37
+ references:
38
+ - https://developer.android.com/reference/android/webkit/SslErrorHandler#proceed()
39
+ - https://developer.android.com/privacy-and-security/risks/ssl-error-handling
40
+
41
+ - id: zm-android-okhttp-client-allowallssltls
42
+ severity: CRITICAL
43
+ message: |
44
+ 检测到 OkHttp 客户端配置绕过 SSL 证书和主机名验证。
45
+ 典型模式: hostnameVerifier(ALLOW_ALL) + 空 TrustManager。
46
+ 这使得所有 HTTPS 通信完全暴露于 MITM 攻击。
47
+ 修复: 使用 OkHttp 默认的证书验证;需要证书固定时使用 CertificatePinner。
48
+ 参考: https://square.github.io/okhttp/4.x/okhttp/okhttp3/-certificate-pinner/
49
+ metadata:
50
+ cwe: "CWE-295: Improper Certificate Validation"
51
+ owasp-mobile: "M3: Insecure Communication"
52
+ masvs: "MASVS-NETWORK-1"
53
+ category: android-network
54
+ precision: high
55
+ confidence: high
56
+ likelihood: high
57
+ impact: critical
58
+ source: "V3 Audit Engine - baseline scan"
59
+ references:
60
+ - https://square.github.io/okhttp/4.x/okhttp/okhttp3/-certificate-pinner/
61
+ languages:
62
+ - java
63
+ patterns:
64
+ - pattern-inside: |
65
+ new OkHttpClient.Builder()
66
+ .hostnameVerifier($HV)
67
+ .sslSocketFactory($SSF, $TM)
68
+ .build()
69
+ - metavariable-regex:
70
+ metavariable: $SSF
71
+ regex: '.*'
72
+ - metavariable-regex:
73
+ metavariable: $TM
74
+ regex: '.*'
75
+ note: |
76
+ 此规则检测 OkHttpClient Builder 中同时出现 hostnameVerifier + sslSocketFactory 的模式。
77
+ 需结合人工审计确认传入的 TrustManager 和 HostnameVerifier 是否为空实现。
78
+ precision: low
79
+ confidence: low
80
+
81
+ - id: zm-android-httpurlconnection-ssl-bypass
82
+ severity: CRITICAL
83
+ message: |
84
+ 检测到 HttpsURLConnection 禁用 SSL 验证。
85
+ 通过设置 ALLOW_ALL_HOSTNAME_VERIFIER 和空 TrustManager,
86
+ 所有 HTTPS 通信可被中间人攻击者拦截。
87
+ languages:
88
+ - java
89
+ patterns:
90
+ - pattern-either:
91
+ - pattern: |
92
+ HttpsURLConnection.setDefaultHostnameVerifier($ALLOW_ALL)
93
+ - pattern: |
94
+ $CONN.setHostnameVerifier($ALLOW_ALL)
95
+ metadata:
96
+ cwe: "CWE-295: Improper Certificate Validation"
97
+ owasp-mobile: "M3: Insecure Communication"
98
+ masvs: "MASVS-NETWORK-1"
99
+ category: android-network
100
+ precision: medium
101
+ confidence: medium
102
+ source: "V3 Audit Engine - VULN-LS-004"
103
+ references:
104
+ - https://developer.android.com/privacy-and-security/risks/ssl-validation