@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.
- package/README.md +42 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +18 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +11 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/scan.d.ts +3 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +96 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/scan_appid.d.ts +20 -0
- package/dist/commands/scan_appid.d.ts.map +1 -0
- package/dist/commands/scan_appid.js +301 -0
- package/dist/commands/scan_appid.js.map +1 -0
- package/dist/commands/scan_manifest.d.ts +13 -0
- package/dist/commands/scan_manifest.d.ts.map +1 -0
- package/dist/commands/scan_manifest.js +103 -0
- package/dist/commands/scan_manifest.js.map +1 -0
- package/dist/engine/api-submit.d.ts +16 -0
- package/dist/engine/api-submit.d.ts.map +1 -0
- package/dist/engine/api-submit.js +66 -0
- package/dist/engine/api-submit.js.map +1 -0
- package/dist/engine/batch_scan.d.ts +36 -0
- package/dist/engine/batch_scan.d.ts.map +1 -0
- package/dist/engine/batch_scan.js +192 -0
- package/dist/engine/batch_scan.js.map +1 -0
- package/dist/engine/config.d.ts +12 -0
- package/dist/engine/config.d.ts.map +1 -0
- package/dist/engine/config.js +27 -0
- package/dist/engine/config.js.map +1 -0
- package/dist/engine/errors.d.ts +36 -0
- package/dist/engine/errors.d.ts.map +1 -0
- package/dist/engine/errors.js +99 -0
- package/dist/engine/errors.js.map +1 -0
- package/dist/engine/filter.d.ts +13 -0
- package/dist/engine/filter.d.ts.map +1 -0
- package/dist/engine/filter.js +64 -0
- package/dist/engine/filter.js.map +1 -0
- package/dist/engine/finding_classifier.d.ts +108 -0
- package/dist/engine/finding_classifier.d.ts.map +1 -0
- package/dist/engine/finding_classifier.js +440 -0
- package/dist/engine/finding_classifier.js.map +1 -0
- package/dist/engine/incremental/engine.d.ts +25 -0
- package/dist/engine/incremental/engine.d.ts.map +1 -0
- package/dist/engine/incremental/engine.js +337 -0
- package/dist/engine/incremental/engine.js.map +1 -0
- package/dist/engine/incremental/git-diff.d.ts +19 -0
- package/dist/engine/incremental/git-diff.d.ts.map +1 -0
- package/dist/engine/incremental/git-diff.js +175 -0
- package/dist/engine/incremental/git-diff.js.map +1 -0
- package/dist/engine/incremental/types.d.ts +33 -0
- package/dist/engine/incremental/types.d.ts.map +1 -0
- package/dist/engine/incremental/types.js +11 -0
- package/dist/engine/incremental/types.js.map +1 -0
- package/dist/engine/manifest_scanner.d.ts +48 -0
- package/dist/engine/manifest_scanner.d.ts.map +1 -0
- package/dist/engine/manifest_scanner.js +599 -0
- package/dist/engine/manifest_scanner.js.map +1 -0
- package/dist/engine/project.d.ts +22 -0
- package/dist/engine/project.d.ts.map +1 -0
- package/dist/engine/project.js +279 -0
- package/dist/engine/project.js.map +1 -0
- package/dist/engine/sarif.d.ts +13 -0
- package/dist/engine/sarif.d.ts.map +1 -0
- package/dist/engine/sarif.js +44 -0
- package/dist/engine/sarif.js.map +1 -0
- package/dist/engine/sca-integration.d.ts +36 -0
- package/dist/engine/sca-integration.d.ts.map +1 -0
- package/dist/engine/sca-integration.js +91 -0
- package/dist/engine/sca-integration.js.map +1 -0
- package/dist/engine/scanner.d.ts +18 -0
- package/dist/engine/scanner.d.ts.map +1 -0
- package/dist/engine/scanner.js +138 -0
- package/dist/engine/scanner.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/report/render.d.ts +23 -0
- package/dist/report/render.d.ts.map +1 -0
- package/dist/report/render.js +335 -0
- package/dist/report/render.js.map +1 -0
- package/package.json +41 -0
- package/rules/android/mobile-cleartext-traffic.yaml +46 -0
- package/rules/android/mobile-component-security.yaml +107 -0
- package/rules/android/mobile-crypto-weakness.yaml +139 -0
- package/rules/android/mobile-cwe-1021-tapjacking.yaml +81 -0
- package/rules/android/mobile-cwe-114-dynamic-dex-loading.yaml +41 -0
- package/rules/android/mobile-cwe-200-clipboard-data-leak.yaml +66 -0
- package/rules/android/mobile-cwe-200-debug-builds.yaml +111 -0
- package/rules/android/mobile-cwe-200-log-sensitive-data.yaml +61 -0
- package/rules/android/mobile-cwe-200-webview-debugging.yaml +56 -0
- package/rules/android/mobile-cwe-200-webview-universal-access.yaml +30 -0
- package/rules/android/mobile-cwe-200-window-flags.yaml +96 -0
- package/rules/android/mobile-cwe-22-content-provider-openfile.yaml +73 -0
- package/rules/android/mobile-cwe-22-path-traversal.yaml +86 -0
- package/rules/android/mobile-cwe-287-biometric-weakness.yaml +102 -0
- package/rules/android/mobile-cwe-295-cert-pinning-missing.yaml +78 -0
- package/rules/android/mobile-cwe-295-webview-ssl-bypass.yaml +104 -0
- package/rules/android/mobile-cwe-312-cleartext-storage.yaml +109 -0
- package/rules/android/mobile-cwe-319-cleartext-communication.yaml +84 -0
- package/rules/android/mobile-cwe-321-hardcoded-crypto-keys.yaml +132 -0
- package/rules/android/mobile-cwe-326-short-rsa.yaml +108 -0
- package/rules/android/mobile-cwe-327-rc4-3des.yaml +107 -0
- package/rules/android/mobile-cwe-329-cbc-padding-oracle.yaml +76 -0
- package/rules/android/mobile-cwe-470-reflection-injection.yaml +39 -0
- package/rules/android/mobile-cwe-489-root-detection-weak.yaml +125 -0
- package/rules/android/mobile-cwe-489-stetho-debug.yaml +107 -0
- package/rules/android/mobile-cwe-502-insecure-deserialization.yaml +76 -0
- package/rules/android/mobile-cwe-552-world-readable-files.yaml +63 -0
- package/rules/android/mobile-cwe-749-webview-java-objects.yaml +78 -0
- package/rules/android/mobile-cwe-749-webview-jsbridge.yaml +57 -0
- package/rules/android/mobile-cwe-749-webview-loadurl-injection.yaml +80 -0
- package/rules/android/mobile-cwe-78-command-injection.yaml +77 -0
- package/rules/android/mobile-cwe-780-rsa-no-oaep.yaml +80 -0
- package/rules/android/mobile-cwe-79-webview-setdata.yaml +78 -0
- package/rules/android/mobile-cwe-79-webview-xss.yaml +65 -0
- package/rules/android/mobile-cwe-798-hardcoded-credentials.yaml +108 -0
- package/rules/android/mobile-cwe-89-sql-injection.yaml +100 -0
- package/rules/android/mobile-cwe-927-implicit-intent.yaml +121 -0
- package/rules/android/mobile-cwe-927-ipc-file-provider.yaml +102 -0
- package/rules/android/mobile-cwe-939-deeplink-validation.yaml +76 -0
- package/rules/android/mobile-sdk-google-firebase-open.yaml +117 -0
- package/rules/android/mobile-sdk-tencent-tpns-config-leak.yaml +131 -0
- package/rules/android/mobile-secrets-storage.yaml +136 -0
- package/rules/android/mobile-webview-security.yaml +88 -0
- package/rules/common/cwe-200-sensitive-data-exposure.yaml +61 -0
- package/rules/common/cwe-22-path-traversal.yaml +47 -0
- package/rules/common/cwe-295-ssl-bypass.yaml +217 -0
- package/rules/common/cwe-295-ssl-verification-disabled.yaml +64 -0
- package/rules/common/cwe-306-missing-authentication.yaml +44 -0
- package/rules/common/cwe-326-weak-key-size.yaml +107 -0
- package/rules/common/cwe-327-weak-crypto.yaml +177 -0
- package/rules/common/cwe-328-weak-hash.yaml +96 -0
- package/rules/common/cwe-329-cbc-mode.yaml +26 -0
- package/rules/common/cwe-352-csrf.yaml +23 -0
- package/rules/common/cwe-434-unrestricted-file-upload.yaml +41 -0
- package/rules/common/cwe-502-insecure-deserialization.yaml +44 -0
- package/rules/common/cwe-601-url-redirect.yaml +110 -0
- package/rules/common/cwe-611-xxe.yaml +70 -0
- package/rules/common/cwe-732-incorrect-permission.yaml +49 -0
- package/rules/common/cwe-770-resource-exhaustion.yaml +44 -0
- package/rules/common/cwe-78-os-command-injection.yaml +43 -0
- package/rules/common/cwe-787-out-of-bounds-write.yaml +37 -0
- package/rules/common/cwe-79-xss.yaml +51 -0
- package/rules/common/cwe-862-missing-authorization.yaml +40 -0
- package/rules/common/cwe-89-sqli.yaml +89 -0
- package/rules/common/cwe-918-ssrf.yaml +45 -0
- package/rules/common/cwe-94-code-injection.yaml +59 -0
- package/rules/common/zm-go-cwe22-path-traversal-fs.yaml +117 -0
- package/rules/common/zm-go-cwe22-path-traversal.yaml +103 -0
- package/rules/common/zm-go-cwe307-brute-force.yaml +129 -0
- package/rules/common/zm-go-cwe326-weak-crypto.yaml +124 -0
- package/rules/common/zm-go-cwe327-weak-cipher.yaml +152 -0
- package/rules/common/zm-go-cwe384-session-fixation.yaml +128 -0
- package/rules/common/zm-go-cwe502-deserialization.yaml +120 -0
- package/rules/common/zm-go-cwe78-command-injection.yaml +95 -0
- package/rules/common/zm-go-cwe79-xss.yaml +104 -0
- package/rules/common/zm-go-cwe798-hardcoded-creds.yaml +153 -0
- package/rules/common/zm-go-cwe89-sqli.yaml +89 -0
- package/rules/common/zm-go-cwe918-ssrf.yaml +117 -0
- package/rules/common/zm-java-cwe117-log-injection.yaml +83 -0
- package/rules/common/zm-java-cwe117-logforging.yaml +153 -0
- package/rules/common/zm-java-cwe200-actuator-exposure.yaml +8 -0
- package/rules/common/zm-java-cwe200-info-disclosure.yaml +91 -0
- package/rules/common/zm-java-cwe22-file-depth.yaml +135 -0
- package/rules/common/zm-java-cwe22-path-traversal-spring.yaml +81 -0
- package/rules/common/zm-java-cwe284-missing-auth-spring.yaml +131 -0
- package/rules/common/zm-java-cwe295-webview-ssl.yaml +123 -0
- package/rules/common/zm-java-cwe327-weakcrypto.yaml +197 -0
- package/rules/common/zm-java-cwe347-jwt.yaml +30 -0
- package/rules/common/zm-java-cwe352-csrf-depth.yaml +107 -0
- package/rules/common/zm-java-cwe352-csrf-disabled.yaml +15 -0
- package/rules/common/zm-java-cwe501-trust-boundary.yaml +124 -0
- package/rules/common/zm-java-cwe502-deserial-depth.yaml +128 -0
- package/rules/common/zm-java-cwe502-fastjson.yaml +137 -0
- package/rules/common/zm-java-cwe502-gadget.yaml +158 -0
- package/rules/common/zm-java-cwe502-jndi-injection.yaml +91 -0
- package/rules/common/zm-java-cwe502-shiro.yaml +108 -0
- package/rules/common/zm-java-cwe601-url-redirect-spring.yaml +85 -0
- package/rules/common/zm-java-cwe611-xxe-enhanced.yaml +80 -0
- package/rules/common/zm-java-cwe611-xxe-transformer.yaml +85 -0
- package/rules/common/zm-java-cwe639-idor.yaml +123 -0
- package/rules/common/zm-java-cwe79-xss-depth.yaml +98 -0
- package/rules/common/zm-java-cwe862-authz-depth.yaml +127 -0
- package/rules/common/zm-java-cwe915-mass-assignment.yaml +16 -0
- package/rules/common/zm-java-cwe917-expression-injection.yaml +120 -0
- package/rules/common/zm-java-cwe918-resttemplate.yaml +67 -0
- package/rules/common/zm-java-cwe918-ssrf-depth.yaml +103 -0
- package/rules/common/zm-java-cwe918-ssrf-resttemplate.yaml +77 -0
- package/rules/common/zm-java-cwe918-webclient.yaml +44 -0
- package/rules/common/zm-java-cwe94-ognl.yaml +66 -0
- package/rules/common/zm-java-cwe94-spel-injection.yaml +85 -0
- package/rules/common/zm-java-cwe94-spel.yaml +112 -0
- package/rules/common/zm-java-cwe94-ssti.yaml +22 -0
- package/rules/common/zm-java-cwe942-cors.yaml +15 -0
- package/rules/common/zm-js-cwe1321-prototype-pollution.yaml +61 -0
- package/rules/common/zm-js-cwe200-info-disclosure.yaml +95 -0
- package/rules/common/zm-js-cwe22-path-traversal-fs.yaml +113 -0
- package/rules/common/zm-js-cwe22-pathtraversal.yaml +111 -0
- package/rules/common/zm-js-cwe307-brute-force.yaml +136 -0
- package/rules/common/zm-js-cwe345-postmessage.yaml +75 -0
- package/rules/common/zm-js-cwe347-jwt-weak.yaml +95 -0
- package/rules/common/zm-js-cwe352-csrf.yaml +52 -0
- package/rules/common/zm-js-cwe384-session-fixation.yaml +132 -0
- package/rules/common/zm-js-cwe502-deserialization.yaml +119 -0
- package/rules/common/zm-js-cwe611-xxe.yaml +108 -0
- package/rules/common/zm-js-cwe639-idor.yaml +122 -0
- package/rules/common/zm-js-cwe693-helmet-missing.yaml +46 -0
- package/rules/common/zm-js-cwe78-exec.yaml +37 -0
- package/rules/common/zm-js-cwe78-spawn.yaml +37 -0
- package/rules/common/zm-js-cwe79-domxss.yaml +84 -0
- package/rules/common/zm-js-cwe79-react-xss.yaml +18 -0
- package/rules/common/zm-js-cwe79-xss-ejs.yaml +70 -0
- package/rules/common/zm-js-cwe89-sqli.yaml +153 -0
- package/rules/common/zm-js-cwe915-mass-assignment.yaml +111 -0
- package/rules/common/zm-js-cwe918-ssrf-fetch.yaml +134 -0
- package/rules/common/zm-js-cwe918-ssrf.yaml +132 -0
- package/rules/common/zm-js-cwe94-template-injection.yaml +130 -0
- package/rules/common/zm-js-cwe942-cors.yaml +49 -0
- package/rules/common/zm-js-cwe943-nosql-injection.yaml +52 -0
- package/rules/common/zm-js-cwe95-eval.yaml +59 -0
- package/rules/common/zm-js-cwe95-function-ctor.yaml +31 -0
- package/rules/common/zm-py-cwe22-path-traversal.yaml +86 -0
- package/rules/common/zm-py-cwe327-weak-crypto.yaml +103 -0
- package/rules/common/zm-py-cwe502-pickle.yaml +92 -0
- package/rules/common/zm-py-cwe611-xxe.yaml +100 -0
- package/rules/common/zm-py-cwe78-command-injection.yaml +121 -0
- package/rules/common/zm-py-cwe79-xss.yaml +123 -0
- package/rules/common/zm-py-cwe798-hardcoded-creds.yaml +86 -0
- package/rules/common/zm-py-cwe89-sqli.yaml +59 -0
- package/rules/common/zm-py-cwe918-ssrf.yaml +123 -0
- package/rules/common/zm-py-cwe94-ssti.yaml +87 -0
- package/rules/common/zm-py-cwe943-nosql-injection.yaml +123 -0
- package/rules/iac/ansible/zm-ansible-cwe269-privilege-escalation.yaml +63 -0
- package/rules/iac/ansible/zm-ansible-cwe78-command-injection.yaml +67 -0
- package/rules/iac/ansible/zm-ansible-cwe798-hardcoded-creds.yaml +93 -0
- package/rules/iac/terraform/zm-tf-cwe200-s3-bucket-public.yaml +100 -0
- package/rules/iac/terraform/zm-tf-cwe284-sg-wide-open.yaml +88 -0
- package/rules/iac/terraform/zm-tf-cwe311-iam-wildcard.yaml +83 -0
- package/rules/iac/terraform/zm-tf-cwe319-rds-public.yaml +72 -0
- package/rules/iac/terraform/zm-tf-cwe798-hardcoded-creds.yaml +102 -0
- package/rules/iac/zm-docker-cwe250-root-user.yaml +50 -0
- package/rules/iac/zm-docker-cwe400-resource-limit.yaml +92 -0
- package/rules/iac/zm-docker-security.yaml +104 -0
- package/rules/iac/zm-k8s-cwe200-service-account.yaml +83 -0
- package/rules/iac/zm-k8s-cwe250-privileged.yaml +56 -0
- package/rules/iac/zm-k8s-security.yaml +79 -0
- package/rules/rules_index.yaml.off +477 -0
- package/rules/semgrep-registry/anonymous-ldap-bind.yaml +34 -0
- package/rules/semgrep-registry/bad-hexa-conversion.yaml +32 -0
- package/rules/semgrep-registry/blowfish-insufficient-key-size.yaml +39 -0
- package/rules/semgrep-registry/cbc-padding-oracle.yaml +38 -0
- package/rules/semgrep-registry/command-injection-formatted-runtime-call.yaml +90 -0
- package/rules/semgrep-registry/command-injection-process-builder.yaml +148 -0
- package/rules/semgrep-registry/cookie-missing-httponly.yaml +38 -0
- package/rules/semgrep-registry/cookie-missing-secure-flag.yaml +38 -0
- package/rules/semgrep-registry/crlf-injection-logs.yaml +86 -0
- package/rules/semgrep-registry/dangerous-groovy-shell.yaml +46 -0
- package/rules/semgrep-registry/el-injection.yaml +137 -0
- package/rules/semgrep-registry/formatted-sql-string.yaml +95 -0
- package/rules/semgrep-registry/http-response-splitting.yaml +44 -0
- package/rules/semgrep-registry/index.txt +1 -0
- package/rules/semgrep-registry/insecure-smtp-connection.yaml +34 -0
- package/rules/semgrep-registry/java-reverse-shell.yaml +43 -0
- package/rules/semgrep-registry/jdbc-sql-formatted-string.yaml +120 -0
- package/rules/semgrep-registry/ldap-entry-poisoning.yaml +41 -0
- package/rules/semgrep-registry/ldap-injection.yaml +82 -0
- package/rules/semgrep-registry/md5-used-as-password.yaml +44 -0
- package/rules/semgrep-registry/object-deserialization.yaml +34 -0
- package/rules/semgrep-registry/ognl-injection.yaml +839 -0
- package/rules/semgrep-registry/overly-permissive-file-permission.yaml +49 -0
- package/rules/semgrep-registry/permissive-cors.yaml +77 -0
- package/rules/semgrep-registry/script-engine-injection.yaml +66 -0
- package/rules/semgrep-registry/tainted-cmd-from-http-request.yaml +74 -0
- package/rules/semgrep-registry/tainted-env-from-http-request.yaml +46 -0
- package/rules/semgrep-registry/tainted-ldapi-from-http-request.yaml +42 -0
- package/rules/semgrep-registry/tainted-session-from-http-request.yaml +70 -0
- package/rules/semgrep-registry/tainted-xpath-from-http-request.yaml +38 -0
- package/rules/semgrep-registry/unsafe-reflection.yaml +39 -0
- package/rules/semgrep-registry/unvalidated-redirect.yaml +127 -0
- package/rules/semgrep-registry/url-rewriting.yaml +82 -0
- package/rules/semgrep-registry/weak-ssl-context.yaml +34 -0
- package/rules/semgrep-registry/xml-decoder.yaml +53 -0
- 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
|