circle-ir 4.16.1 → 4.18.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/dist/analysis/advisories.d.ts +186 -0
- package/dist/analysis/advisories.d.ts.map +1 -0
- package/dist/analysis/advisories.js +391 -0
- package/dist/analysis/advisories.js.map +1 -0
- package/dist/analysis/comment-lines.d.ts +14 -0
- package/dist/analysis/comment-lines.d.ts.map +1 -0
- package/dist/analysis/comment-lines.js +34 -0
- package/dist/analysis/comment-lines.js.map +1 -0
- package/dist/analysis/config-loader.d.ts.map +1 -1
- package/dist/analysis/config-loader.js +59 -5
- package/dist/analysis/config-loader.js.map +1 -1
- package/dist/analysis/constant-caller-gate.d.ts +2 -2
- package/dist/analysis/constant-caller-gate.d.ts.map +1 -1
- package/dist/analysis/constant-caller-gate.js +205 -29
- package/dist/analysis/constant-caller-gate.js.map +1 -1
- package/dist/analysis/constant-propagation/index.d.ts +2 -0
- package/dist/analysis/constant-propagation/index.d.ts.map +1 -1
- package/dist/analysis/constant-propagation/index.js +10 -0
- package/dist/analysis/constant-propagation/index.js.map +1 -1
- package/dist/analysis/constant-propagation/propagator.d.ts +15 -0
- package/dist/analysis/constant-propagation/propagator.d.ts.map +1 -1
- package/dist/analysis/constant-propagation/propagator.js +224 -20
- package/dist/analysis/constant-propagation/propagator.js.map +1 -1
- package/dist/analysis/constant-propagation/types.d.ts +2 -0
- package/dist/analysis/constant-propagation/types.d.ts.map +1 -1
- package/dist/analysis/constant-propagation.d.ts +1 -1
- package/dist/analysis/constant-propagation.d.ts.map +1 -1
- package/dist/analysis/constant-propagation.js +1 -1
- package/dist/analysis/constant-propagation.js.map +1 -1
- package/dist/analysis/entry-point-detection.d.ts.map +1 -1
- package/dist/analysis/entry-point-detection.js +72 -0
- package/dist/analysis/entry-point-detection.js.map +1 -1
- package/dist/analysis/interprocedural.d.ts.map +1 -1
- package/dist/analysis/interprocedural.js +75 -8
- package/dist/analysis/interprocedural.js.map +1 -1
- package/dist/analysis/maven-declared.d.ts +72 -0
- package/dist/analysis/maven-declared.d.ts.map +1 -0
- package/dist/analysis/maven-declared.js +216 -0
- package/dist/analysis/maven-declared.js.map +1 -0
- package/dist/analysis/maven-version.d.ts +28 -0
- package/dist/analysis/maven-version.d.ts.map +1 -0
- package/dist/analysis/maven-version.js +172 -0
- package/dist/analysis/maven-version.js.map +1 -0
- package/dist/analysis/passes/constant-propagation-pass.d.ts.map +1 -1
- package/dist/analysis/passes/constant-propagation-pass.js +29 -1
- package/dist/analysis/passes/constant-propagation-pass.js.map +1 -1
- package/dist/analysis/passes/cross-file-pass.d.ts.map +1 -1
- package/dist/analysis/passes/cross-file-pass.js +84 -2
- package/dist/analysis/passes/cross-file-pass.js.map +1 -1
- package/dist/analysis/passes/csharp-sanitizer-credit.d.ts +7 -0
- package/dist/analysis/passes/csharp-sanitizer-credit.d.ts.map +1 -1
- package/dist/analysis/passes/csharp-sanitizer-credit.js +44 -1
- package/dist/analysis/passes/csharp-sanitizer-credit.js.map +1 -1
- package/dist/analysis/passes/insecure-cookie-pass.d.ts +2 -0
- package/dist/analysis/passes/insecure-cookie-pass.d.ts.map +1 -1
- package/dist/analysis/passes/insecure-cookie-pass.js +25 -3
- package/dist/analysis/passes/insecure-cookie-pass.js.map +1 -1
- package/dist/analysis/passes/interprocedural-pass.d.ts +11 -14
- package/dist/analysis/passes/interprocedural-pass.d.ts.map +1 -1
- package/dist/analysis/passes/interprocedural-pass.js +562 -0
- package/dist/analysis/passes/interprocedural-pass.js.map +1 -1
- package/dist/analysis/passes/language-sources-pass.d.ts +18 -1
- package/dist/analysis/passes/language-sources-pass.d.ts.map +1 -1
- package/dist/analysis/passes/language-sources-pass.js +1079 -14
- package/dist/analysis/passes/language-sources-pass.js.map +1 -1
- package/dist/analysis/passes/param-source-flow-gate-pass.d.ts.map +1 -1
- package/dist/analysis/passes/param-source-flow-gate-pass.js +82 -3
- package/dist/analysis/passes/param-source-flow-gate-pass.js.map +1 -1
- package/dist/analysis/passes/sink-filter-pass.d.ts +44 -2
- package/dist/analysis/passes/sink-filter-pass.d.ts.map +1 -1
- package/dist/analysis/passes/sink-filter-pass.js +690 -12
- package/dist/analysis/passes/sink-filter-pass.js.map +1 -1
- package/dist/analysis/passes/taint-propagation-pass.d.ts.map +1 -1
- package/dist/analysis/passes/taint-propagation-pass.js +298 -19
- package/dist/analysis/passes/taint-propagation-pass.js.map +1 -1
- package/dist/analysis/passes/tls-verify-disabled-pass.d.ts +18 -0
- package/dist/analysis/passes/tls-verify-disabled-pass.d.ts.map +1 -1
- package/dist/analysis/passes/tls-verify-disabled-pass.js +161 -0
- package/dist/analysis/passes/tls-verify-disabled-pass.js.map +1 -1
- package/dist/analysis/passes/weak-random-pass.d.ts +6 -0
- package/dist/analysis/passes/weak-random-pass.d.ts.map +1 -1
- package/dist/analysis/passes/weak-random-pass.js +29 -0
- package/dist/analysis/passes/weak-random-pass.js.map +1 -1
- package/dist/analysis/promote-cross-file-flows.d.ts +17 -0
- package/dist/analysis/promote-cross-file-flows.d.ts.map +1 -0
- package/dist/analysis/promote-cross-file-flows.js +32 -0
- package/dist/analysis/promote-cross-file-flows.js.map +1 -0
- package/dist/analysis/rust-literal-guard.d.ts.map +1 -1
- package/dist/analysis/rust-literal-guard.js +100 -1
- package/dist/analysis/rust-literal-guard.js.map +1 -1
- package/dist/analysis/sbom.d.ts +100 -0
- package/dist/analysis/sbom.d.ts.map +1 -1
- package/dist/analysis/sbom.js +514 -3
- package/dist/analysis/sbom.js.map +1 -1
- package/dist/analysis/semver-version.d.ts +30 -0
- package/dist/analysis/semver-version.d.ts.map +1 -0
- package/dist/analysis/semver-version.js +76 -0
- package/dist/analysis/semver-version.js.map +1 -0
- package/dist/analysis/taint-matcher.d.ts +5 -0
- package/dist/analysis/taint-matcher.d.ts.map +1 -1
- package/dist/analysis/taint-matcher.js +226 -4
- package/dist/analysis/taint-matcher.js.map +1 -1
- package/dist/analyzer.d.ts +57 -0
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +69 -6
- package/dist/analyzer.js.map +1 -1
- package/dist/browser/circle-ir.js +3360 -314
- package/dist/core/circle-ir-core.cjs +783 -220
- package/dist/core/circle-ir-core.js +783 -220
- package/dist/core/extractors/dfg.js +205 -2
- package/dist/core/extractors/dfg.js.map +1 -1
- package/dist/core/extractors/ts-declaration-detail.d.ts +39 -0
- package/dist/core/extractors/ts-declaration-detail.d.ts.map +1 -0
- package/dist/core/extractors/ts-declaration-detail.js +266 -0
- package/dist/core/extractors/ts-declaration-detail.js.map +1 -0
- package/dist/core/extractors/types.js +53 -9
- package/dist/core/extractors/types.js.map +1 -1
- package/dist/graph/analysis-pass.d.ts +4 -1
- package/dist/graph/analysis-pass.d.ts.map +1 -1
- package/dist/graph/analysis-pass.js +4 -1
- package/dist/graph/analysis-pass.js.map +1 -1
- package/dist/graph-facts/dead-code.d.ts +62 -0
- package/dist/graph-facts/dead-code.d.ts.map +1 -0
- package/dist/graph-facts/dead-code.js +90 -0
- package/dist/graph-facts/dead-code.js.map +1 -0
- package/dist/graph-facts/dependency-calls.d.ts +86 -0
- package/dist/graph-facts/dependency-calls.d.ts.map +1 -0
- package/dist/graph-facts/dependency-calls.js +93 -0
- package/dist/graph-facts/dependency-calls.js.map +1 -0
- package/dist/graph-facts/index.d.ts +10 -0
- package/dist/graph-facts/index.d.ts.map +1 -0
- package/dist/graph-facts/index.js +10 -0
- package/dist/graph-facts/index.js.map +1 -0
- package/dist/graph-facts/maven-packages.d.ts +42 -0
- package/dist/graph-facts/maven-packages.d.ts.map +1 -0
- package/dist/graph-facts/maven-packages.js +133 -0
- package/dist/graph-facts/maven-packages.js.map +1 -0
- package/dist/graph-facts/reach.d.ts +203 -0
- package/dist/graph-facts/reach.d.ts.map +1 -0
- package/dist/graph-facts/reach.js +219 -0
- package/dist/graph-facts/reach.js.map +1 -0
- package/dist/graph-facts/removal-reach.d.ts +73 -0
- package/dist/graph-facts/removal-reach.d.ts.map +1 -0
- package/dist/graph-facts/removal-reach.js +64 -0
- package/dist/graph-facts/removal-reach.js.map +1 -0
- package/dist/index.d.ts +21 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -3
- package/dist/index.js.map +1 -1
- package/dist/navigation/go-graph.d.ts +68 -0
- package/dist/navigation/go-graph.d.ts.map +1 -0
- package/dist/navigation/go-graph.js +753 -0
- package/dist/navigation/go-graph.js.map +1 -0
- package/dist/navigation/index.d.ts +7 -1
- package/dist/navigation/index.d.ts.map +1 -1
- package/dist/navigation/index.js +6 -0
- package/dist/navigation/index.js.map +1 -1
- package/dist/navigation/java-entry-tables.d.ts +43 -0
- package/dist/navigation/java-entry-tables.d.ts.map +1 -0
- package/dist/navigation/java-entry-tables.js +56 -0
- package/dist/navigation/java-entry-tables.js.map +1 -0
- package/dist/navigation/java-graph.d.ts +64 -0
- package/dist/navigation/java-graph.d.ts.map +1 -0
- package/dist/navigation/java-graph.js +466 -0
- package/dist/navigation/java-graph.js.map +1 -0
- package/dist/navigation/navigation-index.d.ts +91 -2
- package/dist/navigation/navigation-index.d.ts.map +1 -1
- package/dist/navigation/navigation-index.js +372 -45
- package/dist/navigation/navigation-index.js.map +1 -1
- package/dist/navigation/python-graph.d.ts +73 -0
- package/dist/navigation/python-graph.d.ts.map +1 -0
- package/dist/navigation/python-graph.js +867 -0
- package/dist/navigation/python-graph.js.map +1 -0
- package/dist/navigation/ts-call-edges.d.ts +193 -0
- package/dist/navigation/ts-call-edges.d.ts.map +1 -0
- package/dist/navigation/ts-call-edges.js +2089 -0
- package/dist/navigation/ts-call-edges.js.map +1 -0
- package/dist/navigation/ts-entry-tables.d.ts +88 -0
- package/dist/navigation/ts-entry-tables.d.ts.map +1 -0
- package/dist/navigation/ts-entry-tables.js +50 -0
- package/dist/navigation/ts-entry-tables.js.map +1 -0
- package/dist/path-set/branches.d.ts +52 -0
- package/dist/path-set/branches.d.ts.map +1 -0
- package/dist/path-set/branches.js +124 -0
- package/dist/path-set/branches.js.map +1 -0
- package/dist/path-set/finding-diff.d.ts +63 -0
- package/dist/path-set/finding-diff.d.ts.map +1 -0
- package/dist/path-set/finding-diff.js +150 -0
- package/dist/path-set/finding-diff.js.map +1 -0
- package/dist/path-set/index.d.ts +18 -0
- package/dist/path-set/index.d.ts.map +1 -0
- package/dist/path-set/index.js +12 -0
- package/dist/path-set/index.js.map +1 -0
- package/dist/path-set/line-diff.d.ts +19 -0
- package/dist/path-set/line-diff.d.ts.map +1 -0
- package/dist/path-set/line-diff.js +98 -0
- package/dist/path-set/line-diff.js.map +1 -0
- package/dist/path-set/path-set.d.ts +88 -0
- package/dist/path-set/path-set.d.ts.map +1 -0
- package/dist/path-set/path-set.js +716 -0
- package/dist/path-set/path-set.js.map +1 -0
- package/dist/path-set/templates.d.ts +42 -0
- package/dist/path-set/templates.d.ts.map +1 -0
- package/dist/path-set/templates.js +119 -0
- package/dist/path-set/templates.js.map +1 -0
- package/dist/path-set/types.d.ts +195 -0
- package/dist/path-set/types.d.ts.map +1 -0
- package/dist/path-set/types.js +8 -0
- package/dist/path-set/types.js.map +1 -0
- package/dist/remedy-class/index.d.ts +12 -0
- package/dist/remedy-class/index.d.ts.map +1 -0
- package/dist/remedy-class/index.js +9 -0
- package/dist/remedy-class/index.js.map +1 -0
- package/dist/remedy-class/match.d.ts +165 -0
- package/dist/remedy-class/match.d.ts.map +1 -0
- package/dist/remedy-class/match.js +705 -0
- package/dist/remedy-class/match.js.map +1 -0
- package/dist/remedy-class/output-context.d.ts +25 -0
- package/dist/remedy-class/output-context.d.ts.map +1 -0
- package/dist/remedy-class/output-context.js +150 -0
- package/dist/remedy-class/output-context.js.map +1 -0
- package/dist/remedy-class/sha256.d.ts +18 -0
- package/dist/remedy-class/sha256.d.ts.map +1 -0
- package/dist/remedy-class/sha256.js +89 -0
- package/dist/remedy-class/sha256.js.map +1 -0
- package/dist/remedy-class/table.d.ts +130 -0
- package/dist/remedy-class/table.d.ts.map +1 -0
- package/dist/remedy-class/table.js +457 -0
- package/dist/remedy-class/table.js.map +1 -0
- package/dist/resolution/cross-file.d.ts +18 -0
- package/dist/resolution/cross-file.d.ts.map +1 -1
- package/dist/resolution/cross-file.js +194 -5
- package/dist/resolution/cross-file.js.map +1 -1
- package/dist/stable-ids/builder.d.ts +20 -0
- package/dist/stable-ids/builder.d.ts.map +1 -0
- package/dist/stable-ids/builder.js +65 -0
- package/dist/stable-ids/builder.js.map +1 -0
- package/dist/stable-ids/diff.d.ts +18 -0
- package/dist/stable-ids/diff.d.ts.map +1 -0
- package/dist/stable-ids/diff.js +37 -0
- package/dist/stable-ids/diff.js.map +1 -0
- package/dist/stable-ids/go.d.ts +28 -0
- package/dist/stable-ids/go.d.ts.map +1 -0
- package/dist/stable-ids/go.js +160 -0
- package/dist/stable-ids/go.js.map +1 -0
- package/dist/stable-ids/hash.d.ts +22 -0
- package/dist/stable-ids/hash.d.ts.map +1 -0
- package/dist/stable-ids/hash.js +167 -0
- package/dist/stable-ids/hash.js.map +1 -0
- package/dist/stable-ids/index.d.ts +30 -0
- package/dist/stable-ids/index.d.ts.map +1 -0
- package/dist/stable-ids/index.js +59 -0
- package/dist/stable-ids/index.js.map +1 -0
- package/dist/stable-ids/java.d.ts +28 -0
- package/dist/stable-ids/java.d.ts.map +1 -0
- package/dist/stable-ids/java.js +224 -0
- package/dist/stable-ids/java.js.map +1 -0
- package/dist/stable-ids/moves.d.ts +87 -0
- package/dist/stable-ids/moves.d.ts.map +1 -0
- package/dist/stable-ids/moves.js +222 -0
- package/dist/stable-ids/moves.js.map +1 -0
- package/dist/stable-ids/nodes.d.ts +32 -0
- package/dist/stable-ids/nodes.d.ts.map +1 -0
- package/dist/stable-ids/nodes.js +92 -0
- package/dist/stable-ids/nodes.js.map +1 -0
- package/dist/stable-ids/normalize.d.ts +35 -0
- package/dist/stable-ids/normalize.d.ts.map +1 -0
- package/dist/stable-ids/normalize.js +174 -0
- package/dist/stable-ids/normalize.js.map +1 -0
- package/dist/stable-ids/parse-errors.d.ts +24 -0
- package/dist/stable-ids/parse-errors.d.ts.map +1 -0
- package/dist/stable-ids/parse-errors.js +46 -0
- package/dist/stable-ids/parse-errors.js.map +1 -0
- package/dist/stable-ids/python.d.ts +27 -0
- package/dist/stable-ids/python.d.ts.map +1 -0
- package/dist/stable-ids/python.js +212 -0
- package/dist/stable-ids/python.js.map +1 -0
- package/dist/stable-ids/ts-parse-errors.d.ts +27 -0
- package/dist/stable-ids/ts-parse-errors.d.ts.map +1 -0
- package/dist/stable-ids/ts-parse-errors.js +75 -0
- package/dist/stable-ids/ts-parse-errors.js.map +1 -0
- package/dist/stable-ids/types.d.ts +106 -0
- package/dist/stable-ids/types.d.ts.map +1 -0
- package/dist/stable-ids/types.js +16 -0
- package/dist/stable-ids/types.js.map +1 -0
- package/dist/stable-ids/typescript.d.ts +30 -0
- package/dist/stable-ids/typescript.d.ts.map +1 -0
- package/dist/stable-ids/typescript.js +362 -0
- package/dist/stable-ids/typescript.js.map +1 -0
- package/dist/types/config.d.ts +9 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/index.d.ts +53 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
* call/composite contains literal `InsecureSkipVerify: true`, OR via
|
|
13
13
|
* a syntactic text scan (composite literals are not always emitted
|
|
14
14
|
* as calls in IR).
|
|
15
|
+
* - `(*x509.Certificate).Verify` with `x509.VerifyOptions` and no
|
|
16
|
+
* intermediate-CA denylist / blocklist guard in the same file — PKIX
|
|
17
|
+
* chain acceptance without checking blocked intermediates (CWE-295).
|
|
15
18
|
* Python:
|
|
16
19
|
* - `requests.get|post|put|delete|patch|head|options|request(..., verify=False)`
|
|
17
20
|
* - `ssl._create_unverified_context()` / `ssl._create_default_https_context = ssl._create_unverified_context`
|
|
@@ -21,6 +24,17 @@
|
|
|
21
24
|
* - `{ rejectUnauthorized: false }` in https.request / fetch options /
|
|
22
25
|
* node-fetch / axios — text scan on arg expressions
|
|
23
26
|
* - `https.Agent({ rejectUnauthorized: false })`
|
|
27
|
+
* - Custom `checkServerIdentity` that always succeeds (`=> undefined` /
|
|
28
|
+
* `=> null` / empty body) — disables hostname verification without
|
|
29
|
+
* setting `rejectUnauthorized: false`
|
|
30
|
+
* - Custom `checkServerIdentity` that accepts after loose host parsing
|
|
31
|
+
* (digit-only IP folding, helper such as `looseIp`) — CWE-295 weak identity
|
|
32
|
+
* - Custom `checkServerIdentity` that compares hosts after Unicode NFKC
|
|
33
|
+
* normalization (fullwidth / homograph confusion)
|
|
34
|
+
* - Custom `checkServerIdentity` that accepts when the requested host
|
|
35
|
+
* appears in subjectAltName / DNS SAN text (DNS↔IP confusion)
|
|
36
|
+
* - Custom `checkServerIdentity` that walks `issuerCertificate` without
|
|
37
|
+
* an intermediate denylist / blocklist guard
|
|
24
38
|
* - `process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'` (assignment;
|
|
25
39
|
* detected via call to property assignment — best-effort)
|
|
26
40
|
* Java:
|
|
@@ -47,6 +61,10 @@ export declare class TlsVerifyDisabledPass implements AnalysisPass<TlsVerifyDisa
|
|
|
47
61
|
run(ctx: PassContext): TlsVerifyDisabledResult;
|
|
48
62
|
private detectCall;
|
|
49
63
|
private detectSourceText;
|
|
64
|
+
/** Standalone and inline `checkServerIdentity` with weak identity checks. */
|
|
65
|
+
private detectWeakCheckServerIdentityCallbacks;
|
|
66
|
+
private classifyWeakCheckServerIdentityBody;
|
|
67
|
+
private sliceBalancedBraces;
|
|
50
68
|
private fixFor;
|
|
51
69
|
}
|
|
52
70
|
//# sourceMappingURL=tls-verify-disabled-pass.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tls-verify-disabled-pass.d.ts","sourceRoot":"","sources":["../../../src/analysis/passes/tls-verify-disabled-pass.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tls-verify-disabled-pass.d.ts","sourceRoot":"","sources":["../../../src/analysis/passes/tls-verify-disabled-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAqD9E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC,CAAC;CACJ;AAED,qBAAa,qBAAsB,YAAW,YAAY,CAAC,uBAAuB,CAAC;IACjF,QAAQ,CAAC,IAAI,yBAAyB;IACtC,QAAQ,CAAC,QAAQ,EAAG,UAAU,CAAU;IAExC,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,uBAAuB,CA2D7C;IAED,OAAO,CAAC,UAAU;IA4ElB,OAAO,CAAC,gBAAgB;IAyHxB,6EAA6E;IAC7E,OAAO,CAAC,sCAAsC;IAwC9C,OAAO,CAAC,mCAAmC;IAoC3C,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,MAAM;CA2Cf"}
|
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
* call/composite contains literal `InsecureSkipVerify: true`, OR via
|
|
13
13
|
* a syntactic text scan (composite literals are not always emitted
|
|
14
14
|
* as calls in IR).
|
|
15
|
+
* - `(*x509.Certificate).Verify` with `x509.VerifyOptions` and no
|
|
16
|
+
* intermediate-CA denylist / blocklist guard in the same file — PKIX
|
|
17
|
+
* chain acceptance without checking blocked intermediates (CWE-295).
|
|
15
18
|
* Python:
|
|
16
19
|
* - `requests.get|post|put|delete|patch|head|options|request(..., verify=False)`
|
|
17
20
|
* - `ssl._create_unverified_context()` / `ssl._create_default_https_context = ssl._create_unverified_context`
|
|
@@ -21,6 +24,17 @@
|
|
|
21
24
|
* - `{ rejectUnauthorized: false }` in https.request / fetch options /
|
|
22
25
|
* node-fetch / axios — text scan on arg expressions
|
|
23
26
|
* - `https.Agent({ rejectUnauthorized: false })`
|
|
27
|
+
* - Custom `checkServerIdentity` that always succeeds (`=> undefined` /
|
|
28
|
+
* `=> null` / empty body) — disables hostname verification without
|
|
29
|
+
* setting `rejectUnauthorized: false`
|
|
30
|
+
* - Custom `checkServerIdentity` that accepts after loose host parsing
|
|
31
|
+
* (digit-only IP folding, helper such as `looseIp`) — CWE-295 weak identity
|
|
32
|
+
* - Custom `checkServerIdentity` that compares hosts after Unicode NFKC
|
|
33
|
+
* normalization (fullwidth / homograph confusion)
|
|
34
|
+
* - Custom `checkServerIdentity` that accepts when the requested host
|
|
35
|
+
* appears in subjectAltName / DNS SAN text (DNS↔IP confusion)
|
|
36
|
+
* - Custom `checkServerIdentity` that walks `issuerCertificate` without
|
|
37
|
+
* an intermediate denylist / blocklist guard
|
|
24
38
|
* - `process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'` (assignment;
|
|
25
39
|
* detected via call to property assignment — best-effort)
|
|
26
40
|
* Java:
|
|
@@ -43,6 +57,14 @@ const PY_HTTP_RECEIVERS = new Set([
|
|
|
43
57
|
const VERIFY_FALSE_RE = /\bverify\s*=\s*False\b/;
|
|
44
58
|
const REJECT_UNAUTHORIZED_FALSE_RE = /\brejectUnauthorized\s*:\s*false\b/;
|
|
45
59
|
const INSECURE_SKIP_VERIFY_TRUE_RE = /\bInsecureSkipVerify\s*:\s*true\b/;
|
|
60
|
+
const GO_X509_VERIFY_CALL_RE = /\.Verify\s*\(/;
|
|
61
|
+
const GO_INTERMEDIATE_DENYLIST_GUARD_RE = /\b(denylist|denyList|deny_list|blocklist|blockList|blockedIntermediate|blocked_intermediate|deniedIntermediate|deniedIntermediates|denied_intermediate|isDeniedIntermediate|intermediateDenylist|intermediate_denylist)\b/i;
|
|
62
|
+
/** Strip Go comments so denylist words in headers do not suppress x509.Verify findings. */
|
|
63
|
+
function goSourceWithoutComments(code) {
|
|
64
|
+
let s = code.replace(/\/\*[\s\S]*?\*\//g, ' ');
|
|
65
|
+
s = s.replace(/\/\/[^\n]*/g, ' ');
|
|
66
|
+
return s;
|
|
67
|
+
}
|
|
46
68
|
const HOSTNAME_LAMBDA_TRUE_RE = /\(\s*\w+\s*,\s*\w+\s*\)\s*->\s*true\b/;
|
|
47
69
|
// C#: a cert-validation callback given an always-true lambda — assigned
|
|
48
70
|
// (`= `/`+= `) or wrapped in a delegate constructor (`new …Callback( … )`).
|
|
@@ -55,6 +77,15 @@ const ALLOW_ALL_HOSTNAME_VERIFIERS = new Set([
|
|
|
55
77
|
'new AllowAllHostnameVerifier()',
|
|
56
78
|
'new NoopHostnameVerifier()',
|
|
57
79
|
]);
|
|
80
|
+
// Node TLS: returning undefined/null from checkServerIdentity means success.
|
|
81
|
+
const JS_CHECK_SERVER_IDENTITY_NOP_RE = /\bcheckServerIdentity\s*:\s*(?:async\s*)?\([^)]*\)\s*=>\s*(?:undefined|null)\b/;
|
|
82
|
+
const JS_CHECK_SERVER_IDENTITY_NOP_FN_RE = /\bcheckServerIdentity\s*:\s*function\s*\([^)]*\)\s*\{\s*return\s+(?:undefined|null)\s*;?\s*\}/;
|
|
83
|
+
const JS_CHECK_SERVER_IDENTITY_DECL_RE = /\bfunction\s+checkServerIdentity\s*\([^)]*\)\s*\{/g;
|
|
84
|
+
const JS_LOOSE_IP_HOST_STRIP_RE = /\.replace\s*\(\s*\/\[\^\\d\.\]\\]\//;
|
|
85
|
+
const JS_CHECK_SERVER_IDENTITY_LOOSE_BODY_RE = /(?:looseIp\s*\(|\.replace\s*\(\s*\/\[\^\\d\.\]\\]\/)[\s\S]*?return\s+undefined\b/;
|
|
86
|
+
const JS_NFKC_NORMALIZE_RE = /\.normalize\s*\(\s*['"]NFKC['"]\s*\)/i;
|
|
87
|
+
const JS_SUBJECT_ALT_NAME_RE = /\bsubjectaltname\b|\bsubjectAltName\b|\baltNames\b|\bDNS:\b|\bIP Address:/i;
|
|
88
|
+
const JS_ISSUER_CHAIN_WALK_RE = /\bissuerCertificate\b/;
|
|
58
89
|
export class TlsVerifyDisabledPass {
|
|
59
90
|
name = 'tls-verify-disabled';
|
|
60
91
|
category = 'security';
|
|
@@ -195,6 +226,21 @@ export class TlsVerifyDisabledPass {
|
|
|
195
226
|
});
|
|
196
227
|
}
|
|
197
228
|
}
|
|
229
|
+
if (/\bx509\./.test(code) &&
|
|
230
|
+
/\bVerifyOptions\b/.test(code) &&
|
|
231
|
+
GO_X509_VERIFY_CALL_RE.test(code) &&
|
|
232
|
+
!GO_INTERMEDIATE_DENYLIST_GUARD_RE.test(goSourceWithoutComments(code))) {
|
|
233
|
+
for (let i = 0; i < lines.length; i++) {
|
|
234
|
+
if (GO_X509_VERIFY_CALL_RE.test(lines[i])) {
|
|
235
|
+
out.push({
|
|
236
|
+
line: i + 1,
|
|
237
|
+
pattern: 'x509.Verify without intermediate denylist',
|
|
238
|
+
api: 'x509.Certificate.Verify',
|
|
239
|
+
});
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
198
244
|
}
|
|
199
245
|
if (language === 'python') {
|
|
200
246
|
for (let i = 0; i < lines.length; i++) {
|
|
@@ -218,6 +264,37 @@ export class TlsVerifyDisabledPass {
|
|
|
218
264
|
api: 'process.env',
|
|
219
265
|
});
|
|
220
266
|
}
|
|
267
|
+
if (JS_CHECK_SERVER_IDENTITY_NOP_RE.test(l) ||
|
|
268
|
+
JS_CHECK_SERVER_IDENTITY_NOP_FN_RE.test(l)) {
|
|
269
|
+
out.push({
|
|
270
|
+
line: i + 1,
|
|
271
|
+
pattern: 'checkServerIdentity => undefined',
|
|
272
|
+
api: 'tls.connect / https.request options',
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
// Multi-line arrow bodies (options object spans lines).
|
|
277
|
+
const m = JS_CHECK_SERVER_IDENTITY_NOP_RE.exec(code) ?? JS_CHECK_SERVER_IDENTITY_NOP_FN_RE.exec(code);
|
|
278
|
+
if (m && m.index !== undefined) {
|
|
279
|
+
const line = code.slice(0, m.index).split('\n').length;
|
|
280
|
+
const dupKey = `${line}-checkServerIdentity => undefined`;
|
|
281
|
+
if (!out.some((o) => `${o.line}-${o.pattern}` === dupKey)) {
|
|
282
|
+
out.push({
|
|
283
|
+
line,
|
|
284
|
+
pattern: 'checkServerIdentity => undefined',
|
|
285
|
+
api: 'tls.connect / https.request options',
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
for (const weak of this.detectWeakCheckServerIdentityCallbacks(code)) {
|
|
290
|
+
const dupKey = `${weak.line}-${weak.pattern}`;
|
|
291
|
+
if (!out.some((o) => `${o.line}-${o.pattern}` === dupKey)) {
|
|
292
|
+
out.push({
|
|
293
|
+
line: weak.line,
|
|
294
|
+
pattern: weak.pattern,
|
|
295
|
+
api: 'checkServerIdentity (custom)',
|
|
296
|
+
});
|
|
297
|
+
}
|
|
221
298
|
}
|
|
222
299
|
}
|
|
223
300
|
if (language === 'csharp') {
|
|
@@ -244,12 +321,91 @@ export class TlsVerifyDisabledPass {
|
|
|
244
321
|
}
|
|
245
322
|
return out;
|
|
246
323
|
}
|
|
324
|
+
/** Standalone and inline `checkServerIdentity` with weak identity checks. */
|
|
325
|
+
detectWeakCheckServerIdentityCallbacks(code) {
|
|
326
|
+
const hits = [];
|
|
327
|
+
const fileHasDenylist = GO_INTERMEDIATE_DENYLIST_GUARD_RE.test(code);
|
|
328
|
+
const declRe = new RegExp(JS_CHECK_SERVER_IDENTITY_DECL_RE.source, 'g');
|
|
329
|
+
let match;
|
|
330
|
+
while ((match = declRe.exec(code)) !== null) {
|
|
331
|
+
const openBrace = code.indexOf('{', match.index);
|
|
332
|
+
if (openBrace < 0)
|
|
333
|
+
continue;
|
|
334
|
+
const body = this.sliceBalancedBraces(code, openBrace);
|
|
335
|
+
if (!body)
|
|
336
|
+
continue;
|
|
337
|
+
const prelude = code.slice(Math.max(0, match.index - 800), match.index);
|
|
338
|
+
const line = code.slice(0, match.index).split('\n').length;
|
|
339
|
+
const weak = this.classifyWeakCheckServerIdentityBody(body, prelude, fileHasDenylist);
|
|
340
|
+
if (weak)
|
|
341
|
+
hits.push({ line, pattern: weak });
|
|
342
|
+
}
|
|
343
|
+
const inlineRe = /\bcheckServerIdentity\s*:\s*(?:async\s*)?function\s*\([^)]*\)\s*\{/g;
|
|
344
|
+
while ((match = inlineRe.exec(code)) !== null) {
|
|
345
|
+
const openBrace = code.indexOf('{', match.index);
|
|
346
|
+
if (openBrace < 0)
|
|
347
|
+
continue;
|
|
348
|
+
const body = this.sliceBalancedBraces(code, openBrace);
|
|
349
|
+
if (!body)
|
|
350
|
+
continue;
|
|
351
|
+
const prelude = code.slice(Math.max(0, match.index - 800), match.index);
|
|
352
|
+
const line = code.slice(0, match.index).split('\n').length;
|
|
353
|
+
const weak = this.classifyWeakCheckServerIdentityBody(body, prelude, fileHasDenylist);
|
|
354
|
+
if (weak)
|
|
355
|
+
hits.push({ line, pattern: weak });
|
|
356
|
+
}
|
|
357
|
+
return hits;
|
|
358
|
+
}
|
|
359
|
+
classifyWeakCheckServerIdentityBody(body, prelude, fileHasDenylist) {
|
|
360
|
+
if (!/\breturn\s+undefined\b/.test(body))
|
|
361
|
+
return null;
|
|
362
|
+
const loose = JS_LOOSE_IP_HOST_STRIP_RE.test(body) ||
|
|
363
|
+
JS_LOOSE_IP_HOST_STRIP_RE.test(prelude) ||
|
|
364
|
+
/\blooseIp\s*\(/.test(body);
|
|
365
|
+
if (loose && JS_CHECK_SERVER_IDENTITY_LOOSE_BODY_RE.test(body)) {
|
|
366
|
+
return 'checkServerIdentity loose host parse => undefined';
|
|
367
|
+
}
|
|
368
|
+
const nfkc = JS_NFKC_NORMALIZE_RE.test(body) || JS_NFKC_NORMALIZE_RE.test(prelude);
|
|
369
|
+
if (nfkc && /\breturn\s+undefined\b/.test(body)) {
|
|
370
|
+
return 'checkServerIdentity NFKC host normalize => undefined';
|
|
371
|
+
}
|
|
372
|
+
if (JS_SUBJECT_ALT_NAME_RE.test(body) && /\breturn\s+undefined\b/.test(body)) {
|
|
373
|
+
return 'checkServerIdentity DNS SAN / IP match => undefined';
|
|
374
|
+
}
|
|
375
|
+
if (JS_ISSUER_CHAIN_WALK_RE.test(body) &&
|
|
376
|
+
!fileHasDenylist &&
|
|
377
|
+
/\breturn\s+undefined\b/.test(body)) {
|
|
378
|
+
return 'checkServerIdentity issuer chain without denylist => undefined';
|
|
379
|
+
}
|
|
380
|
+
return null;
|
|
381
|
+
}
|
|
382
|
+
sliceBalancedBraces(code, openIndex) {
|
|
383
|
+
if (code[openIndex] !== '{')
|
|
384
|
+
return null;
|
|
385
|
+
let depth = 0;
|
|
386
|
+
for (let i = openIndex; i < code.length; i++) {
|
|
387
|
+
const ch = code[i];
|
|
388
|
+
if (ch === '{')
|
|
389
|
+
depth++;
|
|
390
|
+
else if (ch === '}') {
|
|
391
|
+
depth--;
|
|
392
|
+
if (depth === 0)
|
|
393
|
+
return code.slice(openIndex, i + 1);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
return null;
|
|
397
|
+
}
|
|
247
398
|
fixFor(language, pattern) {
|
|
248
399
|
if (pattern.includes('InsecureSkipVerify')) {
|
|
249
400
|
return 'Remove `InsecureSkipVerify: true` — let Go verify the cert. If ' +
|
|
250
401
|
'you need to trust a private CA, set `RootCAs` to a `*x509.CertPool` ' +
|
|
251
402
|
'containing that CA.';
|
|
252
403
|
}
|
|
404
|
+
if (pattern.includes('x509.Verify without intermediate denylist')) {
|
|
405
|
+
return 'Before calling `x509.Certificate.Verify`, check the chain (including ' +
|
|
406
|
+
'intermediates) against your blocked-CA / denylist policy. Relying on PKIX ' +
|
|
407
|
+
'verification alone accepts chains that include revoked or blocked intermediates.';
|
|
408
|
+
}
|
|
253
409
|
if (pattern.includes('verify=False')) {
|
|
254
410
|
return 'Remove `verify=False`. To trust a private CA, pass `verify=\'/path/to/ca.pem\'`.';
|
|
255
411
|
}
|
|
@@ -257,6 +413,11 @@ export class TlsVerifyDisabledPass {
|
|
|
257
413
|
return 'Remove `rejectUnauthorized: false`. To trust a private CA, set the ' +
|
|
258
414
|
'`ca` option to the CA cert(s). Never disable TLS verification globally.';
|
|
259
415
|
}
|
|
416
|
+
if (pattern.includes('checkServerIdentity')) {
|
|
417
|
+
return 'Implement `checkServerIdentity` to compare the certificate to the ' +
|
|
418
|
+
'intended hostname (or remove the override). Returning `undefined` accepts ' +
|
|
419
|
+
'the connection; loose host/IP folding before that check enables MITM.';
|
|
420
|
+
}
|
|
260
421
|
if (pattern.includes('NODE_TLS_REJECT_UNAUTHORIZED')) {
|
|
261
422
|
return 'Remove the `NODE_TLS_REJECT_UNAUTHORIZED=0` assignment — it globally ' +
|
|
262
423
|
'disables TLS verification for every outbound HTTPS request.';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tls-verify-disabled-pass.js","sourceRoot":"","sources":["../../../src/analysis/passes/tls-verify-disabled-pass.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tls-verify-disabled-pass.js","sourceRoot":"","sources":["../../../src/analysis/passes/tls-verify-disabled-pass.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,8 @@
|
|
|
22
22
|
* `random.seed(...)`
|
|
23
23
|
* JavaScript / TypeScript:
|
|
24
24
|
* - `Math.random()`
|
|
25
|
+
* - `crypto.randomUUID()` (or a bare `randomUUID` import) at module scope —
|
|
26
|
+
* a single value captured at load and reused is not fresh entropy (CWE-330).
|
|
25
27
|
* Go:
|
|
26
28
|
* - `math/rand` package calls — `rand.Int()`, `Intn()`, `Float64()`, etc.
|
|
27
29
|
* (Note: we check the bare receiver `rand`; the `crypto/rand` package
|
|
@@ -53,6 +55,10 @@ export declare class WeakRandomPass implements AnalysisPass<WeakRandomResult> {
|
|
|
53
55
|
* file (i.e. `math/rand` imported unaliased; `crypto/rand` is either not
|
|
54
56
|
* imported or imported under an alias).
|
|
55
57
|
*/
|
|
58
|
+
/**
|
|
59
|
+
* Module-scoped `crypto.randomUUID()` / `randomUUID()` — entropy fixed at load.
|
|
60
|
+
*/
|
|
61
|
+
private jsIsModuleScopedCryptoRandomUuid;
|
|
56
62
|
private goMathRandIsActive;
|
|
57
63
|
}
|
|
58
64
|
//# sourceMappingURL=weak-random-pass.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weak-random-pass.d.ts","sourceRoot":"","sources":["../../../src/analysis/passes/weak-random-pass.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"weak-random-pass.d.ts","sourceRoot":"","sources":["../../../src/analysis/passes/weak-random-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAyB9E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC,CAAC;CACJ;AAED,qBAAa,cAAe,YAAW,YAAY,CAAC,gBAAgB,CAAC;IACnE,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,QAAQ,EAAG,UAAU,CAAU;IAExC,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,gBAAgB,CAiCtC;IAED,OAAO,CAAC,MAAM;IAqBd,OAAO,CAAC,MAAM;IA+Ed;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAiBjC;;;;OAIG;IACH;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAkBxC,OAAO,CAAC,kBAAkB;CAiB3B"}
|
|
@@ -22,6 +22,8 @@
|
|
|
22
22
|
* `random.seed(...)`
|
|
23
23
|
* JavaScript / TypeScript:
|
|
24
24
|
* - `Math.random()`
|
|
25
|
+
* - `crypto.randomUUID()` (or a bare `randomUUID` import) at module scope —
|
|
26
|
+
* a single value captured at load and reused is not fresh entropy (CWE-330).
|
|
25
27
|
* Go:
|
|
26
28
|
* - `math/rand` package calls — `rand.Int()`, `Intn()`, `Float64()`, etc.
|
|
27
29
|
* (Note: we check the bare receiver `rand`; the `crypto/rand` package
|
|
@@ -158,6 +160,9 @@ export class WeakRandomPass {
|
|
|
158
160
|
if (method === 'random' && (receiver === 'Math' || receiver.endsWith('.Math'))) {
|
|
159
161
|
return 'Math.random';
|
|
160
162
|
}
|
|
163
|
+
if (this.jsIsModuleScopedCryptoRandomUuid(call, ctx)) {
|
|
164
|
+
return 'crypto.randomUUID (module scope)';
|
|
165
|
+
}
|
|
161
166
|
return null;
|
|
162
167
|
}
|
|
163
168
|
if (language === 'go') {
|
|
@@ -202,6 +207,30 @@ export class WeakRandomPass {
|
|
|
202
207
|
* file (i.e. `math/rand` imported unaliased; `crypto/rand` is either not
|
|
203
208
|
* imported or imported under an alias).
|
|
204
209
|
*/
|
|
210
|
+
/**
|
|
211
|
+
* Module-scoped `crypto.randomUUID()` / `randomUUID()` — entropy fixed at load.
|
|
212
|
+
*/
|
|
213
|
+
jsIsModuleScopedCryptoRandomUuid(call, ctx) {
|
|
214
|
+
if (call.method_name !== 'randomUUID')
|
|
215
|
+
return false;
|
|
216
|
+
if (call.in_method != null && call.in_method !== '')
|
|
217
|
+
return false;
|
|
218
|
+
const receiver = call.receiver ?? '';
|
|
219
|
+
if (receiver === 'crypto' || receiver.endsWith('.crypto'))
|
|
220
|
+
return true;
|
|
221
|
+
if (!receiver) {
|
|
222
|
+
const imports = ctx.graph.ir.imports ?? [];
|
|
223
|
+
return imports.some((imp) => {
|
|
224
|
+
const pkg = imp.from_package ?? '';
|
|
225
|
+
if (pkg !== 'crypto' && pkg !== 'node:crypto')
|
|
226
|
+
return false;
|
|
227
|
+
const name = imp.imported_name ?? imp.alias ?? '';
|
|
228
|
+
const alias = imp.alias ?? imp.imported_name ?? '';
|
|
229
|
+
return name === 'randomUUID' || alias === 'randomUUID';
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
205
234
|
goMathRandIsActive(ctx) {
|
|
206
235
|
const imports = ctx.graph.ir.imports ?? [];
|
|
207
236
|
let mathRandUnaliased = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weak-random-pass.js","sourceRoot":"","sources":["../../../src/analysis/passes/weak-random-pass.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"weak-random-pass.js","sourceRoot":"","sources":["../../../src/analysis/passes/weak-random-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAKH,OAAO;AACP,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa;IAC/D,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS;CACxD,CAAC,CAAC;AAEH,iCAAiC;AACjC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa;IAClE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe;IAClE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY;IAC9D,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc;CACnE,CAAC,CAAC;AAEH,yBAAyB;AACzB,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ;IACnD,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY;IACjD,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAC7C,MAAM,EAAE,KAAK,EAAE,WAAW;CAC3B,CAAC,CAAC;AAUH,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,aAAa,CAAC;IACrB,QAAQ,GAAG,UAAmB,CAAC;IAExC,GAAG,CAAC,GAAgB;QAClB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC,MAAM,QAAQ,GAAiC,EAAE,CAAC;QAElD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,GAAG;gBAAE,SAAS;YAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;YAEvC,GAAG,CAAC,UAAU,CAAC;gBACb,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;gBAClC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,IAAI,CAAC,IAAI;gBAClB,GAAG,EAAE,SAAS;gBACd,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,SAAS;gBAChB,OAAO,EACL,wCAAwC,GAAG,yBAAyB;oBACpE,uEAAuE;oBACvE,wEAAwE;gBAC1E,IAAI;gBACJ,IAAI;gBACJ,GAAG,EACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACvB,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;aAC5B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC;IAEO,MAAM,CAAC,QAAgB;QAC7B,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,MAAM;gBACT,OAAO,6CAA6C;oBAClD,mFAAmF,CAAC;YACxF,KAAK,QAAQ;gBACX,OAAO,mDAAmD;oBACxD,8DAA8D,CAAC;YACnE,KAAK,YAAY,CAAC;YAClB,KAAK,YAAY,CAAC;YAClB,KAAK,KAAK;gBACR,OAAO,2CAA2C;oBAChD,iDAAiD,CAAC;YACtD,KAAK,IAAI;gBACP,OAAO,qDAAqD;oBAC1D,+EAA+E,CAAC;YACpF;gBACE,OAAO,6EAA6E,CAAC;QACzF,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,IAAc,EAAE,QAAgB,EAAE,GAAgB;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QAErC,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YACxB,2CAA2C;YAC3C,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,MAAM,CAAC;gBACpB,IAAI,IAAI,KAAK,QAAQ;oBAAE,OAAO,YAAY,CAAC;gBAC3C,IAAI,IAAI,KAAK,kBAAkB;oBAAE,OAAO,sBAAsB,CAAC;YACjE,CAAC;YACD,kBAAkB;YAClB,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBAC/E,OAAO,aAAa,CAAC;YACvB,CAAC;YACD,kGAAkG;YAClG,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;gBACpC,IAAI,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;oBACjE,kEAAkE;oBAClE,mEAAmE;oBACnE,oEAAoE;oBACpE,kBAAkB;oBAClB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,kBAAkB,IAAI,EAAE,KAAK,mBAAmB,EAAE,CAAC;oBAC/E,OAAO,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,kFAAkF;YAClF,sEAAsE;YACtE,0EAA0E;YAC1E,mEAAmE;YACnE,yCAAyC;YACzC,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,IAAI,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAAE,OAAO,cAAc,MAAM,EAAE,CAAC;gBACvE,IAAI,8BAA8B,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAAE,OAAO,wBAAwB,MAAM,EAAE,CAAC;YAC7F,CAAC;YACD,6EAA6E;YAC7E,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvF,OAAO,6BAA6B,MAAM,EAAE,CAAC;YAC/C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,iDAAiD;YACjD,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3F,OAAO,UAAU,MAAM,EAAE,CAAC;YAC5B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACjF,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBAC/E,OAAO,aAAa,CAAC;YACvB,CAAC;YACD,IAAI,IAAI,CAAC,gCAAgC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACrD,OAAO,kCAAkC,CAAC;YAC5C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,kEAAkE;YAClE,kEAAkE;YAClE,oEAAoE;YACpE,kCAAkC;YAClC,IAAI,QAAQ,KAAK,MAAM,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrD,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjC,OAAO,QAAQ,MAAM,EAAE,CAAC;gBAC1B,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,yBAAyB,CAAC,IAAc,EAAE,GAAgB;QAChE,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAChC,IAAI,IAAI,GAA8C,IAAI,CAAC;QAC3D,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YAC5C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;gBACnC,IAAI,IAAI,GAAG,CAAC,CAAC,UAAU,IAAI,IAAI,GAAG,CAAC,CAAC,QAAQ;oBAAE,SAAS;gBACvD,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC;gBACvC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACxC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;gBACxD,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,iCAAiC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACjG,CAAC;QACH,CAAC;QACD,OAAO,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH;;OAEG;IACK,gCAAgC,CAAC,IAAc,EAAE,GAAgB;QACvE,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY;YAAE,OAAO,KAAK,CAAC;QACpD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE;YAAE,OAAO,KAAK,CAAC;QAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QACrC,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QACvE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;YAC3C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;gBACnC,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,aAAa;oBAAE,OAAO,KAAK,CAAC;gBAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;gBAClD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC;gBACnD,OAAO,IAAI,KAAK,YAAY,IAAI,KAAK,KAAK,YAAY,CAAC;YACzD,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,kBAAkB,CAAC,GAAgB;QACzC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;QAC3C,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAC9B,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,aAAa,CAAC;YAClD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YACxB,IAAI,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,EAAE,CAAC;gBACxD,iBAAiB,GAAG,IAAI,CAAC;YAC3B,CAAC;YACD,IAAI,GAAG,KAAK,aAAa,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,EAAE,CAAC;gBAC1D,mBAAmB,GAAG,IAAI,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,wDAAwD;QACxD,OAAO,iBAAiB,IAAI,CAAC,mBAAmB,CAAC;IACnD,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cognium-dev#684 — mirror resolved cross-file taint paths onto the sink
|
|
3
|
+
* file's per-file `taint.flows` so project scans expose the same types in the
|
|
4
|
+
* per-file vulnerability list that `cross_file_taint_paths` already carries.
|
|
5
|
+
*/
|
|
6
|
+
import type { TaintFlowInfo, TaintPath } from '../types/index.js';
|
|
7
|
+
type FileTaint = {
|
|
8
|
+
file: string;
|
|
9
|
+
analysis: {
|
|
10
|
+
taint: {
|
|
11
|
+
flows?: TaintFlowInfo[];
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export declare function promoteCrossFilePathsToSinkFlows(fileAnalyses: FileTaint[], taintPaths: TaintPath[]): void;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=promote-cross-file-flows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promote-cross-file-flows.d.ts","sourceRoot":"","sources":["../../src/analysis/promote-cross-file-flows.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,aAAa,EAAiB,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEjF,KAAK,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE;QAAE,KAAK,EAAE;YAAE,KAAK,CAAC,EAAE,aAAa,EAAE,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAEpF,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,SAAS,EAAE,EACzB,UAAU,EAAE,SAAS,EAAE,GACtB,IAAI,CAkCN"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export function promoteCrossFilePathsToSinkFlows(fileAnalyses, taintPaths) {
|
|
2
|
+
for (const tp of taintPaths) {
|
|
3
|
+
if (!tp.path_exists || tp.source.file === tp.sink.file)
|
|
4
|
+
continue;
|
|
5
|
+
const fa = fileAnalyses.find(f => f.file === tp.sink.file);
|
|
6
|
+
if (!fa)
|
|
7
|
+
continue;
|
|
8
|
+
const flows = fa.analysis.taint.flows ?? [];
|
|
9
|
+
const exists = flows.some(f => f.sink_line === tp.sink.line
|
|
10
|
+
&& f.sink_type === tp.sink.type
|
|
11
|
+
&& f.source_line === tp.source.line
|
|
12
|
+
&& f.source_type === tp.source.type);
|
|
13
|
+
if (exists)
|
|
14
|
+
continue;
|
|
15
|
+
const path = tp.hops.map((h, i) => ({
|
|
16
|
+
variable: h.variable,
|
|
17
|
+
line: h.line,
|
|
18
|
+
type: i === 0 ? 'source' : i === tp.hops.length - 1 ? 'sink' : 'use',
|
|
19
|
+
}));
|
|
20
|
+
flows.push({
|
|
21
|
+
source_line: tp.source.line,
|
|
22
|
+
sink_line: tp.sink.line,
|
|
23
|
+
source_type: tp.source.type,
|
|
24
|
+
sink_type: tp.sink.type,
|
|
25
|
+
path,
|
|
26
|
+
confidence: tp.confidence,
|
|
27
|
+
sanitized: false,
|
|
28
|
+
});
|
|
29
|
+
fa.analysis.taint.flows = flows;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=promote-cross-file-flows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promote-cross-file-flows.js","sourceRoot":"","sources":["../../src/analysis/promote-cross-file-flows.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,gCAAgC,CAC9C,YAAyB,EACzB,UAAuB;IAEvB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI;YAAE,SAAS;QAEjE,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,EAAE;YAAE,SAAS;QAElB,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,CACF,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI;eACzB,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI;eAC5B,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI;eAChC,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CACtC,CAAC;QACF,IAAI,MAAM;YAAE,SAAS;QAErB,MAAM,IAAI,GAAoB,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACnD,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;SACrE,CAAC,CAAC,CAAC;QAEJ,KAAK,CAAC,IAAI,CAAC;YACT,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI;YAC3B,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI;YACvB,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI;YAC3B,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI;YACvB,IAAI;YACJ,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QACH,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IAClC,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rust-literal-guard.d.ts","sourceRoot":"","sources":["../../src/analysis/rust-literal-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"rust-literal-guard.d.ts","sourceRoot":"","sources":["../../src/analysis/rust-literal-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAqPxD,wBAAgB,sCAAsC,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,CA2HrF"}
|
|
@@ -179,6 +179,105 @@ function passesMutParam(line, n) {
|
|
|
179
179
|
// Exclude method calls on name itself (`name.foo(`), handled by firstRebind.
|
|
180
180
|
return !new RegExp(String.raw `\b${n}\s*\.\s*\w+\s*\(`).test(line) || new RegExp(String.raw `(?<![\w.])\w+\s*\(\s*${n}\b`).test(line);
|
|
181
181
|
}
|
|
182
|
+
/** `let bound = if <allowlist contains var> { var } else { <literal-only> };` */
|
|
183
|
+
function findRustAllowlistTernarySanitizers(code) {
|
|
184
|
+
const masked = maskRust(code);
|
|
185
|
+
const origLines = code.split('\n');
|
|
186
|
+
const maskedLines = masked.split('\n');
|
|
187
|
+
const out = [];
|
|
188
|
+
const allowlistVar = (cond) => {
|
|
189
|
+
const c = cond.trim();
|
|
190
|
+
let m = new RegExp(String.raw `^!?(\w+)\s*\.\s*contains\s*\(\s*&\s*(\w+)(?:\s*\.\s*as_str\s*\(\s*\))?\s*\)$`).exec(c);
|
|
191
|
+
if (m)
|
|
192
|
+
return m[2];
|
|
193
|
+
if ((m = new RegExp(String.raw `^!\s*\[\s*${STR}(?:\s*,\s*${STR})*\s*,?\s*\]\s*\.\s*contains\s*\(\s*&\s*${VAR}\s*\)$`).exec(c))) {
|
|
194
|
+
return m[1];
|
|
195
|
+
}
|
|
196
|
+
return guardedVariable(c);
|
|
197
|
+
};
|
|
198
|
+
const LITERAL_CHAIN = new Set(['to_string', 'into', 'to_owned', 'clone']);
|
|
199
|
+
const literalOnly = (block) => {
|
|
200
|
+
const maskedB = maskRust(block.trim());
|
|
201
|
+
if (!maskedB.trim())
|
|
202
|
+
return false;
|
|
203
|
+
const re = /[A-Za-z_]\w*/g;
|
|
204
|
+
let m;
|
|
205
|
+
while ((m = re.exec(maskedB)) !== null) {
|
|
206
|
+
const id = m[0];
|
|
207
|
+
if (KEYWORDS.has(id) || /[A-Z]/.test(id[0]) || LITERAL_CHAIN.has(id))
|
|
208
|
+
continue;
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
return true;
|
|
212
|
+
};
|
|
213
|
+
const usesOnlyVar = (block, name) => {
|
|
214
|
+
const b = block.trim();
|
|
215
|
+
if (!b)
|
|
216
|
+
return false;
|
|
217
|
+
const maskedB = maskRust(b);
|
|
218
|
+
const re = new RegExp(String.raw `(?<![\w.])${name}\b`);
|
|
219
|
+
if (!re.test(maskedB))
|
|
220
|
+
return false;
|
|
221
|
+
return !readsOtherValue(b, maskedB, name);
|
|
222
|
+
};
|
|
223
|
+
for (const m of masked.matchAll(/\blet\s+(\w+)\s*=\s*if\b/g)) {
|
|
224
|
+
const bound = m[1];
|
|
225
|
+
const at = m.index + m[0].length - 2;
|
|
226
|
+
let depth = 0;
|
|
227
|
+
let open = -1;
|
|
228
|
+
for (let i = at + 2; i < masked.length; i++) {
|
|
229
|
+
const ch = masked[i];
|
|
230
|
+
if (ch === '(' || ch === '[')
|
|
231
|
+
depth++;
|
|
232
|
+
else if (ch === ')' || ch === ']')
|
|
233
|
+
depth--;
|
|
234
|
+
else if (ch === '{' && depth === 0) {
|
|
235
|
+
open = i;
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
else if (ch === ';' || ch === '}')
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
if (open < 0)
|
|
242
|
+
continue;
|
|
243
|
+
const cond = code.slice(at + 2, open).trim();
|
|
244
|
+
const guarded = allowlistVar(cond);
|
|
245
|
+
if (!guarded)
|
|
246
|
+
continue;
|
|
247
|
+
const thenClose = matchBrace(masked, open);
|
|
248
|
+
if (thenClose < 0)
|
|
249
|
+
continue;
|
|
250
|
+
const thenBody = code.slice(open + 1, thenClose);
|
|
251
|
+
if (!/^\s*else\b/.test(masked.slice(thenClose + 1, thenClose + 10)))
|
|
252
|
+
continue;
|
|
253
|
+
const elseOpen = masked.indexOf('{', thenClose + 1);
|
|
254
|
+
if (elseOpen < 0)
|
|
255
|
+
continue;
|
|
256
|
+
const elseClose = matchBrace(masked, elseOpen);
|
|
257
|
+
if (elseClose < 0)
|
|
258
|
+
continue;
|
|
259
|
+
const elseBody = code.slice(elseOpen + 1, elseClose);
|
|
260
|
+
const inverted = /^\s*!/.test(cond);
|
|
261
|
+
const ok = inverted
|
|
262
|
+
? literalOnly(thenBody) && usesOnlyVar(elseBody, guarded)
|
|
263
|
+
: usesOnlyVar(thenBody, guarded) && literalOnly(elseBody);
|
|
264
|
+
if (!ok)
|
|
265
|
+
continue;
|
|
266
|
+
const assignLine = masked.slice(0, at).split('\n').length;
|
|
267
|
+
const mention = new RegExp(String.raw `(?<![\w.])${bound}\b`);
|
|
268
|
+
for (let l = assignLine; l < origLines.length; l++) {
|
|
269
|
+
if (!mention.test(maskedLines[l]))
|
|
270
|
+
continue;
|
|
271
|
+
out.push({
|
|
272
|
+
type: 'rust_allowlist_ternary',
|
|
273
|
+
method: 'guard',
|
|
274
|
+
line: l + 1,
|
|
275
|
+
sanitizes: CREDITED_TYPES,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return out;
|
|
280
|
+
}
|
|
182
281
|
export function findRustLiteralEqualityGuardSanitizers(code) {
|
|
183
282
|
const masked = maskRust(code);
|
|
184
283
|
const origLines = code.split('\n');
|
|
@@ -341,7 +440,7 @@ export function findRustLiteralEqualityGuardSanitizers(code) {
|
|
|
341
440
|
});
|
|
342
441
|
}
|
|
343
442
|
}
|
|
344
|
-
return out;
|
|
443
|
+
return [...out, ...findRustAllowlistTernarySanitizers(code)];
|
|
345
444
|
}
|
|
346
445
|
/**
|
|
347
446
|
* Exact text of the statement that contains `lineStart` (absolute index),
|