@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,43 @@
|
|
|
1
|
+
rules:
|
|
2
|
+
- id: java-reverse-shell
|
|
3
|
+
patterns:
|
|
4
|
+
- pattern-either:
|
|
5
|
+
- pattern: |
|
|
6
|
+
Socket $S=new Socket(...);
|
|
7
|
+
...
|
|
8
|
+
InputStream $SI = $S.getInputStream();
|
|
9
|
+
...
|
|
10
|
+
while(!$S.isClosed())
|
|
11
|
+
{
|
|
12
|
+
...
|
|
13
|
+
while($SI.available()>0)$PO.write($SI.read());
|
|
14
|
+
...
|
|
15
|
+
$SO.flush();
|
|
16
|
+
...
|
|
17
|
+
}
|
|
18
|
+
- pattern-inside: |
|
|
19
|
+
Process $P=new ProcessBuilder(...).redirectErrorStream(true).start();
|
|
20
|
+
...
|
|
21
|
+
$P.destroy();
|
|
22
|
+
message: Semgrep found potential reverse shell behavior
|
|
23
|
+
severity: WARNING
|
|
24
|
+
metadata:
|
|
25
|
+
cwe:
|
|
26
|
+
- "CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')"
|
|
27
|
+
category: security
|
|
28
|
+
technology: [java]
|
|
29
|
+
owasp:
|
|
30
|
+
- A01:2017 - Injection
|
|
31
|
+
- A03:2021 - Injection
|
|
32
|
+
- A05:2025 - Injection
|
|
33
|
+
references:
|
|
34
|
+
- https://owasp.org/Top10/A03_2021-Injection
|
|
35
|
+
cwe2022-top25: true
|
|
36
|
+
cwe2021-top25: true
|
|
37
|
+
subcategory:
|
|
38
|
+
- audit
|
|
39
|
+
likelihood: LOW
|
|
40
|
+
impact: HIGH
|
|
41
|
+
confidence: LOW
|
|
42
|
+
languages:
|
|
43
|
+
- java
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
rules:
|
|
2
|
+
- id: jdbc-sql-formatted-string
|
|
3
|
+
metadata:
|
|
4
|
+
cwe:
|
|
5
|
+
- "CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')"
|
|
6
|
+
owasp:
|
|
7
|
+
- A01:2017 - Injection
|
|
8
|
+
- A03:2021 - Injection
|
|
9
|
+
- A05:2025 - Injection
|
|
10
|
+
source-rule-url: https://find-sec-bugs.github.io/bugs.htm#SQL_INJECTION_SPRING_JDBC
|
|
11
|
+
asvs:
|
|
12
|
+
section: 'V5: Validation, Sanitization and Encoding Verification Requirements'
|
|
13
|
+
control_id: 5.3.5 Injection
|
|
14
|
+
control_url: https://github.com/OWASP/ASVS/blob/master/4.0/en/0x13-V5-Validation-Sanitization-Encoding.md#v53-output-encoding-and-injection-prevention-requirements
|
|
15
|
+
version: '4'
|
|
16
|
+
category: security
|
|
17
|
+
technology:
|
|
18
|
+
- jdbc
|
|
19
|
+
references:
|
|
20
|
+
- https://owasp.org/Top10/A03_2021-Injection
|
|
21
|
+
cwe2022-top25: true
|
|
22
|
+
cwe2021-top25: true
|
|
23
|
+
subcategory:
|
|
24
|
+
- audit
|
|
25
|
+
likelihood: LOW
|
|
26
|
+
impact: HIGH
|
|
27
|
+
confidence: LOW
|
|
28
|
+
message: >-
|
|
29
|
+
Possible JDBC injection detected. Use the parameterized query
|
|
30
|
+
feature available in queryForObject instead of concatenating or formatting strings:
|
|
31
|
+
'jdbc.queryForObject("select * from table where name = ?", Integer.class, parameterName);'
|
|
32
|
+
patterns:
|
|
33
|
+
- pattern-inside: |
|
|
34
|
+
$JDBC = new JdbcTemplate(...);
|
|
35
|
+
...
|
|
36
|
+
- pattern-either:
|
|
37
|
+
# Unsafe queryForObject
|
|
38
|
+
- pattern: $JDBC.queryForObject($STR + $VAR, ...);
|
|
39
|
+
- pattern: $JDBC.queryForObject(String.format(...), ...);
|
|
40
|
+
- pattern: |
|
|
41
|
+
String $Q = $STR + $VAR;
|
|
42
|
+
...
|
|
43
|
+
$JDBC.queryForObject($Q, ...);
|
|
44
|
+
- pattern: |
|
|
45
|
+
String $Q = String.format(...);
|
|
46
|
+
...
|
|
47
|
+
$JDBC.queryForObject($Q, ...);
|
|
48
|
+
- pattern: |
|
|
49
|
+
StringBuilder $Q = new StringBuilder(...);
|
|
50
|
+
...
|
|
51
|
+
$Q.append($STR + $VAR);
|
|
52
|
+
...
|
|
53
|
+
$JDBC.queryForObject($Q, ...);
|
|
54
|
+
- pattern: $JDBC.queryForList($STR + $VAR);
|
|
55
|
+
- pattern: $JDBC.queryForList(String.format(...));
|
|
56
|
+
- pattern: |
|
|
57
|
+
String $Q = $STR + $VAR;
|
|
58
|
+
...
|
|
59
|
+
$JDBC.queryForList($Q);
|
|
60
|
+
- pattern: |
|
|
61
|
+
String $Q = String.format(...);
|
|
62
|
+
...
|
|
63
|
+
$JDBC.queryForList($Q);
|
|
64
|
+
- pattern: |
|
|
65
|
+
StringBuilder $Q = new StringBuilder(...);
|
|
66
|
+
...
|
|
67
|
+
$Q.append($STR + $VAR);
|
|
68
|
+
...
|
|
69
|
+
$JDBC.queryForList($Q, ...);
|
|
70
|
+
- pattern: $JDBC.update($STR + $VAR);
|
|
71
|
+
- pattern: $JDBC.update(String.format(...));
|
|
72
|
+
- pattern: |
|
|
73
|
+
String $Q = $STR + $VAR;
|
|
74
|
+
...
|
|
75
|
+
$JDBC.update($Q);
|
|
76
|
+
- pattern: |
|
|
77
|
+
String $Q = String.format(...);
|
|
78
|
+
...
|
|
79
|
+
$JDBC.update($Q);
|
|
80
|
+
- pattern: |
|
|
81
|
+
StringBuilder $Q = new StringBuilder(...);
|
|
82
|
+
...
|
|
83
|
+
$Q.append($STR + $VAR);
|
|
84
|
+
...
|
|
85
|
+
$JDBC.update($Q, ...);
|
|
86
|
+
- pattern: $JDBC.execute($STR + $VAR);
|
|
87
|
+
- pattern: $JDBC.execute(String.format(...));
|
|
88
|
+
- pattern: |
|
|
89
|
+
String $Q = $STR + $VAR;
|
|
90
|
+
...
|
|
91
|
+
$JDBC.execute($Q);
|
|
92
|
+
- pattern: |
|
|
93
|
+
String $Q = String.format(...);
|
|
94
|
+
...
|
|
95
|
+
$JDBC.execute($Q);
|
|
96
|
+
- pattern: |
|
|
97
|
+
StringBuilder $Q = new StringBuilder(...);
|
|
98
|
+
...
|
|
99
|
+
$Q.append($STR + $VAR);
|
|
100
|
+
...
|
|
101
|
+
$JDBC.execute($Q, ...);
|
|
102
|
+
- pattern: $JDBC.insert($STR + $VAR);
|
|
103
|
+
- pattern: $JDBC.insert(String.format(...));
|
|
104
|
+
- pattern: |
|
|
105
|
+
String $Q = $STR + $VAR;
|
|
106
|
+
...
|
|
107
|
+
$JDBC.insert($Q);
|
|
108
|
+
- pattern: |
|
|
109
|
+
String $Q = String.format(...);
|
|
110
|
+
...
|
|
111
|
+
$JDBC.insert($Q);
|
|
112
|
+
- pattern: |
|
|
113
|
+
StringBuilder $Q = new StringBuilder(...);
|
|
114
|
+
...
|
|
115
|
+
$Q.append($STR + $VAR);
|
|
116
|
+
...
|
|
117
|
+
$JDBC.insert($Q, ...);
|
|
118
|
+
severity: WARNING
|
|
119
|
+
languages:
|
|
120
|
+
- java
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
rules:
|
|
2
|
+
- id: ldap-entry-poisoning
|
|
3
|
+
metadata:
|
|
4
|
+
owasp:
|
|
5
|
+
- A01:2017 - Injection
|
|
6
|
+
- A03:2021 - Injection
|
|
7
|
+
- A05:2025 - Injection
|
|
8
|
+
cwe:
|
|
9
|
+
- "CWE-90: Improper Neutralization of Special Elements used in an LDAP Query ('LDAP Injection')"
|
|
10
|
+
source-rule-url: https://find-sec-bugs.github.io/bugs.htm#LDAP_ENTRY_POISONING
|
|
11
|
+
asvs:
|
|
12
|
+
section: 'V5: Validation, Sanitization and Encoding Verification Requirements'
|
|
13
|
+
control_id: 5.3.7 Injection
|
|
14
|
+
control_url: https://github.com/OWASP/ASVS/blob/master/4.0/en/0x13-V5-Validation-Sanitization-Encoding.md#v53-output-encoding-and-injection-prevention-requirements
|
|
15
|
+
version: '4'
|
|
16
|
+
references:
|
|
17
|
+
- https://www.blackhat.com/docs/us-16/materials/us-16-Munoz-A-Journey-From-JNDI-LDAP-Manipulation-To-RCE-wp.pdf
|
|
18
|
+
- https://cheatsheetseries.owasp.org/cheatsheets/LDAP_Injection_Prevention_Cheat_Sheet.html
|
|
19
|
+
category: security
|
|
20
|
+
technology:
|
|
21
|
+
- java
|
|
22
|
+
subcategory:
|
|
23
|
+
- audit
|
|
24
|
+
likelihood: LOW
|
|
25
|
+
impact: HIGH
|
|
26
|
+
confidence: LOW
|
|
27
|
+
message: >-
|
|
28
|
+
An object-returning LDAP search will allow attackers to control the LDAP response.
|
|
29
|
+
This could
|
|
30
|
+
lead to Remote Code Execution.
|
|
31
|
+
severity: WARNING
|
|
32
|
+
pattern-either:
|
|
33
|
+
# SearchControls(int scope, long countlim, int timelim, String[] attrs, boolean retobj, boolean deref)
|
|
34
|
+
- pattern: |
|
|
35
|
+
new SearchControls($S, $CL, $TL, $AT, true, $DEREF)
|
|
36
|
+
- pattern: |
|
|
37
|
+
SearchControls $VAR = new SearchControls();
|
|
38
|
+
...
|
|
39
|
+
$VAR.setReturningObjFlag(true);
|
|
40
|
+
languages:
|
|
41
|
+
- java
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
rules:
|
|
2
|
+
- id: ldap-injection
|
|
3
|
+
message: >-
|
|
4
|
+
Detected non-constant data passed into an LDAP query. If this data can be
|
|
5
|
+
controlled by an external user, this is an LDAP injection.
|
|
6
|
+
Ensure data passed to an LDAP query is not controllable; or properly sanitize
|
|
7
|
+
the data.
|
|
8
|
+
metadata:
|
|
9
|
+
cwe:
|
|
10
|
+
- "CWE-90: Improper Neutralization of Special Elements used in an LDAP Query ('LDAP Injection')"
|
|
11
|
+
owasp:
|
|
12
|
+
- A01:2017 - Injection
|
|
13
|
+
- A03:2021 - Injection
|
|
14
|
+
- A05:2025 - Injection
|
|
15
|
+
source-rule-url: https://find-sec-bugs.github.io/bugs.htm#LDAP_INJECTION
|
|
16
|
+
asvs:
|
|
17
|
+
section: 'V5: Validation, Sanitization and Encoding Verification Requirements'
|
|
18
|
+
control_id: 5.3.7 Injection
|
|
19
|
+
control_url: https://github.com/OWASP/ASVS/blob/master/4.0/en/0x13-V5-Validation-Sanitization-Encoding.md#v53-output-encoding-and-injection-prevention-requirements
|
|
20
|
+
version: '4'
|
|
21
|
+
category: security
|
|
22
|
+
technology:
|
|
23
|
+
- java
|
|
24
|
+
references:
|
|
25
|
+
- https://owasp.org/Top10/A03_2021-Injection
|
|
26
|
+
subcategory:
|
|
27
|
+
- audit
|
|
28
|
+
likelihood: LOW
|
|
29
|
+
impact: HIGH
|
|
30
|
+
confidence: LOW
|
|
31
|
+
severity: WARNING
|
|
32
|
+
languages: [java]
|
|
33
|
+
patterns:
|
|
34
|
+
- pattern-either:
|
|
35
|
+
- pattern-inside: |
|
|
36
|
+
$X $METHOD(...) {
|
|
37
|
+
...
|
|
38
|
+
InitialDirContext $CTX = ...;
|
|
39
|
+
...
|
|
40
|
+
}
|
|
41
|
+
- pattern-inside: |
|
|
42
|
+
$X $METHOD(...) {
|
|
43
|
+
...
|
|
44
|
+
DirContext $CTX = ...;
|
|
45
|
+
...
|
|
46
|
+
}
|
|
47
|
+
- pattern-inside: |
|
|
48
|
+
$X $METHOD(...) {
|
|
49
|
+
...
|
|
50
|
+
InitialLdapContext $CTX = ...;
|
|
51
|
+
...
|
|
52
|
+
}
|
|
53
|
+
- pattern-inside: |
|
|
54
|
+
$X $METHOD(...) {
|
|
55
|
+
...
|
|
56
|
+
LdapContext $CTX = ...;
|
|
57
|
+
...
|
|
58
|
+
}
|
|
59
|
+
- pattern-inside: |
|
|
60
|
+
$X $METHOD(...) {
|
|
61
|
+
...
|
|
62
|
+
LdapCtx $CTX = ...;
|
|
63
|
+
...
|
|
64
|
+
}
|
|
65
|
+
- pattern-inside: |
|
|
66
|
+
$X $METHOD(...) {
|
|
67
|
+
...
|
|
68
|
+
EventDirContext $CTX = ...;
|
|
69
|
+
...
|
|
70
|
+
}
|
|
71
|
+
- pattern: |
|
|
72
|
+
$X $METHOD(...) {
|
|
73
|
+
...
|
|
74
|
+
$CTX.search($Y,$INPUT,...);
|
|
75
|
+
...
|
|
76
|
+
}
|
|
77
|
+
- pattern-not: |
|
|
78
|
+
$X $METHOD(...) {
|
|
79
|
+
...
|
|
80
|
+
$CTX.search($Y,"...",...);
|
|
81
|
+
...
|
|
82
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
rules:
|
|
2
|
+
- id: md5-used-as-password
|
|
3
|
+
languages: [java]
|
|
4
|
+
severity: WARNING
|
|
5
|
+
message: >-
|
|
6
|
+
It looks like MD5 is used as a password hash. MD5 is not considered a
|
|
7
|
+
secure password hash because it can be cracked by an attacker in a short
|
|
8
|
+
amount of time. Use a suitable password hashing function such as PBKDF2 or bcrypt.
|
|
9
|
+
You can use `javax.crypto.SecretKeyFactory` with `SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1")`
|
|
10
|
+
or, if using Spring, `org.springframework.security.crypto.bcrypt`.
|
|
11
|
+
metadata:
|
|
12
|
+
category: security
|
|
13
|
+
technology:
|
|
14
|
+
- java
|
|
15
|
+
- md5
|
|
16
|
+
references:
|
|
17
|
+
- https://tools.ietf.org/id/draft-lvelvindron-tls-md5-sha1-deprecate-01.html
|
|
18
|
+
- https://github.com/returntocorp/semgrep-rules/issues/1609
|
|
19
|
+
- https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#SecretKeyFactory
|
|
20
|
+
- https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/crypto/bcrypt/BCryptPasswordEncoder.html
|
|
21
|
+
owasp:
|
|
22
|
+
- A03:2017 - Sensitive Data Exposure
|
|
23
|
+
- A02:2021 - Cryptographic Failures
|
|
24
|
+
- A04:2025 - Cryptographic Failures
|
|
25
|
+
cwe:
|
|
26
|
+
- 'CWE-327: Use of a Broken or Risky Cryptographic Algorithm'
|
|
27
|
+
subcategory:
|
|
28
|
+
- vuln
|
|
29
|
+
likelihood: HIGH
|
|
30
|
+
impact: MEDIUM
|
|
31
|
+
confidence: MEDIUM
|
|
32
|
+
mode: taint
|
|
33
|
+
pattern-sources:
|
|
34
|
+
- patterns:
|
|
35
|
+
- pattern-inside: |
|
|
36
|
+
$TYPE $MD = MessageDigest.getInstance("MD5");
|
|
37
|
+
...
|
|
38
|
+
- pattern: $MD.digest(...);
|
|
39
|
+
pattern-sinks:
|
|
40
|
+
- patterns:
|
|
41
|
+
- pattern: $MODEL.$METHOD(...);
|
|
42
|
+
- metavariable-regex:
|
|
43
|
+
metavariable: $METHOD
|
|
44
|
+
regex: (?i)(.*password.*)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
rules:
|
|
2
|
+
- id: object-deserialization
|
|
3
|
+
metadata:
|
|
4
|
+
cwe:
|
|
5
|
+
- 'CWE-502: Deserialization of Untrusted Data'
|
|
6
|
+
owasp:
|
|
7
|
+
- A08:2017 - Insecure Deserialization
|
|
8
|
+
- A08:2021 - Software and Data Integrity Failures
|
|
9
|
+
- A08:2025 - Software or Data Integrity Failures
|
|
10
|
+
source-rule-url: https://find-sec-bugs.github.io/bugs.htm#OBJECT_DESERIALIZATION
|
|
11
|
+
references:
|
|
12
|
+
- https://www.owasp.org/index.php/Deserialization_of_untrusted_data
|
|
13
|
+
- https://www.oracle.com/java/technologies/javase/seccodeguide.html#8
|
|
14
|
+
category: security
|
|
15
|
+
technology:
|
|
16
|
+
- java
|
|
17
|
+
cwe2022-top25: true
|
|
18
|
+
cwe2021-top25: true
|
|
19
|
+
subcategory:
|
|
20
|
+
- audit
|
|
21
|
+
likelihood: LOW
|
|
22
|
+
impact: HIGH
|
|
23
|
+
confidence: LOW
|
|
24
|
+
message: >-
|
|
25
|
+
Found object deserialization using ObjectInputStream. Deserializing entire
|
|
26
|
+
Java objects is dangerous because malicious actors can create Java object
|
|
27
|
+
streams with unintended consequences. Ensure that the objects being deserialized
|
|
28
|
+
are not user-controlled. If this must be done, consider using HMACs to sign
|
|
29
|
+
the data stream to make sure it is not tampered with, or consider only
|
|
30
|
+
transmitting object fields and populating a new object.
|
|
31
|
+
severity: WARNING
|
|
32
|
+
languages:
|
|
33
|
+
- java
|
|
34
|
+
pattern: new ObjectInputStream(...);
|