@clear-capabilities/agentic-security-scanner 0.78.0 → 0.80.0
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/bin/.agentic-security/findings.json +16 -16
- package/bin/.agentic-security/last-scan.json +16 -16
- package/bin/.agentic-security/last-scan.json.sig +1 -1
- package/bin/.agentic-security/scan-history.json +51 -0
- package/bin/.agentic-security/streak.json +5 -5
- package/bin/agentic-security.js +22 -7
- package/dist/178.index.js +1 -1
- package/dist/333.index.js +283 -0
- package/dist/384.index.js +1 -1
- package/dist/476.index.js +5 -5
- package/dist/637.index.js +1 -1
- package/dist/700.index.js +138 -0
- package/dist/718.index.js +53 -0
- package/dist/838.index.js +1 -1
- package/dist/985.index.js +95 -1
- package/dist/agentic-security.mjs +83 -83
- package/dist/agentic-security.mjs.sha256 +1 -1
- package/package.json +6 -4
- package/src/.agentic-security/findings.json +29799 -7803
- package/src/.agentic-security/last-scan.json +29799 -7803
- package/src/.agentic-security/last-scan.json.sig +1 -1
- package/src/.agentic-security/scan-history.json +5119 -2611
- package/src/.agentic-security/streak.json +6 -6
- package/src/dataflow/.agentic-security/findings.json +2879 -308
- package/src/dataflow/.agentic-security/last-scan.json +2879 -308
- package/src/dataflow/.agentic-security/last-scan.json.sig +1 -1
- package/src/dataflow/.agentic-security/scan-history.json +68 -520
- package/src/dataflow/.agentic-security/streak.json +6 -7
- package/src/dataflow/cross-service-taint.js +201 -0
- package/src/dataflow/engine.js +52 -8
- package/src/dataflow/formal-verify.js +204 -0
- package/src/dataflow/ifds-precise.js +222 -0
- package/src/dataflow/k2-summary-cache.js +153 -0
- package/src/dataflow/lib-taint-summaries.js +198 -0
- package/src/dataflow/privacy-taint.js +205 -0
- package/src/dataflow/smt-feasibility.js +189 -0
- package/src/engine.js +890 -132
- package/src/integrations/index.js +2 -1
- package/src/ir/.agentic-security/findings.json +240 -6
- package/src/ir/.agentic-security/last-scan.json +240 -6
- package/src/ir/.agentic-security/last-scan.json.sig +1 -1
- package/src/ir/.agentic-security/scan-history.json +16 -594
- package/src/ir/.agentic-security/streak.json +8 -9
- package/src/ir/callgraph.js +27 -7
- package/src/ir/cpp-preprocessor.js +142 -0
- package/src/ir/csharp-ir.js +604 -0
- package/src/ir/universal-ir.js +403 -0
- package/src/llm-validator/index.js +7 -5
- package/src/mcp/.agentic-security/findings.json +8632 -0
- package/src/mcp/.agentic-security/last-scan.json +8632 -0
- package/src/mcp/.agentic-security/last-scan.json.sig +1 -0
- package/src/mcp/.agentic-security/scan-history.json +143 -0
- package/src/mcp/.agentic-security/streak.json +20 -0
- package/src/mcp/audit.js +5 -0
- package/src/mcp/tools.js +90 -1
- package/src/posture/.agentic-security/findings.json +16809 -4367
- package/src/posture/.agentic-security/last-scan.json +16809 -4367
- package/src/posture/.agentic-security/last-scan.json.sig +1 -1
- package/src/posture/.agentic-security/scan-history.json +6689 -177
- package/src/posture/.agentic-security/streak.json +8 -7
- package/src/posture/api-contract.js +193 -0
- package/src/posture/attack-taxonomy.js +227 -0
- package/src/posture/calibration-drift.js +2 -1
- package/src/posture/calibration.js +3 -2
- package/src/posture/compliance-policy.js +218 -0
- package/src/posture/composite-risk.js +122 -0
- package/src/posture/csharp-analysis.js +330 -0
- package/src/posture/exploit-bundle.js +210 -0
- package/src/posture/federated-learning.js +172 -0
- package/src/posture/fix-history.js +8 -2
- package/src/posture/license-attributions.js +94 -0
- package/src/posture/license-graph.js +238 -0
- package/src/posture/pqc-migration-plan.js +158 -0
- package/src/posture/profile.js +4 -5
- package/src/posture/reachability-filter.js +33 -2
- package/src/posture/realtime-cve-monitor.js +214 -0
- package/src/posture/rule-overrides.js +2 -3
- package/src/posture/rule-pack-signing.js +2 -3
- package/src/posture/rule-synthesis.js +5 -6
- package/src/posture/runtime-correlation.js +174 -0
- package/src/posture/sbom-diff.js +171 -0
- package/src/posture/sca-policy.js +235 -0
- package/src/posture/sca-upgrade.js +259 -0
- package/src/posture/security-trend.js +4 -7
- package/src/posture/state-dir.js +124 -0
- package/src/posture/streak.js +3 -0
- package/src/posture/suppressions.js +5 -8
- package/src/posture/threat-model-auto.js +268 -0
- package/src/posture/triage-learning.js +170 -0
- package/src/posture/triage.js +29 -6
- package/src/posture/validator-metrics.js +3 -6
- package/src/sast/.agentic-security/findings.json +996 -32
- package/src/sast/.agentic-security/last-scan.json +996 -32
- package/src/sast/.agentic-security/last-scan.json.sig +1 -1
- package/src/sast/.agentic-security/scan-history.json +565 -32
- package/src/sast/.agentic-security/streak.json +10 -8
- package/src/sast/_secret-entropy.js +145 -0
- package/src/sast/cloud-iam.js +312 -0
- package/src/sast/cpp.js +138 -4
- package/src/sast/crypto-protocol.js +388 -0
- package/src/sast/csharp-tokenizer.js +392 -0
- package/src/sast/csharp.js +924 -138
- package/src/sast/dapp-frontend.js +200 -0
- package/src/sast/db-taint.js +24 -0
- package/src/sast/k8s-admission.js +271 -0
- package/src/sast/llm-app.js +272 -0
- package/src/sast/ml-supply-chain.js +259 -0
- package/src/sast/mobile.js +224 -0
- package/src/sast/post-quantum-crypto.js +348 -0
- package/src/sast/rust.js +26 -0
- package/src/sast/web3-advanced.js +375 -0
- package/src/sca/.agentic-security/findings.json +6044 -171
- package/src/sca/.agentic-security/last-scan.json +6044 -171
- package/src/sca/.agentic-security/last-scan.json.sig +1 -1
- package/src/sca/.agentic-security/scan-history.json +83 -6
- package/src/sca/.agentic-security/streak.json +9 -9
- package/src/sca/CLAUDE.md +161 -0
- package/src/sca/binary-metadata.js +146 -0
- package/src/sca/py-package-functions.js +118 -0
- package/src/sca/sigstore-verify.js +215 -0
- package/src/sca/vendor-detect.js +53 -0
- package/src/report/.agentic-security/findings.json +0 -80
- package/src/report/.agentic-security/last-scan.json +0 -80
- package/src/report/.agentic-security/last-scan.json.sig +0 -1
- package/src/report/.agentic-security/scan-history.json +0 -35
- package/src/report/.agentic-security/streak.json +0 -22
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
{
|
|
2
|
-
"scanId": "
|
|
3
|
-
"startedAt": "2026-05-
|
|
4
|
-
"durationMs":
|
|
2
|
+
"scanId": "dc3e8445-37ee-4ae3-bec0-5ce8794347c4",
|
|
3
|
+
"startedAt": "2026-05-29T06:49:35.694Z",
|
|
4
|
+
"durationMs": 593,
|
|
5
5
|
"scanned": {
|
|
6
|
-
"files":
|
|
6
|
+
"files": 35,
|
|
7
7
|
"lines": 0
|
|
8
8
|
},
|
|
9
9
|
"findings": [
|
|
10
10
|
{
|
|
11
|
-
"id": "struct:
|
|
11
|
+
"id": "struct:cross-service-taint.js:53:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
12
12
|
"kind": "sast",
|
|
13
13
|
"severity": "medium",
|
|
14
14
|
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
15
15
|
"cwe": "CWE-400",
|
|
16
16
|
"owaspLlm": null,
|
|
17
17
|
"stride": "Denial of Service",
|
|
18
|
-
"file": "
|
|
19
|
-
"line":
|
|
20
|
-
"snippet": "if (!fs.existsSync(
|
|
18
|
+
"file": "cross-service-taint.js",
|
|
19
|
+
"line": 53,
|
|
20
|
+
"snippet": "if (!fs.existsSync(fp)) continue;",
|
|
21
21
|
"fix": null,
|
|
22
22
|
"reachable": false,
|
|
23
23
|
"triage": 22,
|
|
@@ -99,9 +99,9 @@
|
|
|
99
99
|
"dominantDriver": "legal counsel",
|
|
100
100
|
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
101
101
|
"confidence": "low",
|
|
102
|
-
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `
|
|
102
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `cross-service-taint.js:53` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
103
103
|
},
|
|
104
|
-
"stableId": "
|
|
104
|
+
"stableId": "e7d9ad9a119f1e24",
|
|
105
105
|
"confidenceTier": "very-low",
|
|
106
106
|
"exploitability": 0.2,
|
|
107
107
|
"exploitabilityTier": "low",
|
|
@@ -149,10 +149,10 @@
|
|
|
149
149
|
"crownJewelScore": 0,
|
|
150
150
|
"crownJewelTier": "unknown",
|
|
151
151
|
"crownJewelFactors": [],
|
|
152
|
-
"cloneClusterId": "
|
|
152
|
+
"cloneClusterId": "eed315f4ee037434",
|
|
153
153
|
"cloneClusterSize": 2,
|
|
154
|
-
"provenance": "
|
|
155
|
-
"provenanceScore": 0.
|
|
154
|
+
"provenance": "mixed",
|
|
155
|
+
"provenanceScore": 0.3,
|
|
156
156
|
"typeNarrowed": null,
|
|
157
157
|
"strideCategory": "denialOfService",
|
|
158
158
|
"personaScores": {
|
|
@@ -205,8 +205,8 @@
|
|
|
205
205
|
"ruleId": "CWE-400",
|
|
206
206
|
"parser": "STRUCTURAL",
|
|
207
207
|
"evidence": {
|
|
208
|
-
"sinkSnippet": "if (!fs.existsSync(
|
|
209
|
-
"sourceSnippet": "if (!fs.existsSync(
|
|
208
|
+
"sinkSnippet": "if (!fs.existsSync(fp)) continue;",
|
|
209
|
+
"sourceSnippet": "if (!fs.existsSync(fp)) continue;",
|
|
210
210
|
"pathSteps": [],
|
|
211
211
|
"sanitizers": [],
|
|
212
212
|
"guards": []
|
|
@@ -237,16 +237,16 @@
|
|
|
237
237
|
"attackPlaybook": null
|
|
238
238
|
},
|
|
239
239
|
{
|
|
240
|
-
"id": "struct:
|
|
240
|
+
"id": "struct:cross-service-taint.js:55:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
241
241
|
"kind": "sast",
|
|
242
242
|
"severity": "medium",
|
|
243
243
|
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
244
244
|
"cwe": "CWE-400",
|
|
245
245
|
"owaspLlm": null,
|
|
246
246
|
"stride": "Denial of Service",
|
|
247
|
-
"file": "
|
|
248
|
-
"line":
|
|
249
|
-
"snippet": "const
|
|
247
|
+
"file": "cross-service-taint.js",
|
|
248
|
+
"line": 55,
|
|
249
|
+
"snippet": "const raw = fs.readFileSync(fp, 'utf8');",
|
|
250
250
|
"fix": null,
|
|
251
251
|
"reachable": false,
|
|
252
252
|
"triage": 22,
|
|
@@ -328,9 +328,9 @@
|
|
|
328
328
|
"dominantDriver": "legal counsel",
|
|
329
329
|
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
330
330
|
"confidence": "low",
|
|
331
|
-
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `
|
|
331
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `cross-service-taint.js:55` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
332
332
|
},
|
|
333
|
-
"stableId": "
|
|
333
|
+
"stableId": "1c66011582a1e4e0",
|
|
334
334
|
"confidenceTier": "very-low",
|
|
335
335
|
"exploitability": 0.2,
|
|
336
336
|
"exploitabilityTier": "low",
|
|
@@ -378,10 +378,10 @@
|
|
|
378
378
|
"crownJewelScore": 0,
|
|
379
379
|
"crownJewelTier": "unknown",
|
|
380
380
|
"crownJewelFactors": [],
|
|
381
|
-
"cloneClusterId": "
|
|
381
|
+
"cloneClusterId": "cea363ef8f00c66a",
|
|
382
382
|
"cloneClusterSize": 1,
|
|
383
|
-
"provenance": "
|
|
384
|
-
"provenanceScore": 0.
|
|
383
|
+
"provenance": "mixed",
|
|
384
|
+
"provenanceScore": 0.3,
|
|
385
385
|
"typeNarrowed": null,
|
|
386
386
|
"strideCategory": "denialOfService",
|
|
387
387
|
"personaScores": {
|
|
@@ -434,8 +434,8 @@
|
|
|
434
434
|
"ruleId": "CWE-400",
|
|
435
435
|
"parser": "STRUCTURAL",
|
|
436
436
|
"evidence": {
|
|
437
|
-
"sinkSnippet": "const
|
|
438
|
-
"sourceSnippet": "const
|
|
437
|
+
"sinkSnippet": "const raw = fs.readFileSync(fp, 'utf8');",
|
|
438
|
+
"sourceSnippet": "const raw = fs.readFileSync(fp, 'utf8');",
|
|
439
439
|
"pathSteps": [],
|
|
440
440
|
"sanitizers": [],
|
|
441
441
|
"guards": []
|
|
@@ -466,16 +466,16 @@
|
|
|
466
466
|
"attackPlaybook": null
|
|
467
467
|
},
|
|
468
468
|
{
|
|
469
|
-
"id": "struct:
|
|
469
|
+
"id": "struct:cross-service-taint.js:97:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
470
470
|
"kind": "sast",
|
|
471
471
|
"severity": "medium",
|
|
472
472
|
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
473
473
|
"cwe": "CWE-400",
|
|
474
474
|
"owaspLlm": null,
|
|
475
475
|
"stride": "Denial of Service",
|
|
476
|
-
"file": "
|
|
477
|
-
"line":
|
|
478
|
-
"snippet": "if (
|
|
476
|
+
"file": "cross-service-taint.js",
|
|
477
|
+
"line": 97,
|
|
478
|
+
"snippet": "if (fs.existsSync(pkg)) {",
|
|
479
479
|
"fix": null,
|
|
480
480
|
"reachable": false,
|
|
481
481
|
"triage": 22,
|
|
@@ -557,9 +557,9 @@
|
|
|
557
557
|
"dominantDriver": "legal counsel",
|
|
558
558
|
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
559
559
|
"confidence": "low",
|
|
560
|
-
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `
|
|
560
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `cross-service-taint.js:97` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
561
561
|
},
|
|
562
|
-
"stableId": "
|
|
562
|
+
"stableId": "de94397ba2f53ab7",
|
|
563
563
|
"confidenceTier": "very-low",
|
|
564
564
|
"exploitability": 0.2,
|
|
565
565
|
"exploitabilityTier": "low",
|
|
@@ -607,10 +607,10 @@
|
|
|
607
607
|
"crownJewelScore": 0,
|
|
608
608
|
"crownJewelTier": "unknown",
|
|
609
609
|
"crownJewelFactors": [],
|
|
610
|
-
"cloneClusterId": "
|
|
610
|
+
"cloneClusterId": "31e29761689a4980",
|
|
611
611
|
"cloneClusterSize": 2,
|
|
612
|
-
"provenance": "
|
|
613
|
-
"provenanceScore": 0.
|
|
612
|
+
"provenance": "mixed",
|
|
613
|
+
"provenanceScore": 0.3,
|
|
614
614
|
"typeNarrowed": null,
|
|
615
615
|
"strideCategory": "denialOfService",
|
|
616
616
|
"personaScores": {
|
|
@@ -663,8 +663,8 @@
|
|
|
663
663
|
"ruleId": "CWE-400",
|
|
664
664
|
"parser": "STRUCTURAL",
|
|
665
665
|
"evidence": {
|
|
666
|
-
"sinkSnippet": "if (
|
|
667
|
-
"sourceSnippet": "if (
|
|
666
|
+
"sinkSnippet": "if (fs.existsSync(pkg)) {",
|
|
667
|
+
"sourceSnippet": "if (fs.existsSync(pkg)) {",
|
|
668
668
|
"pathSteps": [],
|
|
669
669
|
"sanitizers": [],
|
|
670
670
|
"guards": []
|
|
@@ -695,16 +695,16 @@
|
|
|
695
695
|
"attackPlaybook": null
|
|
696
696
|
},
|
|
697
697
|
{
|
|
698
|
-
"id": "struct:
|
|
698
|
+
"id": "struct:cross-service-taint.js:98:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
699
699
|
"kind": "sast",
|
|
700
700
|
"severity": "medium",
|
|
701
701
|
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
702
702
|
"cwe": "CWE-400",
|
|
703
703
|
"owaspLlm": null,
|
|
704
704
|
"stride": "Denial of Service",
|
|
705
|
-
"file": "
|
|
706
|
-
"line":
|
|
707
|
-
"snippet": "
|
|
705
|
+
"file": "cross-service-taint.js",
|
|
706
|
+
"line": 98,
|
|
707
|
+
"snippet": "const j = JSON.parse(fs.readFileSync(pkg, 'utf8'));",
|
|
708
708
|
"fix": null,
|
|
709
709
|
"reachable": false,
|
|
710
710
|
"triage": 22,
|
|
@@ -786,9 +786,9 @@
|
|
|
786
786
|
"dominantDriver": "legal counsel",
|
|
787
787
|
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
788
788
|
"confidence": "low",
|
|
789
|
-
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `
|
|
789
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `cross-service-taint.js:98` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
790
790
|
},
|
|
791
|
-
"stableId": "
|
|
791
|
+
"stableId": "99571f0208301347",
|
|
792
792
|
"confidenceTier": "very-low",
|
|
793
793
|
"exploitability": 0.2,
|
|
794
794
|
"exploitabilityTier": "low",
|
|
@@ -836,10 +836,10 @@
|
|
|
836
836
|
"crownJewelScore": 0,
|
|
837
837
|
"crownJewelTier": "unknown",
|
|
838
838
|
"crownJewelFactors": [],
|
|
839
|
-
"cloneClusterId": "
|
|
840
|
-
"cloneClusterSize":
|
|
841
|
-
"provenance": "
|
|
842
|
-
"provenanceScore": 0.
|
|
839
|
+
"cloneClusterId": "8b60c3f57d48c622",
|
|
840
|
+
"cloneClusterSize": 3,
|
|
841
|
+
"provenance": "mixed",
|
|
842
|
+
"provenanceScore": 0.3,
|
|
843
843
|
"typeNarrowed": null,
|
|
844
844
|
"strideCategory": "denialOfService",
|
|
845
845
|
"personaScores": {
|
|
@@ -892,8 +892,8 @@
|
|
|
892
892
|
"ruleId": "CWE-400",
|
|
893
893
|
"parser": "STRUCTURAL",
|
|
894
894
|
"evidence": {
|
|
895
|
-
"sinkSnippet": "
|
|
896
|
-
"sourceSnippet": "
|
|
895
|
+
"sinkSnippet": "const j = JSON.parse(fs.readFileSync(pkg, 'utf8'));",
|
|
896
|
+
"sourceSnippet": "const j = JSON.parse(fs.readFileSync(pkg, 'utf8'));",
|
|
897
897
|
"pathSteps": [],
|
|
898
898
|
"sanitizers": [],
|
|
899
899
|
"guards": []
|
|
@@ -924,16 +924,16 @@
|
|
|
924
924
|
"attackPlaybook": null
|
|
925
925
|
},
|
|
926
926
|
{
|
|
927
|
-
"id": "struct:
|
|
927
|
+
"id": "struct:ifds-precise.js:177:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
928
928
|
"kind": "sast",
|
|
929
929
|
"severity": "medium",
|
|
930
930
|
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
931
931
|
"cwe": "CWE-400",
|
|
932
932
|
"owaspLlm": null,
|
|
933
933
|
"stride": "Denial of Service",
|
|
934
|
-
"file": "
|
|
935
|
-
"line":
|
|
936
|
-
"snippet": "fs.
|
|
934
|
+
"file": "ifds-precise.js",
|
|
935
|
+
"line": 177,
|
|
936
|
+
"snippet": "if (!fs.existsSync(fp)) return null;",
|
|
937
937
|
"fix": null,
|
|
938
938
|
"reachable": false,
|
|
939
939
|
"triage": 22,
|
|
@@ -1015,9 +1015,9 @@
|
|
|
1015
1015
|
"dominantDriver": "legal counsel",
|
|
1016
1016
|
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
1017
1017
|
"confidence": "low",
|
|
1018
|
-
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `
|
|
1018
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `ifds-precise.js:177` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
1019
1019
|
},
|
|
1020
|
-
"stableId": "
|
|
1020
|
+
"stableId": "c6dc986380dccb74",
|
|
1021
1021
|
"confidenceTier": "very-low",
|
|
1022
1022
|
"exploitability": 0.2,
|
|
1023
1023
|
"exploitabilityTier": "low",
|
|
@@ -1065,10 +1065,10 @@
|
|
|
1065
1065
|
"crownJewelScore": 0,
|
|
1066
1066
|
"crownJewelTier": "unknown",
|
|
1067
1067
|
"crownJewelFactors": [],
|
|
1068
|
-
"cloneClusterId": "
|
|
1069
|
-
"cloneClusterSize":
|
|
1070
|
-
"provenance": "
|
|
1071
|
-
"provenanceScore": 0.
|
|
1068
|
+
"cloneClusterId": "66b8a8c25816e7f9",
|
|
1069
|
+
"cloneClusterSize": 2,
|
|
1070
|
+
"provenance": "mixed",
|
|
1071
|
+
"provenanceScore": 0.32,
|
|
1072
1072
|
"typeNarrowed": null,
|
|
1073
1073
|
"strideCategory": "denialOfService",
|
|
1074
1074
|
"personaScores": {
|
|
@@ -1121,8 +1121,8 @@
|
|
|
1121
1121
|
"ruleId": "CWE-400",
|
|
1122
1122
|
"parser": "STRUCTURAL",
|
|
1123
1123
|
"evidence": {
|
|
1124
|
-
"sinkSnippet": "fs.
|
|
1125
|
-
"sourceSnippet": "fs.
|
|
1124
|
+
"sinkSnippet": "if (!fs.existsSync(fp)) return null;",
|
|
1125
|
+
"sourceSnippet": "if (!fs.existsSync(fp)) return null;",
|
|
1126
1126
|
"pathSteps": [],
|
|
1127
1127
|
"sanitizers": [],
|
|
1128
1128
|
"guards": []
|
|
@@ -1153,16 +1153,16 @@
|
|
|
1153
1153
|
"attackPlaybook": null
|
|
1154
1154
|
},
|
|
1155
1155
|
{
|
|
1156
|
-
"id": "struct:
|
|
1156
|
+
"id": "struct:ifds-precise.js:179:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
1157
1157
|
"kind": "sast",
|
|
1158
1158
|
"severity": "medium",
|
|
1159
1159
|
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
1160
1160
|
"cwe": "CWE-400",
|
|
1161
1161
|
"owaspLlm": null,
|
|
1162
1162
|
"stride": "Denial of Service",
|
|
1163
|
-
"file": "
|
|
1164
|
-
"line":
|
|
1165
|
-
"snippet": "
|
|
1163
|
+
"file": "ifds-precise.js",
|
|
1164
|
+
"line": 179,
|
|
1165
|
+
"snippet": "const raw = JSON.parse(fs.readFileSync(fp, 'utf8'));",
|
|
1166
1166
|
"fix": null,
|
|
1167
1167
|
"reachable": false,
|
|
1168
1168
|
"triage": 22,
|
|
@@ -1244,9 +1244,9 @@
|
|
|
1244
1244
|
"dominantDriver": "legal counsel",
|
|
1245
1245
|
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
1246
1246
|
"confidence": "low",
|
|
1247
|
-
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `
|
|
1247
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `ifds-precise.js:179` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
1248
1248
|
},
|
|
1249
|
-
"stableId": "
|
|
1249
|
+
"stableId": "4134d6705892e7a1",
|
|
1250
1250
|
"confidenceTier": "very-low",
|
|
1251
1251
|
"exploitability": 0.2,
|
|
1252
1252
|
"exploitabilityTier": "low",
|
|
@@ -1294,10 +1294,10 @@
|
|
|
1294
1294
|
"crownJewelScore": 0,
|
|
1295
1295
|
"crownJewelTier": "unknown",
|
|
1296
1296
|
"crownJewelFactors": [],
|
|
1297
|
-
"cloneClusterId": "
|
|
1298
|
-
"cloneClusterSize":
|
|
1299
|
-
"provenance": "
|
|
1300
|
-
"provenanceScore": 0.
|
|
1297
|
+
"cloneClusterId": "8b60c3f57d48c622",
|
|
1298
|
+
"cloneClusterSize": 3,
|
|
1299
|
+
"provenance": "mixed",
|
|
1300
|
+
"provenanceScore": 0.32,
|
|
1301
1301
|
"typeNarrowed": null,
|
|
1302
1302
|
"strideCategory": "denialOfService",
|
|
1303
1303
|
"personaScores": {
|
|
@@ -1350,8 +1350,8 @@
|
|
|
1350
1350
|
"ruleId": "CWE-400",
|
|
1351
1351
|
"parser": "STRUCTURAL",
|
|
1352
1352
|
"evidence": {
|
|
1353
|
-
"sinkSnippet": "
|
|
1354
|
-
"sourceSnippet": "
|
|
1353
|
+
"sinkSnippet": "const raw = JSON.parse(fs.readFileSync(fp, 'utf8'));",
|
|
1354
|
+
"sourceSnippet": "const raw = JSON.parse(fs.readFileSync(fp, 'utf8'));",
|
|
1355
1355
|
"pathSteps": [],
|
|
1356
1356
|
"sanitizers": [],
|
|
1357
1357
|
"guards": []
|
|
@@ -1382,16 +1382,16 @@
|
|
|
1382
1382
|
"attackPlaybook": null
|
|
1383
1383
|
},
|
|
1384
1384
|
{
|
|
1385
|
-
"id": "struct:
|
|
1385
|
+
"id": "struct:ifds-precise.js:206:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
1386
1386
|
"kind": "sast",
|
|
1387
1387
|
"severity": "medium",
|
|
1388
1388
|
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
1389
1389
|
"cwe": "CWE-400",
|
|
1390
1390
|
"owaspLlm": null,
|
|
1391
1391
|
"stride": "Denial of Service",
|
|
1392
|
-
"file": "
|
|
1393
|
-
"line":
|
|
1394
|
-
"snippet": "fs.writeFileSync(
|
|
1392
|
+
"file": "ifds-precise.js",
|
|
1393
|
+
"line": 206,
|
|
1394
|
+
"snippet": "try { fs.writeFileSync(_cachePath(scanRoot), JSON.stringify(out, null, 2)); }",
|
|
1395
1395
|
"fix": null,
|
|
1396
1396
|
"reachable": false,
|
|
1397
1397
|
"triage": 22,
|
|
@@ -1473,9 +1473,9 @@
|
|
|
1473
1473
|
"dominantDriver": "legal counsel",
|
|
1474
1474
|
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
1475
1475
|
"confidence": "low",
|
|
1476
|
-
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `
|
|
1476
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `ifds-precise.js:206` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
1477
1477
|
},
|
|
1478
|
-
"stableId": "
|
|
1478
|
+
"stableId": "e415f8ddbefa0072",
|
|
1479
1479
|
"confidenceTier": "very-low",
|
|
1480
1480
|
"exploitability": 0.2,
|
|
1481
1481
|
"exploitabilityTier": "low",
|
|
@@ -1523,10 +1523,10 @@
|
|
|
1523
1523
|
"crownJewelScore": 0,
|
|
1524
1524
|
"crownJewelTier": "unknown",
|
|
1525
1525
|
"crownJewelFactors": [],
|
|
1526
|
-
"cloneClusterId": "
|
|
1526
|
+
"cloneClusterId": "3115ba55e9c87bc7",
|
|
1527
1527
|
"cloneClusterSize": 1,
|
|
1528
|
-
"provenance": "
|
|
1529
|
-
"provenanceScore": 0.
|
|
1528
|
+
"provenance": "mixed",
|
|
1529
|
+
"provenanceScore": 0.32,
|
|
1530
1530
|
"typeNarrowed": null,
|
|
1531
1531
|
"strideCategory": "denialOfService",
|
|
1532
1532
|
"personaScores": {
|
|
@@ -1579,8 +1579,8 @@
|
|
|
1579
1579
|
"ruleId": "CWE-400",
|
|
1580
1580
|
"parser": "STRUCTURAL",
|
|
1581
1581
|
"evidence": {
|
|
1582
|
-
"sinkSnippet": "fs.writeFileSync(
|
|
1583
|
-
"sourceSnippet": "fs.writeFileSync(
|
|
1582
|
+
"sinkSnippet": "try { fs.writeFileSync(_cachePath(scanRoot), JSON.stringify(out, null, 2)); }",
|
|
1583
|
+
"sourceSnippet": "try { fs.writeFileSync(_cachePath(scanRoot), JSON.stringify(out, null, 2)); }",
|
|
1584
1584
|
"pathSteps": [],
|
|
1585
1585
|
"sanitizers": [],
|
|
1586
1586
|
"guards": []
|
|
@@ -1611,7 +1611,7 @@
|
|
|
1611
1611
|
"attackPlaybook": null
|
|
1612
1612
|
},
|
|
1613
1613
|
{
|
|
1614
|
-
"id": "struct:incremental.js:
|
|
1614
|
+
"id": "struct:incremental.js:50:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
1615
1615
|
"kind": "sast",
|
|
1616
1616
|
"severity": "medium",
|
|
1617
1617
|
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
@@ -1619,8 +1619,8 @@
|
|
|
1619
1619
|
"owaspLlm": null,
|
|
1620
1620
|
"stride": "Denial of Service",
|
|
1621
1621
|
"file": "incremental.js",
|
|
1622
|
-
"line":
|
|
1623
|
-
"snippet": "if (!fs.existsSync(
|
|
1622
|
+
"line": 50,
|
|
1623
|
+
"snippet": "if (!fs.existsSync(versionFp)) return _emptyState();",
|
|
1624
1624
|
"fix": null,
|
|
1625
1625
|
"reachable": false,
|
|
1626
1626
|
"triage": 22,
|
|
@@ -1702,9 +1702,9 @@
|
|
|
1702
1702
|
"dominantDriver": "legal counsel",
|
|
1703
1703
|
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
1704
1704
|
"confidence": "low",
|
|
1705
|
-
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `incremental.js:
|
|
1705
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `incremental.js:50` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
1706
1706
|
},
|
|
1707
|
-
"stableId": "
|
|
1707
|
+
"stableId": "7e2db52a92ce3811",
|
|
1708
1708
|
"confidenceTier": "very-low",
|
|
1709
1709
|
"exploitability": 0.2,
|
|
1710
1710
|
"exploitabilityTier": "low",
|
|
@@ -1752,8 +1752,8 @@
|
|
|
1752
1752
|
"crownJewelScore": 0,
|
|
1753
1753
|
"crownJewelTier": "unknown",
|
|
1754
1754
|
"crownJewelFactors": [],
|
|
1755
|
-
"cloneClusterId": "
|
|
1756
|
-
"cloneClusterSize":
|
|
1755
|
+
"cloneClusterId": "bf9643a065f64945",
|
|
1756
|
+
"cloneClusterSize": 2,
|
|
1757
1757
|
"provenance": "human-likely",
|
|
1758
1758
|
"provenanceScore": 0.22,
|
|
1759
1759
|
"typeNarrowed": null,
|
|
@@ -1808,8 +1808,8 @@
|
|
|
1808
1808
|
"ruleId": "CWE-400",
|
|
1809
1809
|
"parser": "STRUCTURAL",
|
|
1810
1810
|
"evidence": {
|
|
1811
|
-
"sinkSnippet": "if (!fs.existsSync(
|
|
1812
|
-
"sourceSnippet": "if (!fs.existsSync(
|
|
1811
|
+
"sinkSnippet": "if (!fs.existsSync(versionFp)) return _emptyState();",
|
|
1812
|
+
"sourceSnippet": "if (!fs.existsSync(versionFp)) return _emptyState();",
|
|
1813
1813
|
"pathSteps": [],
|
|
1814
1814
|
"sanitizers": [],
|
|
1815
1815
|
"guards": []
|
|
@@ -1840,7 +1840,7 @@
|
|
|
1840
1840
|
"attackPlaybook": null
|
|
1841
1841
|
},
|
|
1842
1842
|
{
|
|
1843
|
-
"id": "struct:incremental.js:
|
|
1843
|
+
"id": "struct:incremental.js:51:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
1844
1844
|
"kind": "sast",
|
|
1845
1845
|
"severity": "medium",
|
|
1846
1846
|
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
@@ -1848,8 +1848,8 @@
|
|
|
1848
1848
|
"owaspLlm": null,
|
|
1849
1849
|
"stride": "Denial of Service",
|
|
1850
1850
|
"file": "incremental.js",
|
|
1851
|
-
"line":
|
|
1852
|
-
"snippet": "
|
|
1851
|
+
"line": 51,
|
|
1852
|
+
"snippet": "const v = JSON.parse(fs.readFileSync(versionFp, 'utf8'));",
|
|
1853
1853
|
"fix": null,
|
|
1854
1854
|
"reachable": false,
|
|
1855
1855
|
"triage": 22,
|
|
@@ -1931,9 +1931,9 @@
|
|
|
1931
1931
|
"dominantDriver": "legal counsel",
|
|
1932
1932
|
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
1933
1933
|
"confidence": "low",
|
|
1934
|
-
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `incremental.js:
|
|
1934
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `incremental.js:51` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
1935
1935
|
},
|
|
1936
|
-
"stableId": "
|
|
1936
|
+
"stableId": "333259288508799a",
|
|
1937
1937
|
"confidenceTier": "very-low",
|
|
1938
1938
|
"exploitability": 0.2,
|
|
1939
1939
|
"exploitabilityTier": "low",
|
|
@@ -1981,8 +1981,8 @@
|
|
|
1981
1981
|
"crownJewelScore": 0,
|
|
1982
1982
|
"crownJewelTier": "unknown",
|
|
1983
1983
|
"crownJewelFactors": [],
|
|
1984
|
-
"cloneClusterId": "
|
|
1985
|
-
"cloneClusterSize":
|
|
1984
|
+
"cloneClusterId": "8b60c3f57d48c622",
|
|
1985
|
+
"cloneClusterSize": 3,
|
|
1986
1986
|
"provenance": "human-likely",
|
|
1987
1987
|
"provenanceScore": 0.22,
|
|
1988
1988
|
"typeNarrowed": null,
|
|
@@ -2037,8 +2037,8 @@
|
|
|
2037
2037
|
"ruleId": "CWE-400",
|
|
2038
2038
|
"parser": "STRUCTURAL",
|
|
2039
2039
|
"evidence": {
|
|
2040
|
-
"sinkSnippet": "
|
|
2041
|
-
"sourceSnippet": "
|
|
2040
|
+
"sinkSnippet": "const v = JSON.parse(fs.readFileSync(versionFp, 'utf8'));",
|
|
2041
|
+
"sourceSnippet": "const v = JSON.parse(fs.readFileSync(versionFp, 'utf8'));",
|
|
2042
2042
|
"pathSteps": [],
|
|
2043
2043
|
"sanitizers": [],
|
|
2044
2044
|
"guards": []
|
|
@@ -2069,25 +2069,27 @@
|
|
|
2069
2069
|
"attackPlaybook": null
|
|
2070
2070
|
},
|
|
2071
2071
|
{
|
|
2072
|
-
"id": "
|
|
2072
|
+
"id": "struct:incremental.js:68:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
2073
2073
|
"kind": "sast",
|
|
2074
2074
|
"severity": "medium",
|
|
2075
|
-
"vuln": "
|
|
2076
|
-
"cwe": "CWE-
|
|
2075
|
+
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
2076
|
+
"cwe": "CWE-400",
|
|
2077
2077
|
"owaspLlm": null,
|
|
2078
|
-
"stride": "
|
|
2079
|
-
"file": "
|
|
2080
|
-
"line":
|
|
2081
|
-
"snippet": "
|
|
2078
|
+
"stride": "Denial of Service",
|
|
2079
|
+
"file": "incremental.js",
|
|
2080
|
+
"line": 68,
|
|
2081
|
+
"snippet": "if (!fs.existsSync(fp)) return fallback;",
|
|
2082
2082
|
"fix": null,
|
|
2083
2083
|
"reachable": false,
|
|
2084
2084
|
"triage": 22,
|
|
2085
2085
|
"dataClasses": [],
|
|
2086
2086
|
"chain": null,
|
|
2087
|
-
"confidence": 0.
|
|
2088
|
-
"toxicity":
|
|
2089
|
-
"toxicityFactors": [
|
|
2090
|
-
|
|
2087
|
+
"confidence": 0.212,
|
|
2088
|
+
"toxicity": 28,
|
|
2089
|
+
"toxicityFactors": [
|
|
2090
|
+
"http-facing"
|
|
2091
|
+
],
|
|
2092
|
+
"toxicityLabel": "Medium",
|
|
2091
2093
|
"sources": null,
|
|
2092
2094
|
"epssScore": null,
|
|
2093
2095
|
"epssPercentile": null,
|
|
@@ -2097,17 +2099,17 @@
|
|
|
2097
2099
|
"blastRadius": {
|
|
2098
2100
|
"scope": "all-users",
|
|
2099
2101
|
"dataAtRisk": [
|
|
2100
|
-
"
|
|
2102
|
+
"config"
|
|
2101
2103
|
],
|
|
2102
2104
|
"userCount": 50,
|
|
2103
2105
|
"industry": "generic",
|
|
2104
2106
|
"jurisdictions": [],
|
|
2105
2107
|
"controlsApplied": [],
|
|
2106
|
-
"dollarBest":
|
|
2107
|
-
"dollarLikely":
|
|
2108
|
-
"dollarWorst":
|
|
2109
|
-
"dollarLow":
|
|
2110
|
-
"dollarHigh":
|
|
2108
|
+
"dollarBest": 23250,
|
|
2109
|
+
"dollarLikely": 136250,
|
|
2110
|
+
"dollarWorst": 775000,
|
|
2111
|
+
"dollarLow": 23250,
|
|
2112
|
+
"dollarHigh": 775000,
|
|
2111
2113
|
"components": {
|
|
2112
2114
|
"incidentResponse": {
|
|
2113
2115
|
"low": 8000,
|
|
@@ -2140,9 +2142,9 @@
|
|
|
2140
2142
|
"high": 0
|
|
2141
2143
|
},
|
|
2142
2144
|
"directDamage": {
|
|
2143
|
-
"low":
|
|
2144
|
-
"likely":
|
|
2145
|
-
"high":
|
|
2145
|
+
"low": 250,
|
|
2146
|
+
"likely": 1250,
|
|
2147
|
+
"high": 10000
|
|
2146
2148
|
},
|
|
2147
2149
|
"classAction": {
|
|
2148
2150
|
"low": 0,
|
|
@@ -2156,12 +2158,12 @@
|
|
|
2156
2158
|
}
|
|
2157
2159
|
},
|
|
2158
2160
|
"dominantDriver": "legal counsel",
|
|
2159
|
-
"comparable": "
|
|
2161
|
+
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
2160
2162
|
"confidence": "low",
|
|
2161
|
-
"narrative": "
|
|
2163
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `incremental.js:68` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
2162
2164
|
},
|
|
2163
|
-
"stableId": "
|
|
2164
|
-
"confidenceTier": "
|
|
2165
|
+
"stableId": "6862d6baf0b923f7",
|
|
2166
|
+
"confidenceTier": "very-low",
|
|
2165
2167
|
"exploitability": 0.2,
|
|
2166
2168
|
"exploitabilityTier": "low",
|
|
2167
2169
|
"exploitabilityFactors": [
|
|
@@ -2174,35 +2176,19 @@
|
|
|
2174
2176
|
"llm_confidence": null,
|
|
2175
2177
|
"unvalidated": true,
|
|
2176
2178
|
"cross_language": false,
|
|
2177
|
-
"family": "
|
|
2178
|
-
"parser": "
|
|
2179
|
+
"family": "dos-sync-io",
|
|
2180
|
+
"parser": "STRUCTURAL",
|
|
2179
2181
|
"_unsigned": false,
|
|
2180
2182
|
"_passThroughSigning": false,
|
|
2181
2183
|
"signatureStatus": "verified",
|
|
2182
|
-
"regression_test":
|
|
2183
|
-
|
|
2184
|
-
"framework": null,
|
|
2185
|
-
"filename": null,
|
|
2186
|
-
"runHint": null,
|
|
2187
|
-
"code": null
|
|
2188
|
-
},
|
|
2189
|
-
"poc": {
|
|
2190
|
-
"lang": "node",
|
|
2191
|
-
"kind": "http-payload",
|
|
2192
|
-
"cwe": "CWE-918",
|
|
2193
|
-
"family": "ssrf",
|
|
2194
|
-
"runHint": "node poc.mjs",
|
|
2195
|
-
"code": "// Demonstrates SSRF by forcing the server to fetch a localhost sentinel URL.\n// Endpoint: POST http://localhost:3000/REPLACE-WITH-ENDPOINT\n// Payload: http://127.0.0.1:65533/poc-ssrf-sentinel\n// Expect: sentinel server logs a request from the target — proves the target made an outbound call we controlled\n// Run: node poc.mjs\n// Exit code: 0 = exploit demonstrated, 1 = not demonstrated, 2 = error\n\nconst URL_ = \"http://localhost:3000/REPLACE-WITH-ENDPOINT\";\nconst METHOD = \"POST\";\nconst PAYLOAD = `http://127.0.0.1:65533/poc-ssrf-sentinel`;\n\nconst body = METHOD === 'GET'\n ? null\n : JSON.stringify({ \"input\": PAYLOAD });\n\nconst headers = { 'Content-Type': 'application/json' };\n\nconst reqUrl = METHOD === 'GET'\n ? URL_ + (URL_.includes('?') ? '&' : '?') + \"input\" + '=' + encodeURIComponent(PAYLOAD)\n : URL_;\n\ntry {\n const r = await fetch(reqUrl, { method: METHOD, headers, body, redirect: 'follow' });\n const text = await r.text();\n const sig = (text.includes(\"http://127.0.0.1:65533/poc-ssrf-sentinel\") ? 'payload reflected' : '');\n if (sig) {\n process.stderr.write('PoC: exploit demonstrated — ' + sig + '\\n');\n process.exit(0);\n }\n process.stderr.write('PoC: payload sent (status ' + r.status + '), no exploit evidence in response\\n');\n process.exit(1);\n} catch (e) {\n process.stderr.write('PoC: error reaching target — ' + e.message + '\\n');\n process.exit(2);\n}\n",
|
|
2196
|
-
"paramKey": null,
|
|
2197
|
-
"paramKeyConfidence": "low",
|
|
2198
|
-
"paramKeyInferred": false
|
|
2199
|
-
},
|
|
2184
|
+
"regression_test": null,
|
|
2185
|
+
"poc": null,
|
|
2200
2186
|
"calibrated_confidence": null,
|
|
2201
2187
|
"calibrated_confidence_ci": null,
|
|
2202
|
-
"calibrated_n":
|
|
2203
|
-
"calibration_reason": "
|
|
2204
|
-
"verifier_verdict": "
|
|
2205
|
-
"verifier_reason": "no-sanitizer-
|
|
2188
|
+
"calibrated_n": 0,
|
|
2189
|
+
"calibration_reason": "no-history",
|
|
2190
|
+
"verifier_verdict": "cannot-verify",
|
|
2191
|
+
"verifier_reason": "no-poc-no-sanitizer-rule",
|
|
2206
2192
|
"verifier_runner": null,
|
|
2207
2193
|
"narration": null,
|
|
2208
2194
|
"mitigationVerdict": "unreachable-in-prod",
|
|
@@ -2221,17 +2207,15 @@
|
|
|
2221
2207
|
"coldPath": false,
|
|
2222
2208
|
"hotPath": false,
|
|
2223
2209
|
"prodRequestCount": null,
|
|
2224
|
-
"crownJewelScore": 0
|
|
2225
|
-
"crownJewelTier": "
|
|
2226
|
-
"crownJewelFactors": [
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
"cloneClusterId": null,
|
|
2230
|
-
"cloneClusterSize": 1,
|
|
2210
|
+
"crownJewelScore": 0,
|
|
2211
|
+
"crownJewelTier": "unknown",
|
|
2212
|
+
"crownJewelFactors": [],
|
|
2213
|
+
"cloneClusterId": "39f1d6db55cace1d",
|
|
2214
|
+
"cloneClusterSize": 2,
|
|
2231
2215
|
"provenance": "human-likely",
|
|
2232
|
-
"provenanceScore": 0.
|
|
2216
|
+
"provenanceScore": 0.22,
|
|
2233
2217
|
"typeNarrowed": null,
|
|
2234
|
-
"strideCategory": "
|
|
2218
|
+
"strideCategory": "denialOfService",
|
|
2235
2219
|
"personaScores": {
|
|
2236
2220
|
"script-kiddie": {
|
|
2237
2221
|
"score": 0.4,
|
|
@@ -2241,19 +2225,17 @@
|
|
|
2241
2225
|
]
|
|
2242
2226
|
},
|
|
2243
2227
|
"opportunistic-criminal": {
|
|
2244
|
-
"score": 0.
|
|
2245
|
-
"tier": "
|
|
2228
|
+
"score": 0.4,
|
|
2229
|
+
"tier": "medium",
|
|
2246
2230
|
"factors": [
|
|
2247
|
-
"sev:medium"
|
|
2248
|
-
"bias:ssrf+0.20"
|
|
2231
|
+
"sev:medium"
|
|
2249
2232
|
]
|
|
2250
2233
|
},
|
|
2251
2234
|
"apt-nation-state": {
|
|
2252
|
-
"score": 0.
|
|
2253
|
-
"tier": "
|
|
2235
|
+
"score": 0.4,
|
|
2236
|
+
"tier": "medium",
|
|
2254
2237
|
"factors": [
|
|
2255
|
-
"sev:medium"
|
|
2256
|
-
"bias:ssrf+0.30"
|
|
2238
|
+
"sev:medium"
|
|
2257
2239
|
]
|
|
2258
2240
|
},
|
|
2259
2241
|
"supply-chain-attacker": {
|
|
@@ -2272,21 +2254,21 @@
|
|
|
2272
2254
|
}
|
|
2273
2255
|
},
|
|
2274
2256
|
"personaTopTwo": [
|
|
2275
|
-
"
|
|
2257
|
+
"script-kiddie",
|
|
2276
2258
|
"opportunistic-criminal"
|
|
2277
2259
|
],
|
|
2278
|
-
"personaMaxName": "
|
|
2279
|
-
"personaMaxScore": 0.
|
|
2260
|
+
"personaMaxName": "script-kiddie",
|
|
2261
|
+
"personaMaxScore": 0.4,
|
|
2280
2262
|
"reverseExposure": null,
|
|
2281
2263
|
"specMined": null,
|
|
2282
2264
|
"whyFired": {
|
|
2283
|
-
"detector": "sast/
|
|
2284
|
-
"ruleId": "CWE-
|
|
2285
|
-
"parser": "
|
|
2265
|
+
"detector": "sast/dos-sync-io",
|
|
2266
|
+
"ruleId": "CWE-400",
|
|
2267
|
+
"parser": "STRUCTURAL",
|
|
2286
2268
|
"evidence": {
|
|
2287
|
-
"sinkSnippet": "
|
|
2288
|
-
"sourceSnippet":
|
|
2289
|
-
"pathSteps": [],
|
|
2269
|
+
"sinkSnippet": "if (!fs.existsSync(fp)) return fallback;",
|
|
2270
|
+
"sourceSnippet": "if (!fs.existsSync(fp)) return fallback;",
|
|
2271
|
+
"pathSteps": [],
|
|
2290
2272
|
"sanitizers": [],
|
|
2291
2273
|
"guards": []
|
|
2292
2274
|
},
|
|
@@ -2296,7 +2278,7 @@
|
|
|
2296
2278
|
"reachabilityFilter": "unaffected",
|
|
2297
2279
|
"clusterCollapsed": false,
|
|
2298
2280
|
"typeNarrowed": false,
|
|
2299
|
-
"crownJewelTier": "
|
|
2281
|
+
"crownJewelTier": "unknown",
|
|
2300
2282
|
"mitigationVerdict": "unreachable-in-prod"
|
|
2301
2283
|
},
|
|
2302
2284
|
"scanner": {
|
|
@@ -2307,34 +2289,36 @@
|
|
|
2307
2289
|
},
|
|
2308
2290
|
"adversaryTranscript": null,
|
|
2309
2291
|
"predictedBountyUsd": {
|
|
2310
|
-
"low":
|
|
2311
|
-
"likely":
|
|
2312
|
-
"high":
|
|
2292
|
+
"low": 10,
|
|
2293
|
+
"likely": 40,
|
|
2294
|
+
"high": 120,
|
|
2313
2295
|
"program": "web2"
|
|
2314
2296
|
},
|
|
2315
2297
|
"bountyConfidence": "high",
|
|
2316
2298
|
"attackPlaybook": null
|
|
2317
2299
|
},
|
|
2318
2300
|
{
|
|
2319
|
-
"id": "
|
|
2301
|
+
"id": "struct:incremental.js:69:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
2320
2302
|
"kind": "sast",
|
|
2321
2303
|
"severity": "medium",
|
|
2322
|
-
"vuln": "
|
|
2323
|
-
"cwe": "CWE-
|
|
2304
|
+
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
2305
|
+
"cwe": "CWE-400",
|
|
2324
2306
|
"owaspLlm": null,
|
|
2325
|
-
"stride": "
|
|
2326
|
-
"file": "
|
|
2327
|
-
"line":
|
|
2328
|
-
"snippet": "
|
|
2307
|
+
"stride": "Denial of Service",
|
|
2308
|
+
"file": "incremental.js",
|
|
2309
|
+
"line": 69,
|
|
2310
|
+
"snippet": "return JSON.parse(fs.readFileSync(fp, 'utf8'));",
|
|
2329
2311
|
"fix": null,
|
|
2330
2312
|
"reachable": false,
|
|
2331
2313
|
"triage": 22,
|
|
2332
2314
|
"dataClasses": [],
|
|
2333
2315
|
"chain": null,
|
|
2334
|
-
"confidence": 0.
|
|
2335
|
-
"toxicity":
|
|
2336
|
-
"toxicityFactors": [
|
|
2337
|
-
|
|
2316
|
+
"confidence": 0.212,
|
|
2317
|
+
"toxicity": 28,
|
|
2318
|
+
"toxicityFactors": [
|
|
2319
|
+
"http-facing"
|
|
2320
|
+
],
|
|
2321
|
+
"toxicityLabel": "Medium",
|
|
2338
2322
|
"sources": null,
|
|
2339
2323
|
"epssScore": null,
|
|
2340
2324
|
"epssPercentile": null,
|
|
@@ -2344,17 +2328,17 @@
|
|
|
2344
2328
|
"blastRadius": {
|
|
2345
2329
|
"scope": "all-users",
|
|
2346
2330
|
"dataAtRisk": [
|
|
2347
|
-
"
|
|
2331
|
+
"config"
|
|
2348
2332
|
],
|
|
2349
2333
|
"userCount": 50,
|
|
2350
2334
|
"industry": "generic",
|
|
2351
2335
|
"jurisdictions": [],
|
|
2352
2336
|
"controlsApplied": [],
|
|
2353
|
-
"dollarBest":
|
|
2354
|
-
"dollarLikely":
|
|
2355
|
-
"dollarWorst":
|
|
2356
|
-
"dollarLow":
|
|
2357
|
-
"dollarHigh":
|
|
2337
|
+
"dollarBest": 23250,
|
|
2338
|
+
"dollarLikely": 136250,
|
|
2339
|
+
"dollarWorst": 775000,
|
|
2340
|
+
"dollarLow": 23250,
|
|
2341
|
+
"dollarHigh": 775000,
|
|
2358
2342
|
"components": {
|
|
2359
2343
|
"incidentResponse": {
|
|
2360
2344
|
"low": 8000,
|
|
@@ -2387,9 +2371,9 @@
|
|
|
2387
2371
|
"high": 0
|
|
2388
2372
|
},
|
|
2389
2373
|
"directDamage": {
|
|
2390
|
-
"low":
|
|
2391
|
-
"likely":
|
|
2392
|
-
"high":
|
|
2374
|
+
"low": 250,
|
|
2375
|
+
"likely": 1250,
|
|
2376
|
+
"high": 10000
|
|
2393
2377
|
},
|
|
2394
2378
|
"classAction": {
|
|
2395
2379
|
"low": 0,
|
|
@@ -2403,12 +2387,12 @@
|
|
|
2403
2387
|
}
|
|
2404
2388
|
},
|
|
2405
2389
|
"dominantDriver": "legal counsel",
|
|
2406
|
-
"comparable": "
|
|
2390
|
+
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
2407
2391
|
"confidence": "low",
|
|
2408
|
-
"narrative": "
|
|
2392
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `incremental.js:69` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
2409
2393
|
},
|
|
2410
|
-
"stableId": "
|
|
2411
|
-
"confidenceTier": "
|
|
2394
|
+
"stableId": "7314934acc70477c",
|
|
2395
|
+
"confidenceTier": "very-low",
|
|
2412
2396
|
"exploitability": 0.2,
|
|
2413
2397
|
"exploitabilityTier": "low",
|
|
2414
2398
|
"exploitabilityFactors": [
|
|
@@ -2421,35 +2405,19 @@
|
|
|
2421
2405
|
"llm_confidence": null,
|
|
2422
2406
|
"unvalidated": true,
|
|
2423
2407
|
"cross_language": false,
|
|
2424
|
-
"family": "
|
|
2425
|
-
"parser": "
|
|
2408
|
+
"family": "dos-sync-io",
|
|
2409
|
+
"parser": "STRUCTURAL",
|
|
2426
2410
|
"_unsigned": false,
|
|
2427
2411
|
"_passThroughSigning": false,
|
|
2428
2412
|
"signatureStatus": "verified",
|
|
2429
|
-
"regression_test":
|
|
2430
|
-
|
|
2431
|
-
"framework": null,
|
|
2432
|
-
"filename": null,
|
|
2433
|
-
"runHint": null,
|
|
2434
|
-
"code": null
|
|
2435
|
-
},
|
|
2436
|
-
"poc": {
|
|
2437
|
-
"lang": "node",
|
|
2438
|
-
"kind": "http-payload",
|
|
2439
|
-
"cwe": "CWE-918",
|
|
2440
|
-
"family": "ssrf",
|
|
2441
|
-
"runHint": "node poc.mjs",
|
|
2442
|
-
"code": "// Demonstrates SSRF by forcing the server to fetch a localhost sentinel URL.\n// Endpoint: POST http://localhost:3000/REPLACE-WITH-ENDPOINT\n// Payload: http://127.0.0.1:65533/poc-ssrf-sentinel\n// Expect: sentinel server logs a request from the target — proves the target made an outbound call we controlled\n// Run: node poc.mjs\n// Exit code: 0 = exploit demonstrated, 1 = not demonstrated, 2 = error\n\nconst URL_ = \"http://localhost:3000/REPLACE-WITH-ENDPOINT\";\nconst METHOD = \"POST\";\nconst PAYLOAD = `http://127.0.0.1:65533/poc-ssrf-sentinel`;\n\nconst body = METHOD === 'GET'\n ? null\n : JSON.stringify({ \"input\": PAYLOAD });\n\nconst headers = { 'Content-Type': 'application/json' };\n\nconst reqUrl = METHOD === 'GET'\n ? URL_ + (URL_.includes('?') ? '&' : '?') + \"input\" + '=' + encodeURIComponent(PAYLOAD)\n : URL_;\n\ntry {\n const r = await fetch(reqUrl, { method: METHOD, headers, body, redirect: 'follow' });\n const text = await r.text();\n const sig = (text.includes(\"http://127.0.0.1:65533/poc-ssrf-sentinel\") ? 'payload reflected' : '');\n if (sig) {\n process.stderr.write('PoC: exploit demonstrated — ' + sig + '\\n');\n process.exit(0);\n }\n process.stderr.write('PoC: payload sent (status ' + r.status + '), no exploit evidence in response\\n');\n process.exit(1);\n} catch (e) {\n process.stderr.write('PoC: error reaching target — ' + e.message + '\\n');\n process.exit(2);\n}\n",
|
|
2443
|
-
"paramKey": null,
|
|
2444
|
-
"paramKeyConfidence": "low",
|
|
2445
|
-
"paramKeyInferred": false
|
|
2446
|
-
},
|
|
2413
|
+
"regression_test": null,
|
|
2414
|
+
"poc": null,
|
|
2447
2415
|
"calibrated_confidence": null,
|
|
2448
2416
|
"calibrated_confidence_ci": null,
|
|
2449
|
-
"calibrated_n":
|
|
2450
|
-
"calibration_reason": "
|
|
2451
|
-
"verifier_verdict": "
|
|
2452
|
-
"verifier_reason": "no-sanitizer-
|
|
2417
|
+
"calibrated_n": 0,
|
|
2418
|
+
"calibration_reason": "no-history",
|
|
2419
|
+
"verifier_verdict": "cannot-verify",
|
|
2420
|
+
"verifier_reason": "no-poc-no-sanitizer-rule",
|
|
2453
2421
|
"verifier_runner": null,
|
|
2454
2422
|
"narration": null,
|
|
2455
2423
|
"mitigationVerdict": "unreachable-in-prod",
|
|
@@ -2471,12 +2439,12 @@
|
|
|
2471
2439
|
"crownJewelScore": 0,
|
|
2472
2440
|
"crownJewelTier": "unknown",
|
|
2473
2441
|
"crownJewelFactors": [],
|
|
2474
|
-
"cloneClusterId":
|
|
2442
|
+
"cloneClusterId": "b8a597058e30c50c",
|
|
2475
2443
|
"cloneClusterSize": 1,
|
|
2476
|
-
"provenance": "
|
|
2477
|
-
"provenanceScore": 0.
|
|
2444
|
+
"provenance": "human-likely",
|
|
2445
|
+
"provenanceScore": 0.22,
|
|
2478
2446
|
"typeNarrowed": null,
|
|
2479
|
-
"strideCategory": "
|
|
2447
|
+
"strideCategory": "denialOfService",
|
|
2480
2448
|
"personaScores": {
|
|
2481
2449
|
"script-kiddie": {
|
|
2482
2450
|
"score": 0.4,
|
|
@@ -2486,19 +2454,17 @@
|
|
|
2486
2454
|
]
|
|
2487
2455
|
},
|
|
2488
2456
|
"opportunistic-criminal": {
|
|
2489
|
-
"score": 0.
|
|
2490
|
-
"tier": "
|
|
2457
|
+
"score": 0.4,
|
|
2458
|
+
"tier": "medium",
|
|
2491
2459
|
"factors": [
|
|
2492
|
-
"sev:medium"
|
|
2493
|
-
"bias:ssrf+0.20"
|
|
2460
|
+
"sev:medium"
|
|
2494
2461
|
]
|
|
2495
2462
|
},
|
|
2496
2463
|
"apt-nation-state": {
|
|
2497
|
-
"score": 0.
|
|
2498
|
-
"tier": "
|
|
2464
|
+
"score": 0.4,
|
|
2465
|
+
"tier": "medium",
|
|
2499
2466
|
"factors": [
|
|
2500
|
-
"sev:medium"
|
|
2501
|
-
"bias:ssrf+0.30"
|
|
2467
|
+
"sev:medium"
|
|
2502
2468
|
]
|
|
2503
2469
|
},
|
|
2504
2470
|
"supply-chain-attacker": {
|
|
@@ -2517,20 +2483,20 @@
|
|
|
2517
2483
|
}
|
|
2518
2484
|
},
|
|
2519
2485
|
"personaTopTwo": [
|
|
2520
|
-
"
|
|
2486
|
+
"script-kiddie",
|
|
2521
2487
|
"opportunistic-criminal"
|
|
2522
2488
|
],
|
|
2523
|
-
"personaMaxName": "
|
|
2524
|
-
"personaMaxScore": 0.
|
|
2489
|
+
"personaMaxName": "script-kiddie",
|
|
2490
|
+
"personaMaxScore": 0.4,
|
|
2525
2491
|
"reverseExposure": null,
|
|
2526
2492
|
"specMined": null,
|
|
2527
2493
|
"whyFired": {
|
|
2528
|
-
"detector": "sast/
|
|
2529
|
-
"ruleId": "CWE-
|
|
2530
|
-
"parser": "
|
|
2494
|
+
"detector": "sast/dos-sync-io",
|
|
2495
|
+
"ruleId": "CWE-400",
|
|
2496
|
+
"parser": "STRUCTURAL",
|
|
2531
2497
|
"evidence": {
|
|
2532
|
-
"sinkSnippet": "
|
|
2533
|
-
"sourceSnippet":
|
|
2498
|
+
"sinkSnippet": "return JSON.parse(fs.readFileSync(fp, 'utf8'));",
|
|
2499
|
+
"sourceSnippet": "return JSON.parse(fs.readFileSync(fp, 'utf8'));",
|
|
2534
2500
|
"pathSteps": [],
|
|
2535
2501
|
"sanitizers": [],
|
|
2536
2502
|
"guards": []
|
|
@@ -2552,34 +2518,36 @@
|
|
|
2552
2518
|
},
|
|
2553
2519
|
"adversaryTranscript": null,
|
|
2554
2520
|
"predictedBountyUsd": {
|
|
2555
|
-
"low":
|
|
2556
|
-
"likely":
|
|
2557
|
-
"high":
|
|
2521
|
+
"low": 10,
|
|
2522
|
+
"likely": 40,
|
|
2523
|
+
"high": 120,
|
|
2558
2524
|
"program": "web2"
|
|
2559
2525
|
},
|
|
2560
2526
|
"bountyConfidence": "high",
|
|
2561
2527
|
"attackPlaybook": null
|
|
2562
2528
|
},
|
|
2563
2529
|
{
|
|
2564
|
-
"id": "
|
|
2530
|
+
"id": "struct:incremental.js:203:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
2565
2531
|
"kind": "sast",
|
|
2566
2532
|
"severity": "medium",
|
|
2567
|
-
"vuln": "
|
|
2568
|
-
"cwe": "CWE-
|
|
2533
|
+
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
2534
|
+
"cwe": "CWE-400",
|
|
2569
2535
|
"owaspLlm": null,
|
|
2570
|
-
"stride": "
|
|
2536
|
+
"stride": "Denial of Service",
|
|
2571
2537
|
"file": "incremental.js",
|
|
2572
|
-
"line":
|
|
2573
|
-
"snippet": "
|
|
2538
|
+
"line": 203,
|
|
2539
|
+
"snippet": "fs.writeFileSync(path.join(dir, VERSION_PATH), JSON.stringify(currentVersion, null, 2));",
|
|
2574
2540
|
"fix": null,
|
|
2575
2541
|
"reachable": false,
|
|
2576
2542
|
"triage": 22,
|
|
2577
2543
|
"dataClasses": [],
|
|
2578
2544
|
"chain": null,
|
|
2579
|
-
"confidence": 0.
|
|
2580
|
-
"toxicity":
|
|
2581
|
-
"toxicityFactors": [
|
|
2582
|
-
|
|
2545
|
+
"confidence": 0.212,
|
|
2546
|
+
"toxicity": 28,
|
|
2547
|
+
"toxicityFactors": [
|
|
2548
|
+
"http-facing"
|
|
2549
|
+
],
|
|
2550
|
+
"toxicityLabel": "Medium",
|
|
2583
2551
|
"sources": null,
|
|
2584
2552
|
"epssScore": null,
|
|
2585
2553
|
"epssPercentile": null,
|
|
@@ -2648,12 +2616,12 @@
|
|
|
2648
2616
|
}
|
|
2649
2617
|
},
|
|
2650
2618
|
"dominantDriver": "legal counsel",
|
|
2651
|
-
"comparable": "
|
|
2619
|
+
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
2652
2620
|
"confidence": "low",
|
|
2653
|
-
"narrative": "
|
|
2621
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `incremental.js:203` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
2654
2622
|
},
|
|
2655
|
-
"stableId": "
|
|
2656
|
-
"confidenceTier": "
|
|
2623
|
+
"stableId": "71f79aead6c815a7",
|
|
2624
|
+
"confidenceTier": "very-low",
|
|
2657
2625
|
"exploitability": 0.2,
|
|
2658
2626
|
"exploitabilityTier": "low",
|
|
2659
2627
|
"exploitabilityFactors": [
|
|
@@ -2666,8 +2634,8 @@
|
|
|
2666
2634
|
"llm_confidence": null,
|
|
2667
2635
|
"unvalidated": true,
|
|
2668
2636
|
"cross_language": false,
|
|
2669
|
-
"family": "
|
|
2670
|
-
"parser": "
|
|
2637
|
+
"family": "dos-sync-io",
|
|
2638
|
+
"parser": "STRUCTURAL",
|
|
2671
2639
|
"_unsigned": false,
|
|
2672
2640
|
"_passThroughSigning": false,
|
|
2673
2641
|
"signatureStatus": "verified",
|
|
@@ -2700,12 +2668,12 @@
|
|
|
2700
2668
|
"crownJewelScore": 0,
|
|
2701
2669
|
"crownJewelTier": "unknown",
|
|
2702
2670
|
"crownJewelFactors": [],
|
|
2703
|
-
"cloneClusterId": "
|
|
2704
|
-
"cloneClusterSize":
|
|
2671
|
+
"cloneClusterId": "347295aac188671b",
|
|
2672
|
+
"cloneClusterSize": 1,
|
|
2705
2673
|
"provenance": "human-likely",
|
|
2706
2674
|
"provenanceScore": 0.22,
|
|
2707
2675
|
"typeNarrowed": null,
|
|
2708
|
-
"strideCategory": "
|
|
2676
|
+
"strideCategory": "denialOfService",
|
|
2709
2677
|
"personaScores": {
|
|
2710
2678
|
"script-kiddie": {
|
|
2711
2679
|
"score": 0.4,
|
|
@@ -2752,12 +2720,12 @@
|
|
|
2752
2720
|
"reverseExposure": null,
|
|
2753
2721
|
"specMined": null,
|
|
2754
2722
|
"whyFired": {
|
|
2755
|
-
"detector": "sast/
|
|
2756
|
-
"ruleId": "CWE-
|
|
2757
|
-
"parser": "
|
|
2723
|
+
"detector": "sast/dos-sync-io",
|
|
2724
|
+
"ruleId": "CWE-400",
|
|
2725
|
+
"parser": "STRUCTURAL",
|
|
2758
2726
|
"evidence": {
|
|
2759
|
-
"sinkSnippet": "
|
|
2760
|
-
"sourceSnippet": null,
|
|
2727
|
+
"sinkSnippet": "fs.writeFileSync(path.join(dir, VERSION_PATH), JSON.stringify(currentVersion, null, 2));",
|
|
2728
|
+
"sourceSnippet": "fs.writeFileSync(path.join(dir, VERSION_PATH), JSON.stringify(currentVersion, null, 2));",
|
|
2761
2729
|
"pathSteps": [],
|
|
2762
2730
|
"sanitizers": [],
|
|
2763
2731
|
"guards": []
|
|
@@ -2778,30 +2746,37 @@
|
|
|
2778
2746
|
}
|
|
2779
2747
|
},
|
|
2780
2748
|
"adversaryTranscript": null,
|
|
2781
|
-
"predictedBountyUsd":
|
|
2782
|
-
|
|
2749
|
+
"predictedBountyUsd": {
|
|
2750
|
+
"low": 10,
|
|
2751
|
+
"likely": 40,
|
|
2752
|
+
"high": 120,
|
|
2753
|
+
"program": "web2"
|
|
2754
|
+
},
|
|
2755
|
+
"bountyConfidence": "high",
|
|
2783
2756
|
"attackPlaybook": null
|
|
2784
2757
|
},
|
|
2785
2758
|
{
|
|
2786
|
-
"id": "
|
|
2759
|
+
"id": "struct:incremental.js:204:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
2787
2760
|
"kind": "sast",
|
|
2788
2761
|
"severity": "medium",
|
|
2789
|
-
"vuln": "
|
|
2790
|
-
"cwe": "CWE-
|
|
2762
|
+
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
2763
|
+
"cwe": "CWE-400",
|
|
2791
2764
|
"owaspLlm": null,
|
|
2792
|
-
"stride": "
|
|
2765
|
+
"stride": "Denial of Service",
|
|
2793
2766
|
"file": "incremental.js",
|
|
2794
|
-
"line":
|
|
2795
|
-
"snippet": "
|
|
2767
|
+
"line": 204,
|
|
2768
|
+
"snippet": "fs.writeFileSync(path.join(dir, FILES_PATH), JSON.stringify(state.files || {}, null, 2));",
|
|
2796
2769
|
"fix": null,
|
|
2797
2770
|
"reachable": false,
|
|
2798
2771
|
"triage": 22,
|
|
2799
2772
|
"dataClasses": [],
|
|
2800
2773
|
"chain": null,
|
|
2801
|
-
"confidence": 0.
|
|
2802
|
-
"toxicity":
|
|
2803
|
-
"toxicityFactors": [
|
|
2804
|
-
|
|
2774
|
+
"confidence": 0.212,
|
|
2775
|
+
"toxicity": 28,
|
|
2776
|
+
"toxicityFactors": [
|
|
2777
|
+
"http-facing"
|
|
2778
|
+
],
|
|
2779
|
+
"toxicityLabel": "Medium",
|
|
2805
2780
|
"sources": null,
|
|
2806
2781
|
"epssScore": null,
|
|
2807
2782
|
"epssPercentile": null,
|
|
@@ -2870,12 +2845,12 @@
|
|
|
2870
2845
|
}
|
|
2871
2846
|
},
|
|
2872
2847
|
"dominantDriver": "legal counsel",
|
|
2873
|
-
"comparable": "
|
|
2848
|
+
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
2874
2849
|
"confidence": "low",
|
|
2875
|
-
"narrative": "
|
|
2850
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `incremental.js:204` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
2876
2851
|
},
|
|
2877
|
-
"stableId": "
|
|
2878
|
-
"confidenceTier": "
|
|
2852
|
+
"stableId": "16f0befb55d2a11a",
|
|
2853
|
+
"confidenceTier": "very-low",
|
|
2879
2854
|
"exploitability": 0.2,
|
|
2880
2855
|
"exploitabilityTier": "low",
|
|
2881
2856
|
"exploitabilityFactors": [
|
|
@@ -2888,8 +2863,8 @@
|
|
|
2888
2863
|
"llm_confidence": null,
|
|
2889
2864
|
"unvalidated": true,
|
|
2890
2865
|
"cross_language": false,
|
|
2891
|
-
"family": "
|
|
2892
|
-
"parser": "
|
|
2866
|
+
"family": "dos-sync-io",
|
|
2867
|
+
"parser": "STRUCTURAL",
|
|
2893
2868
|
"_unsigned": false,
|
|
2894
2869
|
"_passThroughSigning": false,
|
|
2895
2870
|
"signatureStatus": "verified",
|
|
@@ -2922,12 +2897,12 @@
|
|
|
2922
2897
|
"crownJewelScore": 0,
|
|
2923
2898
|
"crownJewelTier": "unknown",
|
|
2924
2899
|
"crownJewelFactors": [],
|
|
2925
|
-
"cloneClusterId": "
|
|
2926
|
-
"cloneClusterSize":
|
|
2900
|
+
"cloneClusterId": "cd20f49000f1b531",
|
|
2901
|
+
"cloneClusterSize": 1,
|
|
2927
2902
|
"provenance": "human-likely",
|
|
2928
2903
|
"provenanceScore": 0.22,
|
|
2929
2904
|
"typeNarrowed": null,
|
|
2930
|
-
"strideCategory": "
|
|
2905
|
+
"strideCategory": "denialOfService",
|
|
2931
2906
|
"personaScores": {
|
|
2932
2907
|
"script-kiddie": {
|
|
2933
2908
|
"score": 0.4,
|
|
@@ -2974,12 +2949,12 @@
|
|
|
2974
2949
|
"reverseExposure": null,
|
|
2975
2950
|
"specMined": null,
|
|
2976
2951
|
"whyFired": {
|
|
2977
|
-
"detector": "sast/
|
|
2978
|
-
"ruleId": "CWE-
|
|
2979
|
-
"parser": "
|
|
2952
|
+
"detector": "sast/dos-sync-io",
|
|
2953
|
+
"ruleId": "CWE-400",
|
|
2954
|
+
"parser": "STRUCTURAL",
|
|
2980
2955
|
"evidence": {
|
|
2981
|
-
"sinkSnippet": "
|
|
2982
|
-
"sourceSnippet": null,
|
|
2956
|
+
"sinkSnippet": "fs.writeFileSync(path.join(dir, FILES_PATH), JSON.stringify(state.files || {}, null, 2));",
|
|
2957
|
+
"sourceSnippet": "fs.writeFileSync(path.join(dir, FILES_PATH), JSON.stringify(state.files || {}, null, 2));",
|
|
2983
2958
|
"pathSteps": [],
|
|
2984
2959
|
"sanitizers": [],
|
|
2985
2960
|
"guards": []
|
|
@@ -3000,12 +2975,2555 @@
|
|
|
3000
2975
|
}
|
|
3001
2976
|
},
|
|
3002
2977
|
"adversaryTranscript": null,
|
|
3003
|
-
"predictedBountyUsd":
|
|
3004
|
-
|
|
2978
|
+
"predictedBountyUsd": {
|
|
2979
|
+
"low": 10,
|
|
2980
|
+
"likely": 40,
|
|
2981
|
+
"high": 120,
|
|
2982
|
+
"program": "web2"
|
|
2983
|
+
},
|
|
2984
|
+
"bountyConfidence": "high",
|
|
3005
2985
|
"attackPlaybook": null
|
|
3006
2986
|
},
|
|
3007
2987
|
{
|
|
3008
|
-
"id": "
|
|
2988
|
+
"id": "struct:incremental.js:209:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
2989
|
+
"kind": "sast",
|
|
2990
|
+
"severity": "medium",
|
|
2991
|
+
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
2992
|
+
"cwe": "CWE-400",
|
|
2993
|
+
"owaspLlm": null,
|
|
2994
|
+
"stride": "Denial of Service",
|
|
2995
|
+
"file": "incremental.js",
|
|
2996
|
+
"line": 209,
|
|
2997
|
+
"snippet": "fs.writeFileSync(path.join(dir, SUMMARIES_PATH), JSON.stringify(payload));",
|
|
2998
|
+
"fix": null,
|
|
2999
|
+
"reachable": false,
|
|
3000
|
+
"triage": 22,
|
|
3001
|
+
"dataClasses": [],
|
|
3002
|
+
"chain": null,
|
|
3003
|
+
"confidence": 0.212,
|
|
3004
|
+
"toxicity": 28,
|
|
3005
|
+
"toxicityFactors": [
|
|
3006
|
+
"http-facing"
|
|
3007
|
+
],
|
|
3008
|
+
"toxicityLabel": "Medium",
|
|
3009
|
+
"sources": null,
|
|
3010
|
+
"epssScore": null,
|
|
3011
|
+
"epssPercentile": null,
|
|
3012
|
+
"epssCve": null,
|
|
3013
|
+
"exploitedNow": false,
|
|
3014
|
+
"tags": null,
|
|
3015
|
+
"blastRadius": {
|
|
3016
|
+
"scope": "all-users",
|
|
3017
|
+
"dataAtRisk": [
|
|
3018
|
+
"config"
|
|
3019
|
+
],
|
|
3020
|
+
"userCount": 50,
|
|
3021
|
+
"industry": "generic",
|
|
3022
|
+
"jurisdictions": [],
|
|
3023
|
+
"controlsApplied": [],
|
|
3024
|
+
"dollarBest": 23250,
|
|
3025
|
+
"dollarLikely": 136250,
|
|
3026
|
+
"dollarWorst": 775000,
|
|
3027
|
+
"dollarLow": 23250,
|
|
3028
|
+
"dollarHigh": 775000,
|
|
3029
|
+
"components": {
|
|
3030
|
+
"incidentResponse": {
|
|
3031
|
+
"low": 8000,
|
|
3032
|
+
"likely": 50000,
|
|
3033
|
+
"high": 250000
|
|
3034
|
+
},
|
|
3035
|
+
"legal": {
|
|
3036
|
+
"low": 10000,
|
|
3037
|
+
"likely": 75000,
|
|
3038
|
+
"high": 500000
|
|
3039
|
+
},
|
|
3040
|
+
"crisisPR": {
|
|
3041
|
+
"low": 0,
|
|
3042
|
+
"likely": 0,
|
|
3043
|
+
"high": 0
|
|
3044
|
+
},
|
|
3045
|
+
"notification": {
|
|
3046
|
+
"low": 5000,
|
|
3047
|
+
"likely": 10000,
|
|
3048
|
+
"high": 15000
|
|
3049
|
+
},
|
|
3050
|
+
"creditMonitoring": {
|
|
3051
|
+
"low": 0,
|
|
3052
|
+
"likely": 0,
|
|
3053
|
+
"high": 0
|
|
3054
|
+
},
|
|
3055
|
+
"regulatoryFines": {
|
|
3056
|
+
"low": 0,
|
|
3057
|
+
"likely": 0,
|
|
3058
|
+
"high": 0
|
|
3059
|
+
},
|
|
3060
|
+
"directDamage": {
|
|
3061
|
+
"low": 250,
|
|
3062
|
+
"likely": 1250,
|
|
3063
|
+
"high": 10000
|
|
3064
|
+
},
|
|
3065
|
+
"classAction": {
|
|
3066
|
+
"low": 0,
|
|
3067
|
+
"likely": 0,
|
|
3068
|
+
"high": 0
|
|
3069
|
+
},
|
|
3070
|
+
"lostBusiness": {
|
|
3071
|
+
"low": 0,
|
|
3072
|
+
"likely": 0,
|
|
3073
|
+
"high": 0
|
|
3074
|
+
}
|
|
3075
|
+
},
|
|
3076
|
+
"dominantDriver": "legal counsel",
|
|
3077
|
+
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
3078
|
+
"confidence": "low",
|
|
3079
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `incremental.js:209` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
3080
|
+
},
|
|
3081
|
+
"stableId": "b6ab9f0eaa3c75e0",
|
|
3082
|
+
"confidenceTier": "very-low",
|
|
3083
|
+
"exploitability": 0.2,
|
|
3084
|
+
"exploitabilityTier": "low",
|
|
3085
|
+
"exploitabilityFactors": [
|
|
3086
|
+
"sev:medium",
|
|
3087
|
+
"unreachable"
|
|
3088
|
+
],
|
|
3089
|
+
"clusterSize": null,
|
|
3090
|
+
"unreachable": false,
|
|
3091
|
+
"validator_verdict": "unvalidated",
|
|
3092
|
+
"llm_confidence": null,
|
|
3093
|
+
"unvalidated": true,
|
|
3094
|
+
"cross_language": false,
|
|
3095
|
+
"family": "dos-sync-io",
|
|
3096
|
+
"parser": "STRUCTURAL",
|
|
3097
|
+
"_unsigned": false,
|
|
3098
|
+
"_passThroughSigning": false,
|
|
3099
|
+
"signatureStatus": "verified",
|
|
3100
|
+
"regression_test": null,
|
|
3101
|
+
"poc": null,
|
|
3102
|
+
"calibrated_confidence": null,
|
|
3103
|
+
"calibrated_confidence_ci": null,
|
|
3104
|
+
"calibrated_n": 0,
|
|
3105
|
+
"calibration_reason": "no-history",
|
|
3106
|
+
"verifier_verdict": "cannot-verify",
|
|
3107
|
+
"verifier_reason": "no-poc-no-sanitizer-rule",
|
|
3108
|
+
"verifier_runner": null,
|
|
3109
|
+
"narration": null,
|
|
3110
|
+
"mitigationVerdict": "unreachable-in-prod",
|
|
3111
|
+
"mitigationsApplied": [],
|
|
3112
|
+
"mitigatedByWaf": false,
|
|
3113
|
+
"wafRuleId": null,
|
|
3114
|
+
"mitigatedByAuth": false,
|
|
3115
|
+
"authMechanism": null,
|
|
3116
|
+
"mitigatedByNetwork": false,
|
|
3117
|
+
"networkExposure": null,
|
|
3118
|
+
"featureFlag": null,
|
|
3119
|
+
"featureFlagState": null,
|
|
3120
|
+
"featureFlagRollout": null,
|
|
3121
|
+
"exposedInProd": false,
|
|
3122
|
+
"unreachableInProd": true,
|
|
3123
|
+
"coldPath": false,
|
|
3124
|
+
"hotPath": false,
|
|
3125
|
+
"prodRequestCount": null,
|
|
3126
|
+
"crownJewelScore": 0,
|
|
3127
|
+
"crownJewelTier": "unknown",
|
|
3128
|
+
"crownJewelFactors": [],
|
|
3129
|
+
"cloneClusterId": "4a06d0af981828b5",
|
|
3130
|
+
"cloneClusterSize": 1,
|
|
3131
|
+
"provenance": "human-likely",
|
|
3132
|
+
"provenanceScore": 0.22,
|
|
3133
|
+
"typeNarrowed": null,
|
|
3134
|
+
"strideCategory": "denialOfService",
|
|
3135
|
+
"personaScores": {
|
|
3136
|
+
"script-kiddie": {
|
|
3137
|
+
"score": 0.4,
|
|
3138
|
+
"tier": "medium",
|
|
3139
|
+
"factors": [
|
|
3140
|
+
"sev:medium"
|
|
3141
|
+
]
|
|
3142
|
+
},
|
|
3143
|
+
"opportunistic-criminal": {
|
|
3144
|
+
"score": 0.4,
|
|
3145
|
+
"tier": "medium",
|
|
3146
|
+
"factors": [
|
|
3147
|
+
"sev:medium"
|
|
3148
|
+
]
|
|
3149
|
+
},
|
|
3150
|
+
"apt-nation-state": {
|
|
3151
|
+
"score": 0.4,
|
|
3152
|
+
"tier": "medium",
|
|
3153
|
+
"factors": [
|
|
3154
|
+
"sev:medium"
|
|
3155
|
+
]
|
|
3156
|
+
},
|
|
3157
|
+
"supply-chain-attacker": {
|
|
3158
|
+
"score": 0.4,
|
|
3159
|
+
"tier": "medium",
|
|
3160
|
+
"factors": [
|
|
3161
|
+
"sev:medium"
|
|
3162
|
+
]
|
|
3163
|
+
},
|
|
3164
|
+
"malicious-insider": {
|
|
3165
|
+
"score": 0.4,
|
|
3166
|
+
"tier": "medium",
|
|
3167
|
+
"factors": [
|
|
3168
|
+
"sev:medium"
|
|
3169
|
+
]
|
|
3170
|
+
}
|
|
3171
|
+
},
|
|
3172
|
+
"personaTopTwo": [
|
|
3173
|
+
"script-kiddie",
|
|
3174
|
+
"opportunistic-criminal"
|
|
3175
|
+
],
|
|
3176
|
+
"personaMaxName": "script-kiddie",
|
|
3177
|
+
"personaMaxScore": 0.4,
|
|
3178
|
+
"reverseExposure": null,
|
|
3179
|
+
"specMined": null,
|
|
3180
|
+
"whyFired": {
|
|
3181
|
+
"detector": "sast/dos-sync-io",
|
|
3182
|
+
"ruleId": "CWE-400",
|
|
3183
|
+
"parser": "STRUCTURAL",
|
|
3184
|
+
"evidence": {
|
|
3185
|
+
"sinkSnippet": "fs.writeFileSync(path.join(dir, SUMMARIES_PATH), JSON.stringify(payload));",
|
|
3186
|
+
"sourceSnippet": "fs.writeFileSync(path.join(dir, SUMMARIES_PATH), JSON.stringify(payload));",
|
|
3187
|
+
"pathSteps": [],
|
|
3188
|
+
"sanitizers": [],
|
|
3189
|
+
"guards": []
|
|
3190
|
+
},
|
|
3191
|
+
"considered": {
|
|
3192
|
+
"suppressionsApplied": [],
|
|
3193
|
+
"suppressionsSkipped": [],
|
|
3194
|
+
"reachabilityFilter": "unaffected",
|
|
3195
|
+
"clusterCollapsed": false,
|
|
3196
|
+
"typeNarrowed": false,
|
|
3197
|
+
"crownJewelTier": "unknown",
|
|
3198
|
+
"mitigationVerdict": "unreachable-in-prod"
|
|
3199
|
+
},
|
|
3200
|
+
"scanner": {
|
|
3201
|
+
"rulesetVersion": null,
|
|
3202
|
+
"packHash": null,
|
|
3203
|
+
"modelId": null
|
|
3204
|
+
}
|
|
3205
|
+
},
|
|
3206
|
+
"adversaryTranscript": null,
|
|
3207
|
+
"predictedBountyUsd": {
|
|
3208
|
+
"low": 10,
|
|
3209
|
+
"likely": 40,
|
|
3210
|
+
"high": 120,
|
|
3211
|
+
"program": "web2"
|
|
3212
|
+
},
|
|
3213
|
+
"bountyConfidence": "high",
|
|
3214
|
+
"attackPlaybook": null
|
|
3215
|
+
},
|
|
3216
|
+
{
|
|
3217
|
+
"id": "struct:incremental.js:220:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
3218
|
+
"kind": "sast",
|
|
3219
|
+
"severity": "medium",
|
|
3220
|
+
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
3221
|
+
"cwe": "CWE-400",
|
|
3222
|
+
"owaspLlm": null,
|
|
3223
|
+
"stride": "Denial of Service",
|
|
3224
|
+
"file": "incremental.js",
|
|
3225
|
+
"line": 220,
|
|
3226
|
+
"snippet": "if (!fs.existsSync(dir)) return true;",
|
|
3227
|
+
"fix": null,
|
|
3228
|
+
"reachable": false,
|
|
3229
|
+
"triage": 22,
|
|
3230
|
+
"dataClasses": [],
|
|
3231
|
+
"chain": null,
|
|
3232
|
+
"confidence": 0.212,
|
|
3233
|
+
"toxicity": 28,
|
|
3234
|
+
"toxicityFactors": [
|
|
3235
|
+
"http-facing"
|
|
3236
|
+
],
|
|
3237
|
+
"toxicityLabel": "Medium",
|
|
3238
|
+
"sources": null,
|
|
3239
|
+
"epssScore": null,
|
|
3240
|
+
"epssPercentile": null,
|
|
3241
|
+
"epssCve": null,
|
|
3242
|
+
"exploitedNow": false,
|
|
3243
|
+
"tags": null,
|
|
3244
|
+
"blastRadius": {
|
|
3245
|
+
"scope": "all-users",
|
|
3246
|
+
"dataAtRisk": [
|
|
3247
|
+
"config"
|
|
3248
|
+
],
|
|
3249
|
+
"userCount": 50,
|
|
3250
|
+
"industry": "generic",
|
|
3251
|
+
"jurisdictions": [],
|
|
3252
|
+
"controlsApplied": [],
|
|
3253
|
+
"dollarBest": 23250,
|
|
3254
|
+
"dollarLikely": 136250,
|
|
3255
|
+
"dollarWorst": 775000,
|
|
3256
|
+
"dollarLow": 23250,
|
|
3257
|
+
"dollarHigh": 775000,
|
|
3258
|
+
"components": {
|
|
3259
|
+
"incidentResponse": {
|
|
3260
|
+
"low": 8000,
|
|
3261
|
+
"likely": 50000,
|
|
3262
|
+
"high": 250000
|
|
3263
|
+
},
|
|
3264
|
+
"legal": {
|
|
3265
|
+
"low": 10000,
|
|
3266
|
+
"likely": 75000,
|
|
3267
|
+
"high": 500000
|
|
3268
|
+
},
|
|
3269
|
+
"crisisPR": {
|
|
3270
|
+
"low": 0,
|
|
3271
|
+
"likely": 0,
|
|
3272
|
+
"high": 0
|
|
3273
|
+
},
|
|
3274
|
+
"notification": {
|
|
3275
|
+
"low": 5000,
|
|
3276
|
+
"likely": 10000,
|
|
3277
|
+
"high": 15000
|
|
3278
|
+
},
|
|
3279
|
+
"creditMonitoring": {
|
|
3280
|
+
"low": 0,
|
|
3281
|
+
"likely": 0,
|
|
3282
|
+
"high": 0
|
|
3283
|
+
},
|
|
3284
|
+
"regulatoryFines": {
|
|
3285
|
+
"low": 0,
|
|
3286
|
+
"likely": 0,
|
|
3287
|
+
"high": 0
|
|
3288
|
+
},
|
|
3289
|
+
"directDamage": {
|
|
3290
|
+
"low": 250,
|
|
3291
|
+
"likely": 1250,
|
|
3292
|
+
"high": 10000
|
|
3293
|
+
},
|
|
3294
|
+
"classAction": {
|
|
3295
|
+
"low": 0,
|
|
3296
|
+
"likely": 0,
|
|
3297
|
+
"high": 0
|
|
3298
|
+
},
|
|
3299
|
+
"lostBusiness": {
|
|
3300
|
+
"low": 0,
|
|
3301
|
+
"likely": 0,
|
|
3302
|
+
"high": 0
|
|
3303
|
+
}
|
|
3304
|
+
},
|
|
3305
|
+
"dominantDriver": "legal counsel",
|
|
3306
|
+
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
3307
|
+
"confidence": "low",
|
|
3308
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `incremental.js:220` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
3309
|
+
},
|
|
3310
|
+
"stableId": "0276003493008082",
|
|
3311
|
+
"confidenceTier": "very-low",
|
|
3312
|
+
"exploitability": 0.2,
|
|
3313
|
+
"exploitabilityTier": "low",
|
|
3314
|
+
"exploitabilityFactors": [
|
|
3315
|
+
"sev:medium",
|
|
3316
|
+
"unreachable"
|
|
3317
|
+
],
|
|
3318
|
+
"clusterSize": null,
|
|
3319
|
+
"unreachable": false,
|
|
3320
|
+
"validator_verdict": "unvalidated",
|
|
3321
|
+
"llm_confidence": null,
|
|
3322
|
+
"unvalidated": true,
|
|
3323
|
+
"cross_language": false,
|
|
3324
|
+
"family": "dos-sync-io",
|
|
3325
|
+
"parser": "STRUCTURAL",
|
|
3326
|
+
"_unsigned": false,
|
|
3327
|
+
"_passThroughSigning": false,
|
|
3328
|
+
"signatureStatus": "verified",
|
|
3329
|
+
"regression_test": null,
|
|
3330
|
+
"poc": null,
|
|
3331
|
+
"calibrated_confidence": null,
|
|
3332
|
+
"calibrated_confidence_ci": null,
|
|
3333
|
+
"calibrated_n": 0,
|
|
3334
|
+
"calibration_reason": "no-history",
|
|
3335
|
+
"verifier_verdict": "cannot-verify",
|
|
3336
|
+
"verifier_reason": "no-poc-no-sanitizer-rule",
|
|
3337
|
+
"verifier_runner": null,
|
|
3338
|
+
"narration": null,
|
|
3339
|
+
"mitigationVerdict": "unreachable-in-prod",
|
|
3340
|
+
"mitigationsApplied": [],
|
|
3341
|
+
"mitigatedByWaf": false,
|
|
3342
|
+
"wafRuleId": null,
|
|
3343
|
+
"mitigatedByAuth": false,
|
|
3344
|
+
"authMechanism": null,
|
|
3345
|
+
"mitigatedByNetwork": false,
|
|
3346
|
+
"networkExposure": null,
|
|
3347
|
+
"featureFlag": null,
|
|
3348
|
+
"featureFlagState": null,
|
|
3349
|
+
"featureFlagRollout": null,
|
|
3350
|
+
"exposedInProd": false,
|
|
3351
|
+
"unreachableInProd": true,
|
|
3352
|
+
"coldPath": false,
|
|
3353
|
+
"hotPath": false,
|
|
3354
|
+
"prodRequestCount": null,
|
|
3355
|
+
"crownJewelScore": 0,
|
|
3356
|
+
"crownJewelTier": "unknown",
|
|
3357
|
+
"crownJewelFactors": [],
|
|
3358
|
+
"cloneClusterId": "b7114d1d9de39865",
|
|
3359
|
+
"cloneClusterSize": 1,
|
|
3360
|
+
"provenance": "human-likely",
|
|
3361
|
+
"provenanceScore": 0.22,
|
|
3362
|
+
"typeNarrowed": null,
|
|
3363
|
+
"strideCategory": "denialOfService",
|
|
3364
|
+
"personaScores": {
|
|
3365
|
+
"script-kiddie": {
|
|
3366
|
+
"score": 0.4,
|
|
3367
|
+
"tier": "medium",
|
|
3368
|
+
"factors": [
|
|
3369
|
+
"sev:medium"
|
|
3370
|
+
]
|
|
3371
|
+
},
|
|
3372
|
+
"opportunistic-criminal": {
|
|
3373
|
+
"score": 0.4,
|
|
3374
|
+
"tier": "medium",
|
|
3375
|
+
"factors": [
|
|
3376
|
+
"sev:medium"
|
|
3377
|
+
]
|
|
3378
|
+
},
|
|
3379
|
+
"apt-nation-state": {
|
|
3380
|
+
"score": 0.4,
|
|
3381
|
+
"tier": "medium",
|
|
3382
|
+
"factors": [
|
|
3383
|
+
"sev:medium"
|
|
3384
|
+
]
|
|
3385
|
+
},
|
|
3386
|
+
"supply-chain-attacker": {
|
|
3387
|
+
"score": 0.4,
|
|
3388
|
+
"tier": "medium",
|
|
3389
|
+
"factors": [
|
|
3390
|
+
"sev:medium"
|
|
3391
|
+
]
|
|
3392
|
+
},
|
|
3393
|
+
"malicious-insider": {
|
|
3394
|
+
"score": 0.4,
|
|
3395
|
+
"tier": "medium",
|
|
3396
|
+
"factors": [
|
|
3397
|
+
"sev:medium"
|
|
3398
|
+
]
|
|
3399
|
+
}
|
|
3400
|
+
},
|
|
3401
|
+
"personaTopTwo": [
|
|
3402
|
+
"script-kiddie",
|
|
3403
|
+
"opportunistic-criminal"
|
|
3404
|
+
],
|
|
3405
|
+
"personaMaxName": "script-kiddie",
|
|
3406
|
+
"personaMaxScore": 0.4,
|
|
3407
|
+
"reverseExposure": null,
|
|
3408
|
+
"specMined": null,
|
|
3409
|
+
"whyFired": {
|
|
3410
|
+
"detector": "sast/dos-sync-io",
|
|
3411
|
+
"ruleId": "CWE-400",
|
|
3412
|
+
"parser": "STRUCTURAL",
|
|
3413
|
+
"evidence": {
|
|
3414
|
+
"sinkSnippet": "if (!fs.existsSync(dir)) return true;",
|
|
3415
|
+
"sourceSnippet": "if (!fs.existsSync(dir)) return true;",
|
|
3416
|
+
"pathSteps": [],
|
|
3417
|
+
"sanitizers": [],
|
|
3418
|
+
"guards": []
|
|
3419
|
+
},
|
|
3420
|
+
"considered": {
|
|
3421
|
+
"suppressionsApplied": [],
|
|
3422
|
+
"suppressionsSkipped": [],
|
|
3423
|
+
"reachabilityFilter": "unaffected",
|
|
3424
|
+
"clusterCollapsed": false,
|
|
3425
|
+
"typeNarrowed": false,
|
|
3426
|
+
"crownJewelTier": "unknown",
|
|
3427
|
+
"mitigationVerdict": "unreachable-in-prod"
|
|
3428
|
+
},
|
|
3429
|
+
"scanner": {
|
|
3430
|
+
"rulesetVersion": null,
|
|
3431
|
+
"packHash": null,
|
|
3432
|
+
"modelId": null
|
|
3433
|
+
}
|
|
3434
|
+
},
|
|
3435
|
+
"adversaryTranscript": null,
|
|
3436
|
+
"predictedBountyUsd": {
|
|
3437
|
+
"low": 10,
|
|
3438
|
+
"likely": 40,
|
|
3439
|
+
"high": 120,
|
|
3440
|
+
"program": "web2"
|
|
3441
|
+
},
|
|
3442
|
+
"bountyConfidence": "high",
|
|
3443
|
+
"attackPlaybook": null
|
|
3444
|
+
},
|
|
3445
|
+
{
|
|
3446
|
+
"id": "struct:incremental.js:223:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
|
|
3447
|
+
"kind": "sast",
|
|
3448
|
+
"severity": "medium",
|
|
3449
|
+
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
3450
|
+
"cwe": "CWE-400",
|
|
3451
|
+
"owaspLlm": null,
|
|
3452
|
+
"stride": "Denial of Service",
|
|
3453
|
+
"file": "incremental.js",
|
|
3454
|
+
"line": 223,
|
|
3455
|
+
"snippet": "if (fs.existsSync(fp)) fs.unlinkSync(fp);",
|
|
3456
|
+
"fix": null,
|
|
3457
|
+
"reachable": false,
|
|
3458
|
+
"triage": 22,
|
|
3459
|
+
"dataClasses": [],
|
|
3460
|
+
"chain": null,
|
|
3461
|
+
"confidence": 0.212,
|
|
3462
|
+
"toxicity": 28,
|
|
3463
|
+
"toxicityFactors": [
|
|
3464
|
+
"http-facing"
|
|
3465
|
+
],
|
|
3466
|
+
"toxicityLabel": "Medium",
|
|
3467
|
+
"sources": null,
|
|
3468
|
+
"epssScore": null,
|
|
3469
|
+
"epssPercentile": null,
|
|
3470
|
+
"epssCve": null,
|
|
3471
|
+
"exploitedNow": false,
|
|
3472
|
+
"tags": null,
|
|
3473
|
+
"blastRadius": {
|
|
3474
|
+
"scope": "all-users",
|
|
3475
|
+
"dataAtRisk": [
|
|
3476
|
+
"config"
|
|
3477
|
+
],
|
|
3478
|
+
"userCount": 50,
|
|
3479
|
+
"industry": "generic",
|
|
3480
|
+
"jurisdictions": [],
|
|
3481
|
+
"controlsApplied": [],
|
|
3482
|
+
"dollarBest": 23250,
|
|
3483
|
+
"dollarLikely": 136250,
|
|
3484
|
+
"dollarWorst": 775000,
|
|
3485
|
+
"dollarLow": 23250,
|
|
3486
|
+
"dollarHigh": 775000,
|
|
3487
|
+
"components": {
|
|
3488
|
+
"incidentResponse": {
|
|
3489
|
+
"low": 8000,
|
|
3490
|
+
"likely": 50000,
|
|
3491
|
+
"high": 250000
|
|
3492
|
+
},
|
|
3493
|
+
"legal": {
|
|
3494
|
+
"low": 10000,
|
|
3495
|
+
"likely": 75000,
|
|
3496
|
+
"high": 500000
|
|
3497
|
+
},
|
|
3498
|
+
"crisisPR": {
|
|
3499
|
+
"low": 0,
|
|
3500
|
+
"likely": 0,
|
|
3501
|
+
"high": 0
|
|
3502
|
+
},
|
|
3503
|
+
"notification": {
|
|
3504
|
+
"low": 5000,
|
|
3505
|
+
"likely": 10000,
|
|
3506
|
+
"high": 15000
|
|
3507
|
+
},
|
|
3508
|
+
"creditMonitoring": {
|
|
3509
|
+
"low": 0,
|
|
3510
|
+
"likely": 0,
|
|
3511
|
+
"high": 0
|
|
3512
|
+
},
|
|
3513
|
+
"regulatoryFines": {
|
|
3514
|
+
"low": 0,
|
|
3515
|
+
"likely": 0,
|
|
3516
|
+
"high": 0
|
|
3517
|
+
},
|
|
3518
|
+
"directDamage": {
|
|
3519
|
+
"low": 250,
|
|
3520
|
+
"likely": 1250,
|
|
3521
|
+
"high": 10000
|
|
3522
|
+
},
|
|
3523
|
+
"classAction": {
|
|
3524
|
+
"low": 0,
|
|
3525
|
+
"likely": 0,
|
|
3526
|
+
"high": 0
|
|
3527
|
+
},
|
|
3528
|
+
"lostBusiness": {
|
|
3529
|
+
"low": 0,
|
|
3530
|
+
"likely": 0,
|
|
3531
|
+
"high": 0
|
|
3532
|
+
}
|
|
3533
|
+
},
|
|
3534
|
+
"dominantDriver": "legal counsel",
|
|
3535
|
+
"comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
|
|
3536
|
+
"confidence": "low",
|
|
3537
|
+
"narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `incremental.js:223` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
|
|
3538
|
+
},
|
|
3539
|
+
"stableId": "15ad072cb77cdfe4",
|
|
3540
|
+
"confidenceTier": "very-low",
|
|
3541
|
+
"exploitability": 0.2,
|
|
3542
|
+
"exploitabilityTier": "low",
|
|
3543
|
+
"exploitabilityFactors": [
|
|
3544
|
+
"sev:medium",
|
|
3545
|
+
"unreachable"
|
|
3546
|
+
],
|
|
3547
|
+
"clusterSize": null,
|
|
3548
|
+
"unreachable": false,
|
|
3549
|
+
"validator_verdict": "unvalidated",
|
|
3550
|
+
"llm_confidence": null,
|
|
3551
|
+
"unvalidated": true,
|
|
3552
|
+
"cross_language": false,
|
|
3553
|
+
"family": "dos-sync-io",
|
|
3554
|
+
"parser": "STRUCTURAL",
|
|
3555
|
+
"_unsigned": false,
|
|
3556
|
+
"_passThroughSigning": false,
|
|
3557
|
+
"signatureStatus": "verified",
|
|
3558
|
+
"regression_test": null,
|
|
3559
|
+
"poc": null,
|
|
3560
|
+
"calibrated_confidence": null,
|
|
3561
|
+
"calibrated_confidence_ci": null,
|
|
3562
|
+
"calibrated_n": 0,
|
|
3563
|
+
"calibration_reason": "no-history",
|
|
3564
|
+
"verifier_verdict": "cannot-verify",
|
|
3565
|
+
"verifier_reason": "no-poc-no-sanitizer-rule",
|
|
3566
|
+
"verifier_runner": null,
|
|
3567
|
+
"narration": null,
|
|
3568
|
+
"mitigationVerdict": "unreachable-in-prod",
|
|
3569
|
+
"mitigationsApplied": [],
|
|
3570
|
+
"mitigatedByWaf": false,
|
|
3571
|
+
"wafRuleId": null,
|
|
3572
|
+
"mitigatedByAuth": false,
|
|
3573
|
+
"authMechanism": null,
|
|
3574
|
+
"mitigatedByNetwork": false,
|
|
3575
|
+
"networkExposure": null,
|
|
3576
|
+
"featureFlag": null,
|
|
3577
|
+
"featureFlagState": null,
|
|
3578
|
+
"featureFlagRollout": null,
|
|
3579
|
+
"exposedInProd": false,
|
|
3580
|
+
"unreachableInProd": true,
|
|
3581
|
+
"coldPath": false,
|
|
3582
|
+
"hotPath": false,
|
|
3583
|
+
"prodRequestCount": null,
|
|
3584
|
+
"crownJewelScore": 0,
|
|
3585
|
+
"crownJewelTier": "unknown",
|
|
3586
|
+
"crownJewelFactors": [],
|
|
3587
|
+
"cloneClusterId": "07f8fac8b280cc73",
|
|
3588
|
+
"cloneClusterSize": 1,
|
|
3589
|
+
"provenance": "human-likely",
|
|
3590
|
+
"provenanceScore": 0.22,
|
|
3591
|
+
"typeNarrowed": null,
|
|
3592
|
+
"strideCategory": "denialOfService",
|
|
3593
|
+
"personaScores": {
|
|
3594
|
+
"script-kiddie": {
|
|
3595
|
+
"score": 0.4,
|
|
3596
|
+
"tier": "medium",
|
|
3597
|
+
"factors": [
|
|
3598
|
+
"sev:medium"
|
|
3599
|
+
]
|
|
3600
|
+
},
|
|
3601
|
+
"opportunistic-criminal": {
|
|
3602
|
+
"score": 0.4,
|
|
3603
|
+
"tier": "medium",
|
|
3604
|
+
"factors": [
|
|
3605
|
+
"sev:medium"
|
|
3606
|
+
]
|
|
3607
|
+
},
|
|
3608
|
+
"apt-nation-state": {
|
|
3609
|
+
"score": 0.4,
|
|
3610
|
+
"tier": "medium",
|
|
3611
|
+
"factors": [
|
|
3612
|
+
"sev:medium"
|
|
3613
|
+
]
|
|
3614
|
+
},
|
|
3615
|
+
"supply-chain-attacker": {
|
|
3616
|
+
"score": 0.4,
|
|
3617
|
+
"tier": "medium",
|
|
3618
|
+
"factors": [
|
|
3619
|
+
"sev:medium"
|
|
3620
|
+
]
|
|
3621
|
+
},
|
|
3622
|
+
"malicious-insider": {
|
|
3623
|
+
"score": 0.4,
|
|
3624
|
+
"tier": "medium",
|
|
3625
|
+
"factors": [
|
|
3626
|
+
"sev:medium"
|
|
3627
|
+
]
|
|
3628
|
+
}
|
|
3629
|
+
},
|
|
3630
|
+
"personaTopTwo": [
|
|
3631
|
+
"script-kiddie",
|
|
3632
|
+
"opportunistic-criminal"
|
|
3633
|
+
],
|
|
3634
|
+
"personaMaxName": "script-kiddie",
|
|
3635
|
+
"personaMaxScore": 0.4,
|
|
3636
|
+
"reverseExposure": null,
|
|
3637
|
+
"specMined": null,
|
|
3638
|
+
"whyFired": {
|
|
3639
|
+
"detector": "sast/dos-sync-io",
|
|
3640
|
+
"ruleId": "CWE-400",
|
|
3641
|
+
"parser": "STRUCTURAL",
|
|
3642
|
+
"evidence": {
|
|
3643
|
+
"sinkSnippet": "if (fs.existsSync(fp)) fs.unlinkSync(fp);",
|
|
3644
|
+
"sourceSnippet": "if (fs.existsSync(fp)) fs.unlinkSync(fp);",
|
|
3645
|
+
"pathSteps": [],
|
|
3646
|
+
"sanitizers": [],
|
|
3647
|
+
"guards": []
|
|
3648
|
+
},
|
|
3649
|
+
"considered": {
|
|
3650
|
+
"suppressionsApplied": [],
|
|
3651
|
+
"suppressionsSkipped": [],
|
|
3652
|
+
"reachabilityFilter": "unaffected",
|
|
3653
|
+
"clusterCollapsed": false,
|
|
3654
|
+
"typeNarrowed": false,
|
|
3655
|
+
"crownJewelTier": "unknown",
|
|
3656
|
+
"mitigationVerdict": "unreachable-in-prod"
|
|
3657
|
+
},
|
|
3658
|
+
"scanner": {
|
|
3659
|
+
"rulesetVersion": null,
|
|
3660
|
+
"packHash": null,
|
|
3661
|
+
"modelId": null
|
|
3662
|
+
}
|
|
3663
|
+
},
|
|
3664
|
+
"adversaryTranscript": null,
|
|
3665
|
+
"predictedBountyUsd": {
|
|
3666
|
+
"low": 10,
|
|
3667
|
+
"likely": 40,
|
|
3668
|
+
"high": 120,
|
|
3669
|
+
"program": "web2"
|
|
3670
|
+
},
|
|
3671
|
+
"bountyConfidence": "high",
|
|
3672
|
+
"attackPlaybook": null
|
|
3673
|
+
},
|
|
3674
|
+
{
|
|
3675
|
+
"id": "ssrf-meta-hardcoded:catalog.js:538",
|
|
3676
|
+
"kind": "sast",
|
|
3677
|
+
"severity": "medium",
|
|
3678
|
+
"vuln": "SSRF: explicit reference to cloud instance-metadata endpoint",
|
|
3679
|
+
"cwe": "CWE-918",
|
|
3680
|
+
"owaspLlm": null,
|
|
3681
|
+
"stride": "Information Disclosure",
|
|
3682
|
+
"file": "catalog.js",
|
|
3683
|
+
"line": 538,
|
|
3684
|
+
"snippet": "remediation: 'Resolve the host first, reject 169.254.169.254 / RFC1918 / localhost; or proxy through a server-side allow-list.' } },",
|
|
3685
|
+
"fix": null,
|
|
3686
|
+
"reachable": false,
|
|
3687
|
+
"triage": 22,
|
|
3688
|
+
"dataClasses": [],
|
|
3689
|
+
"chain": null,
|
|
3690
|
+
"confidence": 0.7,
|
|
3691
|
+
"toxicity": 8,
|
|
3692
|
+
"toxicityFactors": [],
|
|
3693
|
+
"toxicityLabel": "Low",
|
|
3694
|
+
"sources": null,
|
|
3695
|
+
"epssScore": null,
|
|
3696
|
+
"epssPercentile": null,
|
|
3697
|
+
"epssCve": null,
|
|
3698
|
+
"exploitedNow": false,
|
|
3699
|
+
"tags": null,
|
|
3700
|
+
"blastRadius": {
|
|
3701
|
+
"scope": "all-users",
|
|
3702
|
+
"dataAtRisk": [
|
|
3703
|
+
"credentials"
|
|
3704
|
+
],
|
|
3705
|
+
"userCount": 50,
|
|
3706
|
+
"industry": "generic",
|
|
3707
|
+
"jurisdictions": [],
|
|
3708
|
+
"controlsApplied": [],
|
|
3709
|
+
"dollarBest": 24000,
|
|
3710
|
+
"dollarLikely": 138000,
|
|
3711
|
+
"dollarWorst": 777500,
|
|
3712
|
+
"dollarLow": 24000,
|
|
3713
|
+
"dollarHigh": 777500,
|
|
3714
|
+
"components": {
|
|
3715
|
+
"incidentResponse": {
|
|
3716
|
+
"low": 8000,
|
|
3717
|
+
"likely": 50000,
|
|
3718
|
+
"high": 250000
|
|
3719
|
+
},
|
|
3720
|
+
"legal": {
|
|
3721
|
+
"low": 10000,
|
|
3722
|
+
"likely": 75000,
|
|
3723
|
+
"high": 500000
|
|
3724
|
+
},
|
|
3725
|
+
"crisisPR": {
|
|
3726
|
+
"low": 0,
|
|
3727
|
+
"likely": 0,
|
|
3728
|
+
"high": 0
|
|
3729
|
+
},
|
|
3730
|
+
"notification": {
|
|
3731
|
+
"low": 5000,
|
|
3732
|
+
"likely": 10000,
|
|
3733
|
+
"high": 15000
|
|
3734
|
+
},
|
|
3735
|
+
"creditMonitoring": {
|
|
3736
|
+
"low": 0,
|
|
3737
|
+
"likely": 0,
|
|
3738
|
+
"high": 0
|
|
3739
|
+
},
|
|
3740
|
+
"regulatoryFines": {
|
|
3741
|
+
"low": 0,
|
|
3742
|
+
"likely": 0,
|
|
3743
|
+
"high": 0
|
|
3744
|
+
},
|
|
3745
|
+
"directDamage": {
|
|
3746
|
+
"low": 1000,
|
|
3747
|
+
"likely": 3000,
|
|
3748
|
+
"high": 12500
|
|
3749
|
+
},
|
|
3750
|
+
"classAction": {
|
|
3751
|
+
"low": 0,
|
|
3752
|
+
"likely": 0,
|
|
3753
|
+
"high": 0
|
|
3754
|
+
},
|
|
3755
|
+
"lostBusiness": {
|
|
3756
|
+
"low": 0,
|
|
3757
|
+
"likely": 0,
|
|
3758
|
+
"high": 0
|
|
3759
|
+
}
|
|
3760
|
+
},
|
|
3761
|
+
"dominantDriver": "legal counsel",
|
|
3762
|
+
"comparable": "Capital One 2019 SSRF → $190M settlement (100M records, $1.90/rec)",
|
|
3763
|
+
"confidence": "low",
|
|
3764
|
+
"narrative": "SSRF: explicit reference to cloud instance-metadata endpoint on `catalog.js:538` could expose production credentials and API keys. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $24k · likely $138k · worst $778k. Dominant driver: legal counsel. Comparable: Capital One 2019 SSRF → $190M settlement (100M records, $1.90/rec)."
|
|
3765
|
+
},
|
|
3766
|
+
"stableId": "3dfe482b8d5e3a09",
|
|
3767
|
+
"confidenceTier": "medium",
|
|
3768
|
+
"exploitability": 0.2,
|
|
3769
|
+
"exploitabilityTier": "low",
|
|
3770
|
+
"exploitabilityFactors": [
|
|
3771
|
+
"sev:medium",
|
|
3772
|
+
"unreachable"
|
|
3773
|
+
],
|
|
3774
|
+
"clusterSize": null,
|
|
3775
|
+
"unreachable": false,
|
|
3776
|
+
"validator_verdict": "unvalidated",
|
|
3777
|
+
"llm_confidence": null,
|
|
3778
|
+
"unvalidated": true,
|
|
3779
|
+
"cross_language": false,
|
|
3780
|
+
"family": "ssrf",
|
|
3781
|
+
"parser": "SSRF-METADATA",
|
|
3782
|
+
"_unsigned": false,
|
|
3783
|
+
"_passThroughSigning": false,
|
|
3784
|
+
"signatureStatus": "verified",
|
|
3785
|
+
"regression_test": {
|
|
3786
|
+
"lang": "node",
|
|
3787
|
+
"framework": null,
|
|
3788
|
+
"filename": null,
|
|
3789
|
+
"runHint": null,
|
|
3790
|
+
"code": null
|
|
3791
|
+
},
|
|
3792
|
+
"poc": {
|
|
3793
|
+
"lang": "node",
|
|
3794
|
+
"kind": "http-payload",
|
|
3795
|
+
"cwe": "CWE-918",
|
|
3796
|
+
"family": "ssrf",
|
|
3797
|
+
"runHint": "node poc.mjs",
|
|
3798
|
+
"code": "// Demonstrates SSRF by forcing the server to fetch a localhost sentinel URL.\n// Endpoint: POST http://localhost:3000/REPLACE-WITH-ENDPOINT\n// Payload: http://127.0.0.1:65533/poc-ssrf-sentinel\n// Expect: sentinel server logs a request from the target — proves the target made an outbound call we controlled\n// Run: node poc.mjs\n// Exit code: 0 = exploit demonstrated, 1 = not demonstrated, 2 = error\n\nconst URL_ = \"http://localhost:3000/REPLACE-WITH-ENDPOINT\";\nconst METHOD = \"POST\";\nconst PAYLOAD = `http://127.0.0.1:65533/poc-ssrf-sentinel`;\n\nconst body = METHOD === 'GET'\n ? null\n : JSON.stringify({ \"input\": PAYLOAD });\n\nconst headers = { 'Content-Type': 'application/json' };\n\nconst reqUrl = METHOD === 'GET'\n ? URL_ + (URL_.includes('?') ? '&' : '?') + \"input\" + '=' + encodeURIComponent(PAYLOAD)\n : URL_;\n\ntry {\n const r = await fetch(reqUrl, { method: METHOD, headers, body, redirect: 'follow' });\n const text = await r.text();\n const sig = (text.includes(\"http://127.0.0.1:65533/poc-ssrf-sentinel\") ? 'payload reflected' : '');\n if (sig) {\n process.stderr.write('PoC: exploit demonstrated — ' + sig + '\\n');\n process.exit(0);\n }\n process.stderr.write('PoC: payload sent (status ' + r.status + '), no exploit evidence in response\\n');\n process.exit(1);\n} catch (e) {\n process.stderr.write('PoC: error reaching target — ' + e.message + '\\n');\n process.exit(2);\n}\n",
|
|
3799
|
+
"paramKey": null,
|
|
3800
|
+
"paramKeyConfidence": "low",
|
|
3801
|
+
"paramKeyInferred": false
|
|
3802
|
+
},
|
|
3803
|
+
"calibrated_confidence": null,
|
|
3804
|
+
"calibrated_confidence_ci": null,
|
|
3805
|
+
"calibrated_n": 24,
|
|
3806
|
+
"calibration_reason": "insufficient-samples",
|
|
3807
|
+
"verifier_verdict": "verified-sanitizer-absence",
|
|
3808
|
+
"verifier_reason": "no-sanitizer-in-window",
|
|
3809
|
+
"verifier_runner": null,
|
|
3810
|
+
"narration": null,
|
|
3811
|
+
"mitigationVerdict": "unreachable-in-prod",
|
|
3812
|
+
"mitigationsApplied": [],
|
|
3813
|
+
"mitigatedByWaf": false,
|
|
3814
|
+
"wafRuleId": null,
|
|
3815
|
+
"mitigatedByAuth": false,
|
|
3816
|
+
"authMechanism": null,
|
|
3817
|
+
"mitigatedByNetwork": false,
|
|
3818
|
+
"networkExposure": null,
|
|
3819
|
+
"featureFlag": null,
|
|
3820
|
+
"featureFlagState": null,
|
|
3821
|
+
"featureFlagRollout": null,
|
|
3822
|
+
"exposedInProd": false,
|
|
3823
|
+
"unreachableInProd": true,
|
|
3824
|
+
"coldPath": false,
|
|
3825
|
+
"hotPath": false,
|
|
3826
|
+
"prodRequestCount": null,
|
|
3827
|
+
"crownJewelScore": 0.15,
|
|
3828
|
+
"crownJewelTier": "low-value",
|
|
3829
|
+
"crownJewelFactors": [
|
|
3830
|
+
"shell-execution"
|
|
3831
|
+
],
|
|
3832
|
+
"cloneClusterId": null,
|
|
3833
|
+
"cloneClusterSize": 1,
|
|
3834
|
+
"provenance": "human-likely",
|
|
3835
|
+
"provenanceScore": 0.26,
|
|
3836
|
+
"typeNarrowed": null,
|
|
3837
|
+
"strideCategory": "tampering",
|
|
3838
|
+
"personaScores": {
|
|
3839
|
+
"script-kiddie": {
|
|
3840
|
+
"score": 0.4,
|
|
3841
|
+
"tier": "medium",
|
|
3842
|
+
"factors": [
|
|
3843
|
+
"sev:medium"
|
|
3844
|
+
]
|
|
3845
|
+
},
|
|
3846
|
+
"opportunistic-criminal": {
|
|
3847
|
+
"score": 0.6,
|
|
3848
|
+
"tier": "high",
|
|
3849
|
+
"factors": [
|
|
3850
|
+
"sev:medium",
|
|
3851
|
+
"bias:ssrf+0.20"
|
|
3852
|
+
]
|
|
3853
|
+
},
|
|
3854
|
+
"apt-nation-state": {
|
|
3855
|
+
"score": 0.7,
|
|
3856
|
+
"tier": "high",
|
|
3857
|
+
"factors": [
|
|
3858
|
+
"sev:medium",
|
|
3859
|
+
"bias:ssrf+0.30"
|
|
3860
|
+
]
|
|
3861
|
+
},
|
|
3862
|
+
"supply-chain-attacker": {
|
|
3863
|
+
"score": 0.4,
|
|
3864
|
+
"tier": "medium",
|
|
3865
|
+
"factors": [
|
|
3866
|
+
"sev:medium"
|
|
3867
|
+
]
|
|
3868
|
+
},
|
|
3869
|
+
"malicious-insider": {
|
|
3870
|
+
"score": 0.4,
|
|
3871
|
+
"tier": "medium",
|
|
3872
|
+
"factors": [
|
|
3873
|
+
"sev:medium"
|
|
3874
|
+
]
|
|
3875
|
+
}
|
|
3876
|
+
},
|
|
3877
|
+
"personaTopTwo": [
|
|
3878
|
+
"apt-nation-state",
|
|
3879
|
+
"opportunistic-criminal"
|
|
3880
|
+
],
|
|
3881
|
+
"personaMaxName": "apt-nation-state",
|
|
3882
|
+
"personaMaxScore": 0.7,
|
|
3883
|
+
"reverseExposure": null,
|
|
3884
|
+
"specMined": null,
|
|
3885
|
+
"whyFired": {
|
|
3886
|
+
"detector": "sast/ssrf",
|
|
3887
|
+
"ruleId": "CWE-918",
|
|
3888
|
+
"parser": "SSRF-METADATA",
|
|
3889
|
+
"evidence": {
|
|
3890
|
+
"sinkSnippet": "remediation: 'Resolve the host first, reject 169.254.169.254 / RFC1918 / localhost; or proxy through a server-side allow-list.' } },",
|
|
3891
|
+
"sourceSnippet": null,
|
|
3892
|
+
"pathSteps": [],
|
|
3893
|
+
"sanitizers": [],
|
|
3894
|
+
"guards": []
|
|
3895
|
+
},
|
|
3896
|
+
"considered": {
|
|
3897
|
+
"suppressionsApplied": [],
|
|
3898
|
+
"suppressionsSkipped": [],
|
|
3899
|
+
"reachabilityFilter": "unaffected",
|
|
3900
|
+
"clusterCollapsed": false,
|
|
3901
|
+
"typeNarrowed": false,
|
|
3902
|
+
"crownJewelTier": "low-value",
|
|
3903
|
+
"mitigationVerdict": "unreachable-in-prod"
|
|
3904
|
+
},
|
|
3905
|
+
"scanner": {
|
|
3906
|
+
"rulesetVersion": null,
|
|
3907
|
+
"packHash": null,
|
|
3908
|
+
"modelId": null
|
|
3909
|
+
}
|
|
3910
|
+
},
|
|
3911
|
+
"adversaryTranscript": null,
|
|
3912
|
+
"predictedBountyUsd": {
|
|
3913
|
+
"low": 30,
|
|
3914
|
+
"likely": 120,
|
|
3915
|
+
"high": 350,
|
|
3916
|
+
"program": "web2"
|
|
3917
|
+
},
|
|
3918
|
+
"bountyConfidence": "high",
|
|
3919
|
+
"attackPlaybook": null
|
|
3920
|
+
},
|
|
3921
|
+
{
|
|
3922
|
+
"id": "toctou-fs:cross-service-taint.js:53",
|
|
3923
|
+
"kind": "sast",
|
|
3924
|
+
"severity": "medium",
|
|
3925
|
+
"vuln": "TOCTOU: file existence/permission check before open",
|
|
3926
|
+
"cwe": "CWE-367",
|
|
3927
|
+
"owaspLlm": null,
|
|
3928
|
+
"stride": "Tampering",
|
|
3929
|
+
"file": "cross-service-taint.js",
|
|
3930
|
+
"line": 53,
|
|
3931
|
+
"snippet": "if (!fs.existsSync(fp)) continue;",
|
|
3932
|
+
"fix": null,
|
|
3933
|
+
"reachable": false,
|
|
3934
|
+
"triage": 22,
|
|
3935
|
+
"dataClasses": [],
|
|
3936
|
+
"chain": null,
|
|
3937
|
+
"confidence": 0.7,
|
|
3938
|
+
"toxicity": 8,
|
|
3939
|
+
"toxicityFactors": [],
|
|
3940
|
+
"toxicityLabel": "Low",
|
|
3941
|
+
"sources": null,
|
|
3942
|
+
"epssScore": null,
|
|
3943
|
+
"epssPercentile": null,
|
|
3944
|
+
"epssCve": null,
|
|
3945
|
+
"exploitedNow": false,
|
|
3946
|
+
"tags": null,
|
|
3947
|
+
"blastRadius": {
|
|
3948
|
+
"scope": "all-users",
|
|
3949
|
+
"dataAtRisk": [
|
|
3950
|
+
"config"
|
|
3951
|
+
],
|
|
3952
|
+
"userCount": 50,
|
|
3953
|
+
"industry": "generic",
|
|
3954
|
+
"jurisdictions": [],
|
|
3955
|
+
"controlsApplied": [],
|
|
3956
|
+
"dollarBest": 23250,
|
|
3957
|
+
"dollarLikely": 136250,
|
|
3958
|
+
"dollarWorst": 775000,
|
|
3959
|
+
"dollarLow": 23250,
|
|
3960
|
+
"dollarHigh": 775000,
|
|
3961
|
+
"components": {
|
|
3962
|
+
"incidentResponse": {
|
|
3963
|
+
"low": 8000,
|
|
3964
|
+
"likely": 50000,
|
|
3965
|
+
"high": 250000
|
|
3966
|
+
},
|
|
3967
|
+
"legal": {
|
|
3968
|
+
"low": 10000,
|
|
3969
|
+
"likely": 75000,
|
|
3970
|
+
"high": 500000
|
|
3971
|
+
},
|
|
3972
|
+
"crisisPR": {
|
|
3973
|
+
"low": 0,
|
|
3974
|
+
"likely": 0,
|
|
3975
|
+
"high": 0
|
|
3976
|
+
},
|
|
3977
|
+
"notification": {
|
|
3978
|
+
"low": 5000,
|
|
3979
|
+
"likely": 10000,
|
|
3980
|
+
"high": 15000
|
|
3981
|
+
},
|
|
3982
|
+
"creditMonitoring": {
|
|
3983
|
+
"low": 0,
|
|
3984
|
+
"likely": 0,
|
|
3985
|
+
"high": 0
|
|
3986
|
+
},
|
|
3987
|
+
"regulatoryFines": {
|
|
3988
|
+
"low": 0,
|
|
3989
|
+
"likely": 0,
|
|
3990
|
+
"high": 0
|
|
3991
|
+
},
|
|
3992
|
+
"directDamage": {
|
|
3993
|
+
"low": 250,
|
|
3994
|
+
"likely": 1250,
|
|
3995
|
+
"high": 10000
|
|
3996
|
+
},
|
|
3997
|
+
"classAction": {
|
|
3998
|
+
"low": 0,
|
|
3999
|
+
"likely": 0,
|
|
4000
|
+
"high": 0
|
|
4001
|
+
},
|
|
4002
|
+
"lostBusiness": {
|
|
4003
|
+
"low": 0,
|
|
4004
|
+
"likely": 0,
|
|
4005
|
+
"high": 0
|
|
4006
|
+
}
|
|
4007
|
+
},
|
|
4008
|
+
"dominantDriver": "legal counsel",
|
|
4009
|
+
"comparable": "Generic finding — likely cost driven by user count + jurisdiction stack",
|
|
4010
|
+
"confidence": "low",
|
|
4011
|
+
"narrative": "TOCTOU: file existence/permission check before open on `cross-service-taint.js:53` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Generic finding — likely cost driven by user count + jurisdiction stack."
|
|
4012
|
+
},
|
|
4013
|
+
"stableId": "6e563e49115a8c19",
|
|
4014
|
+
"confidenceTier": "medium",
|
|
4015
|
+
"exploitability": 0.2,
|
|
4016
|
+
"exploitabilityTier": "low",
|
|
4017
|
+
"exploitabilityFactors": [
|
|
4018
|
+
"sev:medium",
|
|
4019
|
+
"unreachable"
|
|
4020
|
+
],
|
|
4021
|
+
"clusterSize": null,
|
|
4022
|
+
"unreachable": false,
|
|
4023
|
+
"validator_verdict": "unvalidated",
|
|
4024
|
+
"llm_confidence": null,
|
|
4025
|
+
"unvalidated": true,
|
|
4026
|
+
"cross_language": false,
|
|
4027
|
+
"family": "toctou-file-existence-permission-check-b",
|
|
4028
|
+
"parser": "TOCTOU",
|
|
4029
|
+
"_unsigned": false,
|
|
4030
|
+
"_passThroughSigning": false,
|
|
4031
|
+
"signatureStatus": "verified",
|
|
4032
|
+
"regression_test": null,
|
|
4033
|
+
"poc": null,
|
|
4034
|
+
"calibrated_confidence": null,
|
|
4035
|
+
"calibrated_confidence_ci": null,
|
|
4036
|
+
"calibrated_n": 0,
|
|
4037
|
+
"calibration_reason": "no-history",
|
|
4038
|
+
"verifier_verdict": "cannot-verify",
|
|
4039
|
+
"verifier_reason": "no-poc-no-sanitizer-rule",
|
|
4040
|
+
"verifier_runner": null,
|
|
4041
|
+
"narration": null,
|
|
4042
|
+
"mitigationVerdict": "unreachable-in-prod",
|
|
4043
|
+
"mitigationsApplied": [],
|
|
4044
|
+
"mitigatedByWaf": false,
|
|
4045
|
+
"wafRuleId": null,
|
|
4046
|
+
"mitigatedByAuth": false,
|
|
4047
|
+
"authMechanism": null,
|
|
4048
|
+
"mitigatedByNetwork": false,
|
|
4049
|
+
"networkExposure": null,
|
|
4050
|
+
"featureFlag": null,
|
|
4051
|
+
"featureFlagState": null,
|
|
4052
|
+
"featureFlagRollout": null,
|
|
4053
|
+
"exposedInProd": false,
|
|
4054
|
+
"unreachableInProd": true,
|
|
4055
|
+
"coldPath": false,
|
|
4056
|
+
"hotPath": false,
|
|
4057
|
+
"prodRequestCount": null,
|
|
4058
|
+
"crownJewelScore": 0,
|
|
4059
|
+
"crownJewelTier": "unknown",
|
|
4060
|
+
"crownJewelFactors": [],
|
|
4061
|
+
"cloneClusterId": "eed315f4ee037434",
|
|
4062
|
+
"cloneClusterSize": 2,
|
|
4063
|
+
"provenance": "mixed",
|
|
4064
|
+
"provenanceScore": 0.3,
|
|
4065
|
+
"typeNarrowed": null,
|
|
4066
|
+
"strideCategory": "tampering",
|
|
4067
|
+
"personaScores": {
|
|
4068
|
+
"script-kiddie": {
|
|
4069
|
+
"score": 0.4,
|
|
4070
|
+
"tier": "medium",
|
|
4071
|
+
"factors": [
|
|
4072
|
+
"sev:medium"
|
|
4073
|
+
]
|
|
4074
|
+
},
|
|
4075
|
+
"opportunistic-criminal": {
|
|
4076
|
+
"score": 0.4,
|
|
4077
|
+
"tier": "medium",
|
|
4078
|
+
"factors": [
|
|
4079
|
+
"sev:medium"
|
|
4080
|
+
]
|
|
4081
|
+
},
|
|
4082
|
+
"apt-nation-state": {
|
|
4083
|
+
"score": 0.4,
|
|
4084
|
+
"tier": "medium",
|
|
4085
|
+
"factors": [
|
|
4086
|
+
"sev:medium"
|
|
4087
|
+
]
|
|
4088
|
+
},
|
|
4089
|
+
"supply-chain-attacker": {
|
|
4090
|
+
"score": 0.4,
|
|
4091
|
+
"tier": "medium",
|
|
4092
|
+
"factors": [
|
|
4093
|
+
"sev:medium"
|
|
4094
|
+
]
|
|
4095
|
+
},
|
|
4096
|
+
"malicious-insider": {
|
|
4097
|
+
"score": 0.4,
|
|
4098
|
+
"tier": "medium",
|
|
4099
|
+
"factors": [
|
|
4100
|
+
"sev:medium"
|
|
4101
|
+
]
|
|
4102
|
+
}
|
|
4103
|
+
},
|
|
4104
|
+
"personaTopTwo": [
|
|
4105
|
+
"script-kiddie",
|
|
4106
|
+
"opportunistic-criminal"
|
|
4107
|
+
],
|
|
4108
|
+
"personaMaxName": "script-kiddie",
|
|
4109
|
+
"personaMaxScore": 0.4,
|
|
4110
|
+
"reverseExposure": null,
|
|
4111
|
+
"specMined": null,
|
|
4112
|
+
"whyFired": {
|
|
4113
|
+
"detector": "sast/toctou-file-existence-permission-check-b",
|
|
4114
|
+
"ruleId": "CWE-367",
|
|
4115
|
+
"parser": "TOCTOU",
|
|
4116
|
+
"evidence": {
|
|
4117
|
+
"sinkSnippet": "if (!fs.existsSync(fp)) continue;",
|
|
4118
|
+
"sourceSnippet": null,
|
|
4119
|
+
"pathSteps": [],
|
|
4120
|
+
"sanitizers": [],
|
|
4121
|
+
"guards": []
|
|
4122
|
+
},
|
|
4123
|
+
"considered": {
|
|
4124
|
+
"suppressionsApplied": [],
|
|
4125
|
+
"suppressionsSkipped": [],
|
|
4126
|
+
"reachabilityFilter": "unaffected",
|
|
4127
|
+
"clusterCollapsed": false,
|
|
4128
|
+
"typeNarrowed": false,
|
|
4129
|
+
"crownJewelTier": "unknown",
|
|
4130
|
+
"mitigationVerdict": "unreachable-in-prod"
|
|
4131
|
+
},
|
|
4132
|
+
"scanner": {
|
|
4133
|
+
"rulesetVersion": null,
|
|
4134
|
+
"packHash": null,
|
|
4135
|
+
"modelId": null
|
|
4136
|
+
}
|
|
4137
|
+
},
|
|
4138
|
+
"adversaryTranscript": null,
|
|
4139
|
+
"predictedBountyUsd": null,
|
|
4140
|
+
"bountyConfidence": null,
|
|
4141
|
+
"attackPlaybook": null
|
|
4142
|
+
},
|
|
4143
|
+
{
|
|
4144
|
+
"id": "toctou-fs:cross-service-taint.js:97",
|
|
4145
|
+
"kind": "sast",
|
|
4146
|
+
"severity": "medium",
|
|
4147
|
+
"vuln": "TOCTOU: file existence/permission check before open",
|
|
4148
|
+
"cwe": "CWE-367",
|
|
4149
|
+
"owaspLlm": null,
|
|
4150
|
+
"stride": "Tampering",
|
|
4151
|
+
"file": "cross-service-taint.js",
|
|
4152
|
+
"line": 97,
|
|
4153
|
+
"snippet": "if (fs.existsSync(pkg)) {",
|
|
4154
|
+
"fix": null,
|
|
4155
|
+
"reachable": false,
|
|
4156
|
+
"triage": 22,
|
|
4157
|
+
"dataClasses": [],
|
|
4158
|
+
"chain": null,
|
|
4159
|
+
"confidence": 0.7,
|
|
4160
|
+
"toxicity": 8,
|
|
4161
|
+
"toxicityFactors": [],
|
|
4162
|
+
"toxicityLabel": "Low",
|
|
4163
|
+
"sources": null,
|
|
4164
|
+
"epssScore": null,
|
|
4165
|
+
"epssPercentile": null,
|
|
4166
|
+
"epssCve": null,
|
|
4167
|
+
"exploitedNow": false,
|
|
4168
|
+
"tags": null,
|
|
4169
|
+
"blastRadius": {
|
|
4170
|
+
"scope": "all-users",
|
|
4171
|
+
"dataAtRisk": [
|
|
4172
|
+
"config"
|
|
4173
|
+
],
|
|
4174
|
+
"userCount": 50,
|
|
4175
|
+
"industry": "generic",
|
|
4176
|
+
"jurisdictions": [],
|
|
4177
|
+
"controlsApplied": [],
|
|
4178
|
+
"dollarBest": 23250,
|
|
4179
|
+
"dollarLikely": 136250,
|
|
4180
|
+
"dollarWorst": 775000,
|
|
4181
|
+
"dollarLow": 23250,
|
|
4182
|
+
"dollarHigh": 775000,
|
|
4183
|
+
"components": {
|
|
4184
|
+
"incidentResponse": {
|
|
4185
|
+
"low": 8000,
|
|
4186
|
+
"likely": 50000,
|
|
4187
|
+
"high": 250000
|
|
4188
|
+
},
|
|
4189
|
+
"legal": {
|
|
4190
|
+
"low": 10000,
|
|
4191
|
+
"likely": 75000,
|
|
4192
|
+
"high": 500000
|
|
4193
|
+
},
|
|
4194
|
+
"crisisPR": {
|
|
4195
|
+
"low": 0,
|
|
4196
|
+
"likely": 0,
|
|
4197
|
+
"high": 0
|
|
4198
|
+
},
|
|
4199
|
+
"notification": {
|
|
4200
|
+
"low": 5000,
|
|
4201
|
+
"likely": 10000,
|
|
4202
|
+
"high": 15000
|
|
4203
|
+
},
|
|
4204
|
+
"creditMonitoring": {
|
|
4205
|
+
"low": 0,
|
|
4206
|
+
"likely": 0,
|
|
4207
|
+
"high": 0
|
|
4208
|
+
},
|
|
4209
|
+
"regulatoryFines": {
|
|
4210
|
+
"low": 0,
|
|
4211
|
+
"likely": 0,
|
|
4212
|
+
"high": 0
|
|
4213
|
+
},
|
|
4214
|
+
"directDamage": {
|
|
4215
|
+
"low": 250,
|
|
4216
|
+
"likely": 1250,
|
|
4217
|
+
"high": 10000
|
|
4218
|
+
},
|
|
4219
|
+
"classAction": {
|
|
4220
|
+
"low": 0,
|
|
4221
|
+
"likely": 0,
|
|
4222
|
+
"high": 0
|
|
4223
|
+
},
|
|
4224
|
+
"lostBusiness": {
|
|
4225
|
+
"low": 0,
|
|
4226
|
+
"likely": 0,
|
|
4227
|
+
"high": 0
|
|
4228
|
+
}
|
|
4229
|
+
},
|
|
4230
|
+
"dominantDriver": "legal counsel",
|
|
4231
|
+
"comparable": "Generic finding — likely cost driven by user count + jurisdiction stack",
|
|
4232
|
+
"confidence": "low",
|
|
4233
|
+
"narrative": "TOCTOU: file existence/permission check before open on `cross-service-taint.js:97` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Generic finding — likely cost driven by user count + jurisdiction stack."
|
|
4234
|
+
},
|
|
4235
|
+
"stableId": "51f091cc1c2cb0ad",
|
|
4236
|
+
"confidenceTier": "medium",
|
|
4237
|
+
"exploitability": 0.2,
|
|
4238
|
+
"exploitabilityTier": "low",
|
|
4239
|
+
"exploitabilityFactors": [
|
|
4240
|
+
"sev:medium",
|
|
4241
|
+
"unreachable"
|
|
4242
|
+
],
|
|
4243
|
+
"clusterSize": null,
|
|
4244
|
+
"unreachable": false,
|
|
4245
|
+
"validator_verdict": "unvalidated",
|
|
4246
|
+
"llm_confidence": null,
|
|
4247
|
+
"unvalidated": true,
|
|
4248
|
+
"cross_language": false,
|
|
4249
|
+
"family": "toctou-file-existence-permission-check-b",
|
|
4250
|
+
"parser": "TOCTOU",
|
|
4251
|
+
"_unsigned": false,
|
|
4252
|
+
"_passThroughSigning": false,
|
|
4253
|
+
"signatureStatus": "verified",
|
|
4254
|
+
"regression_test": null,
|
|
4255
|
+
"poc": null,
|
|
4256
|
+
"calibrated_confidence": null,
|
|
4257
|
+
"calibrated_confidence_ci": null,
|
|
4258
|
+
"calibrated_n": 0,
|
|
4259
|
+
"calibration_reason": "no-history",
|
|
4260
|
+
"verifier_verdict": "cannot-verify",
|
|
4261
|
+
"verifier_reason": "no-poc-no-sanitizer-rule",
|
|
4262
|
+
"verifier_runner": null,
|
|
4263
|
+
"narration": null,
|
|
4264
|
+
"mitigationVerdict": "unreachable-in-prod",
|
|
4265
|
+
"mitigationsApplied": [],
|
|
4266
|
+
"mitigatedByWaf": false,
|
|
4267
|
+
"wafRuleId": null,
|
|
4268
|
+
"mitigatedByAuth": false,
|
|
4269
|
+
"authMechanism": null,
|
|
4270
|
+
"mitigatedByNetwork": false,
|
|
4271
|
+
"networkExposure": null,
|
|
4272
|
+
"featureFlag": null,
|
|
4273
|
+
"featureFlagState": null,
|
|
4274
|
+
"featureFlagRollout": null,
|
|
4275
|
+
"exposedInProd": false,
|
|
4276
|
+
"unreachableInProd": true,
|
|
4277
|
+
"coldPath": false,
|
|
4278
|
+
"hotPath": false,
|
|
4279
|
+
"prodRequestCount": null,
|
|
4280
|
+
"crownJewelScore": 0,
|
|
4281
|
+
"crownJewelTier": "unknown",
|
|
4282
|
+
"crownJewelFactors": [],
|
|
4283
|
+
"cloneClusterId": "31e29761689a4980",
|
|
4284
|
+
"cloneClusterSize": 2,
|
|
4285
|
+
"provenance": "mixed",
|
|
4286
|
+
"provenanceScore": 0.3,
|
|
4287
|
+
"typeNarrowed": null,
|
|
4288
|
+
"strideCategory": "tampering",
|
|
4289
|
+
"personaScores": {
|
|
4290
|
+
"script-kiddie": {
|
|
4291
|
+
"score": 0.4,
|
|
4292
|
+
"tier": "medium",
|
|
4293
|
+
"factors": [
|
|
4294
|
+
"sev:medium"
|
|
4295
|
+
]
|
|
4296
|
+
},
|
|
4297
|
+
"opportunistic-criminal": {
|
|
4298
|
+
"score": 0.4,
|
|
4299
|
+
"tier": "medium",
|
|
4300
|
+
"factors": [
|
|
4301
|
+
"sev:medium"
|
|
4302
|
+
]
|
|
4303
|
+
},
|
|
4304
|
+
"apt-nation-state": {
|
|
4305
|
+
"score": 0.4,
|
|
4306
|
+
"tier": "medium",
|
|
4307
|
+
"factors": [
|
|
4308
|
+
"sev:medium"
|
|
4309
|
+
]
|
|
4310
|
+
},
|
|
4311
|
+
"supply-chain-attacker": {
|
|
4312
|
+
"score": 0.4,
|
|
4313
|
+
"tier": "medium",
|
|
4314
|
+
"factors": [
|
|
4315
|
+
"sev:medium"
|
|
4316
|
+
]
|
|
4317
|
+
},
|
|
4318
|
+
"malicious-insider": {
|
|
4319
|
+
"score": 0.4,
|
|
4320
|
+
"tier": "medium",
|
|
4321
|
+
"factors": [
|
|
4322
|
+
"sev:medium"
|
|
4323
|
+
]
|
|
4324
|
+
}
|
|
4325
|
+
},
|
|
4326
|
+
"personaTopTwo": [
|
|
4327
|
+
"script-kiddie",
|
|
4328
|
+
"opportunistic-criminal"
|
|
4329
|
+
],
|
|
4330
|
+
"personaMaxName": "script-kiddie",
|
|
4331
|
+
"personaMaxScore": 0.4,
|
|
4332
|
+
"reverseExposure": null,
|
|
4333
|
+
"specMined": null,
|
|
4334
|
+
"whyFired": {
|
|
4335
|
+
"detector": "sast/toctou-file-existence-permission-check-b",
|
|
4336
|
+
"ruleId": "CWE-367",
|
|
4337
|
+
"parser": "TOCTOU",
|
|
4338
|
+
"evidence": {
|
|
4339
|
+
"sinkSnippet": "if (fs.existsSync(pkg)) {",
|
|
4340
|
+
"sourceSnippet": null,
|
|
4341
|
+
"pathSteps": [],
|
|
4342
|
+
"sanitizers": [],
|
|
4343
|
+
"guards": []
|
|
4344
|
+
},
|
|
4345
|
+
"considered": {
|
|
4346
|
+
"suppressionsApplied": [],
|
|
4347
|
+
"suppressionsSkipped": [],
|
|
4348
|
+
"reachabilityFilter": "unaffected",
|
|
4349
|
+
"clusterCollapsed": false,
|
|
4350
|
+
"typeNarrowed": false,
|
|
4351
|
+
"crownJewelTier": "unknown",
|
|
4352
|
+
"mitigationVerdict": "unreachable-in-prod"
|
|
4353
|
+
},
|
|
4354
|
+
"scanner": {
|
|
4355
|
+
"rulesetVersion": null,
|
|
4356
|
+
"packHash": null,
|
|
4357
|
+
"modelId": null
|
|
4358
|
+
}
|
|
4359
|
+
},
|
|
4360
|
+
"adversaryTranscript": null,
|
|
4361
|
+
"predictedBountyUsd": null,
|
|
4362
|
+
"bountyConfidence": null,
|
|
4363
|
+
"attackPlaybook": null
|
|
4364
|
+
},
|
|
4365
|
+
{
|
|
4366
|
+
"id": "ssrf-meta-hardcoded:exploit-prover.js:33",
|
|
4367
|
+
"kind": "sast",
|
|
4368
|
+
"severity": "medium",
|
|
4369
|
+
"vuln": "SSRF: explicit reference to cloud instance-metadata endpoint",
|
|
4370
|
+
"cwe": "CWE-918",
|
|
4371
|
+
"owaspLlm": null,
|
|
4372
|
+
"stride": "Information Disclosure",
|
|
4373
|
+
"file": "exploit-prover.js",
|
|
4374
|
+
"line": 33,
|
|
4375
|
+
"snippet": "'CWE-918': `http://169.254.169.254/latest/meta-data/`, // SSRF",
|
|
4376
|
+
"fix": null,
|
|
4377
|
+
"reachable": false,
|
|
4378
|
+
"triage": 22,
|
|
4379
|
+
"dataClasses": [],
|
|
4380
|
+
"chain": null,
|
|
4381
|
+
"confidence": 0.7,
|
|
4382
|
+
"toxicity": 8,
|
|
4383
|
+
"toxicityFactors": [],
|
|
4384
|
+
"toxicityLabel": "Low",
|
|
4385
|
+
"sources": null,
|
|
4386
|
+
"epssScore": null,
|
|
4387
|
+
"epssPercentile": null,
|
|
4388
|
+
"epssCve": null,
|
|
4389
|
+
"exploitedNow": false,
|
|
4390
|
+
"tags": null,
|
|
4391
|
+
"blastRadius": {
|
|
4392
|
+
"scope": "all-users",
|
|
4393
|
+
"dataAtRisk": [
|
|
4394
|
+
"credentials"
|
|
4395
|
+
],
|
|
4396
|
+
"userCount": 50,
|
|
4397
|
+
"industry": "generic",
|
|
4398
|
+
"jurisdictions": [],
|
|
4399
|
+
"controlsApplied": [],
|
|
4400
|
+
"dollarBest": 24000,
|
|
4401
|
+
"dollarLikely": 138000,
|
|
4402
|
+
"dollarWorst": 777500,
|
|
4403
|
+
"dollarLow": 24000,
|
|
4404
|
+
"dollarHigh": 777500,
|
|
4405
|
+
"components": {
|
|
4406
|
+
"incidentResponse": {
|
|
4407
|
+
"low": 8000,
|
|
4408
|
+
"likely": 50000,
|
|
4409
|
+
"high": 250000
|
|
4410
|
+
},
|
|
4411
|
+
"legal": {
|
|
4412
|
+
"low": 10000,
|
|
4413
|
+
"likely": 75000,
|
|
4414
|
+
"high": 500000
|
|
4415
|
+
},
|
|
4416
|
+
"crisisPR": {
|
|
4417
|
+
"low": 0,
|
|
4418
|
+
"likely": 0,
|
|
4419
|
+
"high": 0
|
|
4420
|
+
},
|
|
4421
|
+
"notification": {
|
|
4422
|
+
"low": 5000,
|
|
4423
|
+
"likely": 10000,
|
|
4424
|
+
"high": 15000
|
|
4425
|
+
},
|
|
4426
|
+
"creditMonitoring": {
|
|
4427
|
+
"low": 0,
|
|
4428
|
+
"likely": 0,
|
|
4429
|
+
"high": 0
|
|
4430
|
+
},
|
|
4431
|
+
"regulatoryFines": {
|
|
4432
|
+
"low": 0,
|
|
4433
|
+
"likely": 0,
|
|
4434
|
+
"high": 0
|
|
4435
|
+
},
|
|
4436
|
+
"directDamage": {
|
|
4437
|
+
"low": 1000,
|
|
4438
|
+
"likely": 3000,
|
|
4439
|
+
"high": 12500
|
|
4440
|
+
},
|
|
4441
|
+
"classAction": {
|
|
4442
|
+
"low": 0,
|
|
4443
|
+
"likely": 0,
|
|
4444
|
+
"high": 0
|
|
4445
|
+
},
|
|
4446
|
+
"lostBusiness": {
|
|
4447
|
+
"low": 0,
|
|
4448
|
+
"likely": 0,
|
|
4449
|
+
"high": 0
|
|
4450
|
+
}
|
|
4451
|
+
},
|
|
4452
|
+
"dominantDriver": "legal counsel",
|
|
4453
|
+
"comparable": "Capital One 2019 SSRF → $190M settlement (100M records, $1.90/rec)",
|
|
4454
|
+
"confidence": "low",
|
|
4455
|
+
"narrative": "SSRF: explicit reference to cloud instance-metadata endpoint on `exploit-prover.js:33` could expose production credentials and API keys. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $24k · likely $138k · worst $778k. Dominant driver: legal counsel. Comparable: Capital One 2019 SSRF → $190M settlement (100M records, $1.90/rec)."
|
|
4456
|
+
},
|
|
4457
|
+
"stableId": "88ebc2728475812c",
|
|
4458
|
+
"confidenceTier": "medium",
|
|
4459
|
+
"exploitability": 0.2,
|
|
4460
|
+
"exploitabilityTier": "low",
|
|
4461
|
+
"exploitabilityFactors": [
|
|
4462
|
+
"sev:medium",
|
|
4463
|
+
"unreachable"
|
|
4464
|
+
],
|
|
4465
|
+
"clusterSize": null,
|
|
4466
|
+
"unreachable": false,
|
|
4467
|
+
"validator_verdict": "unvalidated",
|
|
4468
|
+
"llm_confidence": null,
|
|
4469
|
+
"unvalidated": true,
|
|
4470
|
+
"cross_language": false,
|
|
4471
|
+
"family": "ssrf",
|
|
4472
|
+
"parser": "SSRF-METADATA",
|
|
4473
|
+
"_unsigned": false,
|
|
4474
|
+
"_passThroughSigning": false,
|
|
4475
|
+
"signatureStatus": "verified",
|
|
4476
|
+
"regression_test": {
|
|
4477
|
+
"lang": "node",
|
|
4478
|
+
"framework": null,
|
|
4479
|
+
"filename": null,
|
|
4480
|
+
"runHint": null,
|
|
4481
|
+
"code": null
|
|
4482
|
+
},
|
|
4483
|
+
"poc": {
|
|
4484
|
+
"lang": "node",
|
|
4485
|
+
"kind": "http-payload",
|
|
4486
|
+
"cwe": "CWE-918",
|
|
4487
|
+
"family": "ssrf",
|
|
4488
|
+
"runHint": "node poc.mjs",
|
|
4489
|
+
"code": "// Demonstrates SSRF by forcing the server to fetch a localhost sentinel URL.\n// Endpoint: POST http://localhost:3000/REPLACE-WITH-ENDPOINT\n// Payload: http://127.0.0.1:65533/poc-ssrf-sentinel\n// Expect: sentinel server logs a request from the target — proves the target made an outbound call we controlled\n// Run: node poc.mjs\n// Exit code: 0 = exploit demonstrated, 1 = not demonstrated, 2 = error\n\nconst URL_ = \"http://localhost:3000/REPLACE-WITH-ENDPOINT\";\nconst METHOD = \"POST\";\nconst PAYLOAD = `http://127.0.0.1:65533/poc-ssrf-sentinel`;\n\nconst body = METHOD === 'GET'\n ? null\n : JSON.stringify({ \"input\": PAYLOAD });\n\nconst headers = { 'Content-Type': 'application/json' };\n\nconst reqUrl = METHOD === 'GET'\n ? URL_ + (URL_.includes('?') ? '&' : '?') + \"input\" + '=' + encodeURIComponent(PAYLOAD)\n : URL_;\n\ntry {\n const r = await fetch(reqUrl, { method: METHOD, headers, body, redirect: 'follow' });\n const text = await r.text();\n const sig = (text.includes(\"http://127.0.0.1:65533/poc-ssrf-sentinel\") ? 'payload reflected' : '');\n if (sig) {\n process.stderr.write('PoC: exploit demonstrated — ' + sig + '\\n');\n process.exit(0);\n }\n process.stderr.write('PoC: payload sent (status ' + r.status + '), no exploit evidence in response\\n');\n process.exit(1);\n} catch (e) {\n process.stderr.write('PoC: error reaching target — ' + e.message + '\\n');\n process.exit(2);\n}\n",
|
|
4490
|
+
"paramKey": null,
|
|
4491
|
+
"paramKeyConfidence": "low",
|
|
4492
|
+
"paramKeyInferred": false
|
|
4493
|
+
},
|
|
4494
|
+
"calibrated_confidence": null,
|
|
4495
|
+
"calibrated_confidence_ci": null,
|
|
4496
|
+
"calibrated_n": 24,
|
|
4497
|
+
"calibration_reason": "insufficient-samples",
|
|
4498
|
+
"verifier_verdict": "verified-sanitizer-absence",
|
|
4499
|
+
"verifier_reason": "no-sanitizer-in-window",
|
|
4500
|
+
"verifier_runner": null,
|
|
4501
|
+
"narration": null,
|
|
4502
|
+
"mitigationVerdict": "unreachable-in-prod",
|
|
4503
|
+
"mitigationsApplied": [],
|
|
4504
|
+
"mitigatedByWaf": false,
|
|
4505
|
+
"wafRuleId": null,
|
|
4506
|
+
"mitigatedByAuth": false,
|
|
4507
|
+
"authMechanism": null,
|
|
4508
|
+
"mitigatedByNetwork": false,
|
|
4509
|
+
"networkExposure": null,
|
|
4510
|
+
"featureFlag": null,
|
|
4511
|
+
"featureFlagState": null,
|
|
4512
|
+
"featureFlagRollout": null,
|
|
4513
|
+
"exposedInProd": false,
|
|
4514
|
+
"unreachableInProd": true,
|
|
4515
|
+
"coldPath": false,
|
|
4516
|
+
"hotPath": false,
|
|
4517
|
+
"prodRequestCount": null,
|
|
4518
|
+
"crownJewelScore": 0,
|
|
4519
|
+
"crownJewelTier": "unknown",
|
|
4520
|
+
"crownJewelFactors": [],
|
|
4521
|
+
"cloneClusterId": null,
|
|
4522
|
+
"cloneClusterSize": 1,
|
|
4523
|
+
"provenance": "mixed",
|
|
4524
|
+
"provenanceScore": 0.3,
|
|
4525
|
+
"typeNarrowed": null,
|
|
4526
|
+
"strideCategory": "tampering",
|
|
4527
|
+
"personaScores": {
|
|
4528
|
+
"script-kiddie": {
|
|
4529
|
+
"score": 0.4,
|
|
4530
|
+
"tier": "medium",
|
|
4531
|
+
"factors": [
|
|
4532
|
+
"sev:medium"
|
|
4533
|
+
]
|
|
4534
|
+
},
|
|
4535
|
+
"opportunistic-criminal": {
|
|
4536
|
+
"score": 0.6,
|
|
4537
|
+
"tier": "high",
|
|
4538
|
+
"factors": [
|
|
4539
|
+
"sev:medium",
|
|
4540
|
+
"bias:ssrf+0.20"
|
|
4541
|
+
]
|
|
4542
|
+
},
|
|
4543
|
+
"apt-nation-state": {
|
|
4544
|
+
"score": 0.7,
|
|
4545
|
+
"tier": "high",
|
|
4546
|
+
"factors": [
|
|
4547
|
+
"sev:medium",
|
|
4548
|
+
"bias:ssrf+0.30"
|
|
4549
|
+
]
|
|
4550
|
+
},
|
|
4551
|
+
"supply-chain-attacker": {
|
|
4552
|
+
"score": 0.4,
|
|
4553
|
+
"tier": "medium",
|
|
4554
|
+
"factors": [
|
|
4555
|
+
"sev:medium"
|
|
4556
|
+
]
|
|
4557
|
+
},
|
|
4558
|
+
"malicious-insider": {
|
|
4559
|
+
"score": 0.4,
|
|
4560
|
+
"tier": "medium",
|
|
4561
|
+
"factors": [
|
|
4562
|
+
"sev:medium"
|
|
4563
|
+
]
|
|
4564
|
+
}
|
|
4565
|
+
},
|
|
4566
|
+
"personaTopTwo": [
|
|
4567
|
+
"apt-nation-state",
|
|
4568
|
+
"opportunistic-criminal"
|
|
4569
|
+
],
|
|
4570
|
+
"personaMaxName": "apt-nation-state",
|
|
4571
|
+
"personaMaxScore": 0.7,
|
|
4572
|
+
"reverseExposure": null,
|
|
4573
|
+
"specMined": null,
|
|
4574
|
+
"whyFired": {
|
|
4575
|
+
"detector": "sast/ssrf",
|
|
4576
|
+
"ruleId": "CWE-918",
|
|
4577
|
+
"parser": "SSRF-METADATA",
|
|
4578
|
+
"evidence": {
|
|
4579
|
+
"sinkSnippet": "'CWE-918': `http://169.254.169.254/latest/meta-data/`, // SSRF",
|
|
4580
|
+
"sourceSnippet": null,
|
|
4581
|
+
"pathSteps": [],
|
|
4582
|
+
"sanitizers": [],
|
|
4583
|
+
"guards": []
|
|
4584
|
+
},
|
|
4585
|
+
"considered": {
|
|
4586
|
+
"suppressionsApplied": [],
|
|
4587
|
+
"suppressionsSkipped": [],
|
|
4588
|
+
"reachabilityFilter": "unaffected",
|
|
4589
|
+
"clusterCollapsed": false,
|
|
4590
|
+
"typeNarrowed": false,
|
|
4591
|
+
"crownJewelTier": "unknown",
|
|
4592
|
+
"mitigationVerdict": "unreachable-in-prod"
|
|
4593
|
+
},
|
|
4594
|
+
"scanner": {
|
|
4595
|
+
"rulesetVersion": null,
|
|
4596
|
+
"packHash": null,
|
|
4597
|
+
"modelId": null
|
|
4598
|
+
}
|
|
4599
|
+
},
|
|
4600
|
+
"adversaryTranscript": null,
|
|
4601
|
+
"predictedBountyUsd": {
|
|
4602
|
+
"low": 30,
|
|
4603
|
+
"likely": 120,
|
|
4604
|
+
"high": 350,
|
|
4605
|
+
"program": "web2"
|
|
4606
|
+
},
|
|
4607
|
+
"bountyConfidence": "high",
|
|
4608
|
+
"attackPlaybook": null
|
|
4609
|
+
},
|
|
4610
|
+
{
|
|
4611
|
+
"id": "toctou-fs:ifds-precise.js:177",
|
|
4612
|
+
"kind": "sast",
|
|
4613
|
+
"severity": "medium",
|
|
4614
|
+
"vuln": "TOCTOU: file existence/permission check before open",
|
|
4615
|
+
"cwe": "CWE-367",
|
|
4616
|
+
"owaspLlm": null,
|
|
4617
|
+
"stride": "Tampering",
|
|
4618
|
+
"file": "ifds-precise.js",
|
|
4619
|
+
"line": 177,
|
|
4620
|
+
"snippet": "if (!fs.existsSync(fp)) return null;",
|
|
4621
|
+
"fix": null,
|
|
4622
|
+
"reachable": false,
|
|
4623
|
+
"triage": 22,
|
|
4624
|
+
"dataClasses": [],
|
|
4625
|
+
"chain": null,
|
|
4626
|
+
"confidence": 0.7,
|
|
4627
|
+
"toxicity": 8,
|
|
4628
|
+
"toxicityFactors": [],
|
|
4629
|
+
"toxicityLabel": "Low",
|
|
4630
|
+
"sources": null,
|
|
4631
|
+
"epssScore": null,
|
|
4632
|
+
"epssPercentile": null,
|
|
4633
|
+
"epssCve": null,
|
|
4634
|
+
"exploitedNow": false,
|
|
4635
|
+
"tags": null,
|
|
4636
|
+
"blastRadius": {
|
|
4637
|
+
"scope": "all-users",
|
|
4638
|
+
"dataAtRisk": [
|
|
4639
|
+
"config"
|
|
4640
|
+
],
|
|
4641
|
+
"userCount": 50,
|
|
4642
|
+
"industry": "generic",
|
|
4643
|
+
"jurisdictions": [],
|
|
4644
|
+
"controlsApplied": [],
|
|
4645
|
+
"dollarBest": 23250,
|
|
4646
|
+
"dollarLikely": 136250,
|
|
4647
|
+
"dollarWorst": 775000,
|
|
4648
|
+
"dollarLow": 23250,
|
|
4649
|
+
"dollarHigh": 775000,
|
|
4650
|
+
"components": {
|
|
4651
|
+
"incidentResponse": {
|
|
4652
|
+
"low": 8000,
|
|
4653
|
+
"likely": 50000,
|
|
4654
|
+
"high": 250000
|
|
4655
|
+
},
|
|
4656
|
+
"legal": {
|
|
4657
|
+
"low": 10000,
|
|
4658
|
+
"likely": 75000,
|
|
4659
|
+
"high": 500000
|
|
4660
|
+
},
|
|
4661
|
+
"crisisPR": {
|
|
4662
|
+
"low": 0,
|
|
4663
|
+
"likely": 0,
|
|
4664
|
+
"high": 0
|
|
4665
|
+
},
|
|
4666
|
+
"notification": {
|
|
4667
|
+
"low": 5000,
|
|
4668
|
+
"likely": 10000,
|
|
4669
|
+
"high": 15000
|
|
4670
|
+
},
|
|
4671
|
+
"creditMonitoring": {
|
|
4672
|
+
"low": 0,
|
|
4673
|
+
"likely": 0,
|
|
4674
|
+
"high": 0
|
|
4675
|
+
},
|
|
4676
|
+
"regulatoryFines": {
|
|
4677
|
+
"low": 0,
|
|
4678
|
+
"likely": 0,
|
|
4679
|
+
"high": 0
|
|
4680
|
+
},
|
|
4681
|
+
"directDamage": {
|
|
4682
|
+
"low": 250,
|
|
4683
|
+
"likely": 1250,
|
|
4684
|
+
"high": 10000
|
|
4685
|
+
},
|
|
4686
|
+
"classAction": {
|
|
4687
|
+
"low": 0,
|
|
4688
|
+
"likely": 0,
|
|
4689
|
+
"high": 0
|
|
4690
|
+
},
|
|
4691
|
+
"lostBusiness": {
|
|
4692
|
+
"low": 0,
|
|
4693
|
+
"likely": 0,
|
|
4694
|
+
"high": 0
|
|
4695
|
+
}
|
|
4696
|
+
},
|
|
4697
|
+
"dominantDriver": "legal counsel",
|
|
4698
|
+
"comparable": "Generic finding — likely cost driven by user count + jurisdiction stack",
|
|
4699
|
+
"confidence": "low",
|
|
4700
|
+
"narrative": "TOCTOU: file existence/permission check before open on `ifds-precise.js:177` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Generic finding — likely cost driven by user count + jurisdiction stack."
|
|
4701
|
+
},
|
|
4702
|
+
"stableId": "be2c228b413046d9",
|
|
4703
|
+
"confidenceTier": "medium",
|
|
4704
|
+
"exploitability": 0.2,
|
|
4705
|
+
"exploitabilityTier": "low",
|
|
4706
|
+
"exploitabilityFactors": [
|
|
4707
|
+
"sev:medium",
|
|
4708
|
+
"unreachable"
|
|
4709
|
+
],
|
|
4710
|
+
"clusterSize": null,
|
|
4711
|
+
"unreachable": false,
|
|
4712
|
+
"validator_verdict": "unvalidated",
|
|
4713
|
+
"llm_confidence": null,
|
|
4714
|
+
"unvalidated": true,
|
|
4715
|
+
"cross_language": false,
|
|
4716
|
+
"family": "toctou-file-existence-permission-check-b",
|
|
4717
|
+
"parser": "TOCTOU",
|
|
4718
|
+
"_unsigned": false,
|
|
4719
|
+
"_passThroughSigning": false,
|
|
4720
|
+
"signatureStatus": "verified",
|
|
4721
|
+
"regression_test": null,
|
|
4722
|
+
"poc": null,
|
|
4723
|
+
"calibrated_confidence": null,
|
|
4724
|
+
"calibrated_confidence_ci": null,
|
|
4725
|
+
"calibrated_n": 0,
|
|
4726
|
+
"calibration_reason": "no-history",
|
|
4727
|
+
"verifier_verdict": "cannot-verify",
|
|
4728
|
+
"verifier_reason": "no-poc-no-sanitizer-rule",
|
|
4729
|
+
"verifier_runner": null,
|
|
4730
|
+
"narration": null,
|
|
4731
|
+
"mitigationVerdict": "unreachable-in-prod",
|
|
4732
|
+
"mitigationsApplied": [],
|
|
4733
|
+
"mitigatedByWaf": false,
|
|
4734
|
+
"wafRuleId": null,
|
|
4735
|
+
"mitigatedByAuth": false,
|
|
4736
|
+
"authMechanism": null,
|
|
4737
|
+
"mitigatedByNetwork": false,
|
|
4738
|
+
"networkExposure": null,
|
|
4739
|
+
"featureFlag": null,
|
|
4740
|
+
"featureFlagState": null,
|
|
4741
|
+
"featureFlagRollout": null,
|
|
4742
|
+
"exposedInProd": false,
|
|
4743
|
+
"unreachableInProd": true,
|
|
4744
|
+
"coldPath": false,
|
|
4745
|
+
"hotPath": false,
|
|
4746
|
+
"prodRequestCount": null,
|
|
4747
|
+
"crownJewelScore": 0,
|
|
4748
|
+
"crownJewelTier": "unknown",
|
|
4749
|
+
"crownJewelFactors": [],
|
|
4750
|
+
"cloneClusterId": "66b8a8c25816e7f9",
|
|
4751
|
+
"cloneClusterSize": 2,
|
|
4752
|
+
"provenance": "mixed",
|
|
4753
|
+
"provenanceScore": 0.32,
|
|
4754
|
+
"typeNarrowed": null,
|
|
4755
|
+
"strideCategory": "tampering",
|
|
4756
|
+
"personaScores": {
|
|
4757
|
+
"script-kiddie": {
|
|
4758
|
+
"score": 0.4,
|
|
4759
|
+
"tier": "medium",
|
|
4760
|
+
"factors": [
|
|
4761
|
+
"sev:medium"
|
|
4762
|
+
]
|
|
4763
|
+
},
|
|
4764
|
+
"opportunistic-criminal": {
|
|
4765
|
+
"score": 0.4,
|
|
4766
|
+
"tier": "medium",
|
|
4767
|
+
"factors": [
|
|
4768
|
+
"sev:medium"
|
|
4769
|
+
]
|
|
4770
|
+
},
|
|
4771
|
+
"apt-nation-state": {
|
|
4772
|
+
"score": 0.4,
|
|
4773
|
+
"tier": "medium",
|
|
4774
|
+
"factors": [
|
|
4775
|
+
"sev:medium"
|
|
4776
|
+
]
|
|
4777
|
+
},
|
|
4778
|
+
"supply-chain-attacker": {
|
|
4779
|
+
"score": 0.4,
|
|
4780
|
+
"tier": "medium",
|
|
4781
|
+
"factors": [
|
|
4782
|
+
"sev:medium"
|
|
4783
|
+
]
|
|
4784
|
+
},
|
|
4785
|
+
"malicious-insider": {
|
|
4786
|
+
"score": 0.4,
|
|
4787
|
+
"tier": "medium",
|
|
4788
|
+
"factors": [
|
|
4789
|
+
"sev:medium"
|
|
4790
|
+
]
|
|
4791
|
+
}
|
|
4792
|
+
},
|
|
4793
|
+
"personaTopTwo": [
|
|
4794
|
+
"script-kiddie",
|
|
4795
|
+
"opportunistic-criminal"
|
|
4796
|
+
],
|
|
4797
|
+
"personaMaxName": "script-kiddie",
|
|
4798
|
+
"personaMaxScore": 0.4,
|
|
4799
|
+
"reverseExposure": null,
|
|
4800
|
+
"specMined": null,
|
|
4801
|
+
"whyFired": {
|
|
4802
|
+
"detector": "sast/toctou-file-existence-permission-check-b",
|
|
4803
|
+
"ruleId": "CWE-367",
|
|
4804
|
+
"parser": "TOCTOU",
|
|
4805
|
+
"evidence": {
|
|
4806
|
+
"sinkSnippet": "if (!fs.existsSync(fp)) return null;",
|
|
4807
|
+
"sourceSnippet": null,
|
|
4808
|
+
"pathSteps": [],
|
|
4809
|
+
"sanitizers": [],
|
|
4810
|
+
"guards": []
|
|
4811
|
+
},
|
|
4812
|
+
"considered": {
|
|
4813
|
+
"suppressionsApplied": [],
|
|
4814
|
+
"suppressionsSkipped": [],
|
|
4815
|
+
"reachabilityFilter": "unaffected",
|
|
4816
|
+
"clusterCollapsed": false,
|
|
4817
|
+
"typeNarrowed": false,
|
|
4818
|
+
"crownJewelTier": "unknown",
|
|
4819
|
+
"mitigationVerdict": "unreachable-in-prod"
|
|
4820
|
+
},
|
|
4821
|
+
"scanner": {
|
|
4822
|
+
"rulesetVersion": null,
|
|
4823
|
+
"packHash": null,
|
|
4824
|
+
"modelId": null
|
|
4825
|
+
}
|
|
4826
|
+
},
|
|
4827
|
+
"adversaryTranscript": null,
|
|
4828
|
+
"predictedBountyUsd": null,
|
|
4829
|
+
"bountyConfidence": null,
|
|
4830
|
+
"attackPlaybook": null
|
|
4831
|
+
},
|
|
4832
|
+
{
|
|
4833
|
+
"id": "toctou-fs:incremental.js:50",
|
|
4834
|
+
"kind": "sast",
|
|
4835
|
+
"severity": "medium",
|
|
4836
|
+
"vuln": "TOCTOU: file existence/permission check before open",
|
|
4837
|
+
"cwe": "CWE-367",
|
|
4838
|
+
"owaspLlm": null,
|
|
4839
|
+
"stride": "Tampering",
|
|
4840
|
+
"file": "incremental.js",
|
|
4841
|
+
"line": 50,
|
|
4842
|
+
"snippet": "if (!fs.existsSync(versionFp)) return _emptyState();",
|
|
4843
|
+
"fix": null,
|
|
4844
|
+
"reachable": false,
|
|
4845
|
+
"triage": 22,
|
|
4846
|
+
"dataClasses": [],
|
|
4847
|
+
"chain": null,
|
|
4848
|
+
"confidence": 0.7,
|
|
4849
|
+
"toxicity": 8,
|
|
4850
|
+
"toxicityFactors": [],
|
|
4851
|
+
"toxicityLabel": "Low",
|
|
4852
|
+
"sources": null,
|
|
4853
|
+
"epssScore": null,
|
|
4854
|
+
"epssPercentile": null,
|
|
4855
|
+
"epssCve": null,
|
|
4856
|
+
"exploitedNow": false,
|
|
4857
|
+
"tags": null,
|
|
4858
|
+
"blastRadius": {
|
|
4859
|
+
"scope": "all-users",
|
|
4860
|
+
"dataAtRisk": [
|
|
4861
|
+
"config"
|
|
4862
|
+
],
|
|
4863
|
+
"userCount": 50,
|
|
4864
|
+
"industry": "generic",
|
|
4865
|
+
"jurisdictions": [],
|
|
4866
|
+
"controlsApplied": [],
|
|
4867
|
+
"dollarBest": 23250,
|
|
4868
|
+
"dollarLikely": 136250,
|
|
4869
|
+
"dollarWorst": 775000,
|
|
4870
|
+
"dollarLow": 23250,
|
|
4871
|
+
"dollarHigh": 775000,
|
|
4872
|
+
"components": {
|
|
4873
|
+
"incidentResponse": {
|
|
4874
|
+
"low": 8000,
|
|
4875
|
+
"likely": 50000,
|
|
4876
|
+
"high": 250000
|
|
4877
|
+
},
|
|
4878
|
+
"legal": {
|
|
4879
|
+
"low": 10000,
|
|
4880
|
+
"likely": 75000,
|
|
4881
|
+
"high": 500000
|
|
4882
|
+
},
|
|
4883
|
+
"crisisPR": {
|
|
4884
|
+
"low": 0,
|
|
4885
|
+
"likely": 0,
|
|
4886
|
+
"high": 0
|
|
4887
|
+
},
|
|
4888
|
+
"notification": {
|
|
4889
|
+
"low": 5000,
|
|
4890
|
+
"likely": 10000,
|
|
4891
|
+
"high": 15000
|
|
4892
|
+
},
|
|
4893
|
+
"creditMonitoring": {
|
|
4894
|
+
"low": 0,
|
|
4895
|
+
"likely": 0,
|
|
4896
|
+
"high": 0
|
|
4897
|
+
},
|
|
4898
|
+
"regulatoryFines": {
|
|
4899
|
+
"low": 0,
|
|
4900
|
+
"likely": 0,
|
|
4901
|
+
"high": 0
|
|
4902
|
+
},
|
|
4903
|
+
"directDamage": {
|
|
4904
|
+
"low": 250,
|
|
4905
|
+
"likely": 1250,
|
|
4906
|
+
"high": 10000
|
|
4907
|
+
},
|
|
4908
|
+
"classAction": {
|
|
4909
|
+
"low": 0,
|
|
4910
|
+
"likely": 0,
|
|
4911
|
+
"high": 0
|
|
4912
|
+
},
|
|
4913
|
+
"lostBusiness": {
|
|
4914
|
+
"low": 0,
|
|
4915
|
+
"likely": 0,
|
|
4916
|
+
"high": 0
|
|
4917
|
+
}
|
|
4918
|
+
},
|
|
4919
|
+
"dominantDriver": "legal counsel",
|
|
4920
|
+
"comparable": "Generic finding — likely cost driven by user count + jurisdiction stack",
|
|
4921
|
+
"confidence": "low",
|
|
4922
|
+
"narrative": "TOCTOU: file existence/permission check before open on `incremental.js:50` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Generic finding — likely cost driven by user count + jurisdiction stack."
|
|
4923
|
+
},
|
|
4924
|
+
"stableId": "3184d498fcca8634",
|
|
4925
|
+
"confidenceTier": "medium",
|
|
4926
|
+
"exploitability": 0.2,
|
|
4927
|
+
"exploitabilityTier": "low",
|
|
4928
|
+
"exploitabilityFactors": [
|
|
4929
|
+
"sev:medium",
|
|
4930
|
+
"unreachable"
|
|
4931
|
+
],
|
|
4932
|
+
"clusterSize": null,
|
|
4933
|
+
"unreachable": false,
|
|
4934
|
+
"validator_verdict": "unvalidated",
|
|
4935
|
+
"llm_confidence": null,
|
|
4936
|
+
"unvalidated": true,
|
|
4937
|
+
"cross_language": false,
|
|
4938
|
+
"family": "toctou-file-existence-permission-check-b",
|
|
4939
|
+
"parser": "TOCTOU",
|
|
4940
|
+
"_unsigned": false,
|
|
4941
|
+
"_passThroughSigning": false,
|
|
4942
|
+
"signatureStatus": "verified",
|
|
4943
|
+
"regression_test": null,
|
|
4944
|
+
"poc": null,
|
|
4945
|
+
"calibrated_confidence": null,
|
|
4946
|
+
"calibrated_confidence_ci": null,
|
|
4947
|
+
"calibrated_n": 0,
|
|
4948
|
+
"calibration_reason": "no-history",
|
|
4949
|
+
"verifier_verdict": "cannot-verify",
|
|
4950
|
+
"verifier_reason": "no-poc-no-sanitizer-rule",
|
|
4951
|
+
"verifier_runner": null,
|
|
4952
|
+
"narration": null,
|
|
4953
|
+
"mitigationVerdict": "unreachable-in-prod",
|
|
4954
|
+
"mitigationsApplied": [],
|
|
4955
|
+
"mitigatedByWaf": false,
|
|
4956
|
+
"wafRuleId": null,
|
|
4957
|
+
"mitigatedByAuth": false,
|
|
4958
|
+
"authMechanism": null,
|
|
4959
|
+
"mitigatedByNetwork": false,
|
|
4960
|
+
"networkExposure": null,
|
|
4961
|
+
"featureFlag": null,
|
|
4962
|
+
"featureFlagState": null,
|
|
4963
|
+
"featureFlagRollout": null,
|
|
4964
|
+
"exposedInProd": false,
|
|
4965
|
+
"unreachableInProd": true,
|
|
4966
|
+
"coldPath": false,
|
|
4967
|
+
"hotPath": false,
|
|
4968
|
+
"prodRequestCount": null,
|
|
4969
|
+
"crownJewelScore": 0,
|
|
4970
|
+
"crownJewelTier": "unknown",
|
|
4971
|
+
"crownJewelFactors": [],
|
|
4972
|
+
"cloneClusterId": "bf9643a065f64945",
|
|
4973
|
+
"cloneClusterSize": 2,
|
|
4974
|
+
"provenance": "human-likely",
|
|
4975
|
+
"provenanceScore": 0.22,
|
|
4976
|
+
"typeNarrowed": null,
|
|
4977
|
+
"strideCategory": "tampering",
|
|
4978
|
+
"personaScores": {
|
|
4979
|
+
"script-kiddie": {
|
|
4980
|
+
"score": 0.4,
|
|
4981
|
+
"tier": "medium",
|
|
4982
|
+
"factors": [
|
|
4983
|
+
"sev:medium"
|
|
4984
|
+
]
|
|
4985
|
+
},
|
|
4986
|
+
"opportunistic-criminal": {
|
|
4987
|
+
"score": 0.4,
|
|
4988
|
+
"tier": "medium",
|
|
4989
|
+
"factors": [
|
|
4990
|
+
"sev:medium"
|
|
4991
|
+
]
|
|
4992
|
+
},
|
|
4993
|
+
"apt-nation-state": {
|
|
4994
|
+
"score": 0.4,
|
|
4995
|
+
"tier": "medium",
|
|
4996
|
+
"factors": [
|
|
4997
|
+
"sev:medium"
|
|
4998
|
+
]
|
|
4999
|
+
},
|
|
5000
|
+
"supply-chain-attacker": {
|
|
5001
|
+
"score": 0.4,
|
|
5002
|
+
"tier": "medium",
|
|
5003
|
+
"factors": [
|
|
5004
|
+
"sev:medium"
|
|
5005
|
+
]
|
|
5006
|
+
},
|
|
5007
|
+
"malicious-insider": {
|
|
5008
|
+
"score": 0.4,
|
|
5009
|
+
"tier": "medium",
|
|
5010
|
+
"factors": [
|
|
5011
|
+
"sev:medium"
|
|
5012
|
+
]
|
|
5013
|
+
}
|
|
5014
|
+
},
|
|
5015
|
+
"personaTopTwo": [
|
|
5016
|
+
"script-kiddie",
|
|
5017
|
+
"opportunistic-criminal"
|
|
5018
|
+
],
|
|
5019
|
+
"personaMaxName": "script-kiddie",
|
|
5020
|
+
"personaMaxScore": 0.4,
|
|
5021
|
+
"reverseExposure": null,
|
|
5022
|
+
"specMined": null,
|
|
5023
|
+
"whyFired": {
|
|
5024
|
+
"detector": "sast/toctou-file-existence-permission-check-b",
|
|
5025
|
+
"ruleId": "CWE-367",
|
|
5026
|
+
"parser": "TOCTOU",
|
|
5027
|
+
"evidence": {
|
|
5028
|
+
"sinkSnippet": "if (!fs.existsSync(versionFp)) return _emptyState();",
|
|
5029
|
+
"sourceSnippet": null,
|
|
5030
|
+
"pathSteps": [],
|
|
5031
|
+
"sanitizers": [],
|
|
5032
|
+
"guards": []
|
|
5033
|
+
},
|
|
5034
|
+
"considered": {
|
|
5035
|
+
"suppressionsApplied": [],
|
|
5036
|
+
"suppressionsSkipped": [],
|
|
5037
|
+
"reachabilityFilter": "unaffected",
|
|
5038
|
+
"clusterCollapsed": false,
|
|
5039
|
+
"typeNarrowed": false,
|
|
5040
|
+
"crownJewelTier": "unknown",
|
|
5041
|
+
"mitigationVerdict": "unreachable-in-prod"
|
|
5042
|
+
},
|
|
5043
|
+
"scanner": {
|
|
5044
|
+
"rulesetVersion": null,
|
|
5045
|
+
"packHash": null,
|
|
5046
|
+
"modelId": null
|
|
5047
|
+
}
|
|
5048
|
+
},
|
|
5049
|
+
"adversaryTranscript": null,
|
|
5050
|
+
"predictedBountyUsd": null,
|
|
5051
|
+
"bountyConfidence": null,
|
|
5052
|
+
"attackPlaybook": null
|
|
5053
|
+
},
|
|
5054
|
+
{
|
|
5055
|
+
"id": "toctou-fs:incremental.js:68",
|
|
5056
|
+
"kind": "sast",
|
|
5057
|
+
"severity": "medium",
|
|
5058
|
+
"vuln": "TOCTOU: file existence/permission check before open",
|
|
5059
|
+
"cwe": "CWE-367",
|
|
5060
|
+
"owaspLlm": null,
|
|
5061
|
+
"stride": "Tampering",
|
|
5062
|
+
"file": "incremental.js",
|
|
5063
|
+
"line": 68,
|
|
5064
|
+
"snippet": "if (!fs.existsSync(fp)) return fallback;",
|
|
5065
|
+
"fix": null,
|
|
5066
|
+
"reachable": false,
|
|
5067
|
+
"triage": 22,
|
|
5068
|
+
"dataClasses": [],
|
|
5069
|
+
"chain": null,
|
|
5070
|
+
"confidence": 0.7,
|
|
5071
|
+
"toxicity": 8,
|
|
5072
|
+
"toxicityFactors": [],
|
|
5073
|
+
"toxicityLabel": "Low",
|
|
5074
|
+
"sources": null,
|
|
5075
|
+
"epssScore": null,
|
|
5076
|
+
"epssPercentile": null,
|
|
5077
|
+
"epssCve": null,
|
|
5078
|
+
"exploitedNow": false,
|
|
5079
|
+
"tags": null,
|
|
5080
|
+
"blastRadius": {
|
|
5081
|
+
"scope": "all-users",
|
|
5082
|
+
"dataAtRisk": [
|
|
5083
|
+
"config"
|
|
5084
|
+
],
|
|
5085
|
+
"userCount": 50,
|
|
5086
|
+
"industry": "generic",
|
|
5087
|
+
"jurisdictions": [],
|
|
5088
|
+
"controlsApplied": [],
|
|
5089
|
+
"dollarBest": 23250,
|
|
5090
|
+
"dollarLikely": 136250,
|
|
5091
|
+
"dollarWorst": 775000,
|
|
5092
|
+
"dollarLow": 23250,
|
|
5093
|
+
"dollarHigh": 775000,
|
|
5094
|
+
"components": {
|
|
5095
|
+
"incidentResponse": {
|
|
5096
|
+
"low": 8000,
|
|
5097
|
+
"likely": 50000,
|
|
5098
|
+
"high": 250000
|
|
5099
|
+
},
|
|
5100
|
+
"legal": {
|
|
5101
|
+
"low": 10000,
|
|
5102
|
+
"likely": 75000,
|
|
5103
|
+
"high": 500000
|
|
5104
|
+
},
|
|
5105
|
+
"crisisPR": {
|
|
5106
|
+
"low": 0,
|
|
5107
|
+
"likely": 0,
|
|
5108
|
+
"high": 0
|
|
5109
|
+
},
|
|
5110
|
+
"notification": {
|
|
5111
|
+
"low": 5000,
|
|
5112
|
+
"likely": 10000,
|
|
5113
|
+
"high": 15000
|
|
5114
|
+
},
|
|
5115
|
+
"creditMonitoring": {
|
|
5116
|
+
"low": 0,
|
|
5117
|
+
"likely": 0,
|
|
5118
|
+
"high": 0
|
|
5119
|
+
},
|
|
5120
|
+
"regulatoryFines": {
|
|
5121
|
+
"low": 0,
|
|
5122
|
+
"likely": 0,
|
|
5123
|
+
"high": 0
|
|
5124
|
+
},
|
|
5125
|
+
"directDamage": {
|
|
5126
|
+
"low": 250,
|
|
5127
|
+
"likely": 1250,
|
|
5128
|
+
"high": 10000
|
|
5129
|
+
},
|
|
5130
|
+
"classAction": {
|
|
5131
|
+
"low": 0,
|
|
5132
|
+
"likely": 0,
|
|
5133
|
+
"high": 0
|
|
5134
|
+
},
|
|
5135
|
+
"lostBusiness": {
|
|
5136
|
+
"low": 0,
|
|
5137
|
+
"likely": 0,
|
|
5138
|
+
"high": 0
|
|
5139
|
+
}
|
|
5140
|
+
},
|
|
5141
|
+
"dominantDriver": "legal counsel",
|
|
5142
|
+
"comparable": "Generic finding — likely cost driven by user count + jurisdiction stack",
|
|
5143
|
+
"confidence": "low",
|
|
5144
|
+
"narrative": "TOCTOU: file existence/permission check before open on `incremental.js:68` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Generic finding — likely cost driven by user count + jurisdiction stack."
|
|
5145
|
+
},
|
|
5146
|
+
"stableId": "ca2e725c38df4ef6",
|
|
5147
|
+
"confidenceTier": "medium",
|
|
5148
|
+
"exploitability": 0.2,
|
|
5149
|
+
"exploitabilityTier": "low",
|
|
5150
|
+
"exploitabilityFactors": [
|
|
5151
|
+
"sev:medium",
|
|
5152
|
+
"unreachable"
|
|
5153
|
+
],
|
|
5154
|
+
"clusterSize": null,
|
|
5155
|
+
"unreachable": false,
|
|
5156
|
+
"validator_verdict": "unvalidated",
|
|
5157
|
+
"llm_confidence": null,
|
|
5158
|
+
"unvalidated": true,
|
|
5159
|
+
"cross_language": false,
|
|
5160
|
+
"family": "toctou-file-existence-permission-check-b",
|
|
5161
|
+
"parser": "TOCTOU",
|
|
5162
|
+
"_unsigned": false,
|
|
5163
|
+
"_passThroughSigning": false,
|
|
5164
|
+
"signatureStatus": "verified",
|
|
5165
|
+
"regression_test": null,
|
|
5166
|
+
"poc": null,
|
|
5167
|
+
"calibrated_confidence": null,
|
|
5168
|
+
"calibrated_confidence_ci": null,
|
|
5169
|
+
"calibrated_n": 0,
|
|
5170
|
+
"calibration_reason": "no-history",
|
|
5171
|
+
"verifier_verdict": "cannot-verify",
|
|
5172
|
+
"verifier_reason": "no-poc-no-sanitizer-rule",
|
|
5173
|
+
"verifier_runner": null,
|
|
5174
|
+
"narration": null,
|
|
5175
|
+
"mitigationVerdict": "unreachable-in-prod",
|
|
5176
|
+
"mitigationsApplied": [],
|
|
5177
|
+
"mitigatedByWaf": false,
|
|
5178
|
+
"wafRuleId": null,
|
|
5179
|
+
"mitigatedByAuth": false,
|
|
5180
|
+
"authMechanism": null,
|
|
5181
|
+
"mitigatedByNetwork": false,
|
|
5182
|
+
"networkExposure": null,
|
|
5183
|
+
"featureFlag": null,
|
|
5184
|
+
"featureFlagState": null,
|
|
5185
|
+
"featureFlagRollout": null,
|
|
5186
|
+
"exposedInProd": false,
|
|
5187
|
+
"unreachableInProd": true,
|
|
5188
|
+
"coldPath": false,
|
|
5189
|
+
"hotPath": false,
|
|
5190
|
+
"prodRequestCount": null,
|
|
5191
|
+
"crownJewelScore": 0,
|
|
5192
|
+
"crownJewelTier": "unknown",
|
|
5193
|
+
"crownJewelFactors": [],
|
|
5194
|
+
"cloneClusterId": "39f1d6db55cace1d",
|
|
5195
|
+
"cloneClusterSize": 2,
|
|
5196
|
+
"provenance": "human-likely",
|
|
5197
|
+
"provenanceScore": 0.22,
|
|
5198
|
+
"typeNarrowed": null,
|
|
5199
|
+
"strideCategory": "tampering",
|
|
5200
|
+
"personaScores": {
|
|
5201
|
+
"script-kiddie": {
|
|
5202
|
+
"score": 0.4,
|
|
5203
|
+
"tier": "medium",
|
|
5204
|
+
"factors": [
|
|
5205
|
+
"sev:medium"
|
|
5206
|
+
]
|
|
5207
|
+
},
|
|
5208
|
+
"opportunistic-criminal": {
|
|
5209
|
+
"score": 0.4,
|
|
5210
|
+
"tier": "medium",
|
|
5211
|
+
"factors": [
|
|
5212
|
+
"sev:medium"
|
|
5213
|
+
]
|
|
5214
|
+
},
|
|
5215
|
+
"apt-nation-state": {
|
|
5216
|
+
"score": 0.4,
|
|
5217
|
+
"tier": "medium",
|
|
5218
|
+
"factors": [
|
|
5219
|
+
"sev:medium"
|
|
5220
|
+
]
|
|
5221
|
+
},
|
|
5222
|
+
"supply-chain-attacker": {
|
|
5223
|
+
"score": 0.4,
|
|
5224
|
+
"tier": "medium",
|
|
5225
|
+
"factors": [
|
|
5226
|
+
"sev:medium"
|
|
5227
|
+
]
|
|
5228
|
+
},
|
|
5229
|
+
"malicious-insider": {
|
|
5230
|
+
"score": 0.4,
|
|
5231
|
+
"tier": "medium",
|
|
5232
|
+
"factors": [
|
|
5233
|
+
"sev:medium"
|
|
5234
|
+
]
|
|
5235
|
+
}
|
|
5236
|
+
},
|
|
5237
|
+
"personaTopTwo": [
|
|
5238
|
+
"script-kiddie",
|
|
5239
|
+
"opportunistic-criminal"
|
|
5240
|
+
],
|
|
5241
|
+
"personaMaxName": "script-kiddie",
|
|
5242
|
+
"personaMaxScore": 0.4,
|
|
5243
|
+
"reverseExposure": null,
|
|
5244
|
+
"specMined": null,
|
|
5245
|
+
"whyFired": {
|
|
5246
|
+
"detector": "sast/toctou-file-existence-permission-check-b",
|
|
5247
|
+
"ruleId": "CWE-367",
|
|
5248
|
+
"parser": "TOCTOU",
|
|
5249
|
+
"evidence": {
|
|
5250
|
+
"sinkSnippet": "if (!fs.existsSync(fp)) return fallback;",
|
|
5251
|
+
"sourceSnippet": null,
|
|
5252
|
+
"pathSteps": [],
|
|
5253
|
+
"sanitizers": [],
|
|
5254
|
+
"guards": []
|
|
5255
|
+
},
|
|
5256
|
+
"considered": {
|
|
5257
|
+
"suppressionsApplied": [],
|
|
5258
|
+
"suppressionsSkipped": [],
|
|
5259
|
+
"reachabilityFilter": "unaffected",
|
|
5260
|
+
"clusterCollapsed": false,
|
|
5261
|
+
"typeNarrowed": false,
|
|
5262
|
+
"crownJewelTier": "unknown",
|
|
5263
|
+
"mitigationVerdict": "unreachable-in-prod"
|
|
5264
|
+
},
|
|
5265
|
+
"scanner": {
|
|
5266
|
+
"rulesetVersion": null,
|
|
5267
|
+
"packHash": null,
|
|
5268
|
+
"modelId": null
|
|
5269
|
+
}
|
|
5270
|
+
},
|
|
5271
|
+
"adversaryTranscript": null,
|
|
5272
|
+
"predictedBountyUsd": null,
|
|
5273
|
+
"bountyConfidence": null,
|
|
5274
|
+
"attackPlaybook": null
|
|
5275
|
+
},
|
|
5276
|
+
{
|
|
5277
|
+
"id": "logic:cross-service-taint.js:53:TOCTOU:_existsSync_followed_by_file_op",
|
|
5278
|
+
"kind": "logic",
|
|
5279
|
+
"severity": "medium",
|
|
5280
|
+
"vuln": "TOCTOU: existsSync followed by file op",
|
|
5281
|
+
"cwe": "CWE-367",
|
|
5282
|
+
"stride": "Tampering",
|
|
5283
|
+
"file": "cross-service-taint.js",
|
|
5284
|
+
"line": 53,
|
|
5285
|
+
"snippet": "if (!fs.existsSync(fp)) continue;",
|
|
5286
|
+
"fix": {
|
|
5287
|
+
"description": "Replace the check-then-act sequence with a single atomic operation (e.g., `fs.open` with appropriate flags). Between `existsSync` and the file op the file can be replaced by a symlink or removed.",
|
|
5288
|
+
"code": ""
|
|
5289
|
+
},
|
|
5290
|
+
"blastRadius": {
|
|
5291
|
+
"scope": "all-users",
|
|
5292
|
+
"dataAtRisk": [
|
|
5293
|
+
"config"
|
|
5294
|
+
],
|
|
5295
|
+
"userCount": 50,
|
|
5296
|
+
"industry": "generic",
|
|
5297
|
+
"jurisdictions": [],
|
|
5298
|
+
"controlsApplied": [],
|
|
5299
|
+
"dollarBest": 23250,
|
|
5300
|
+
"dollarLikely": 136250,
|
|
5301
|
+
"dollarWorst": 775000,
|
|
5302
|
+
"dollarLow": 23250,
|
|
5303
|
+
"dollarHigh": 775000,
|
|
5304
|
+
"components": {
|
|
5305
|
+
"incidentResponse": {
|
|
5306
|
+
"low": 8000,
|
|
5307
|
+
"likely": 50000,
|
|
5308
|
+
"high": 250000
|
|
5309
|
+
},
|
|
5310
|
+
"legal": {
|
|
5311
|
+
"low": 10000,
|
|
5312
|
+
"likely": 75000,
|
|
5313
|
+
"high": 500000
|
|
5314
|
+
},
|
|
5315
|
+
"crisisPR": {
|
|
5316
|
+
"low": 0,
|
|
5317
|
+
"likely": 0,
|
|
5318
|
+
"high": 0
|
|
5319
|
+
},
|
|
5320
|
+
"notification": {
|
|
5321
|
+
"low": 5000,
|
|
5322
|
+
"likely": 10000,
|
|
5323
|
+
"high": 15000
|
|
5324
|
+
},
|
|
5325
|
+
"creditMonitoring": {
|
|
5326
|
+
"low": 0,
|
|
5327
|
+
"likely": 0,
|
|
5328
|
+
"high": 0
|
|
5329
|
+
},
|
|
5330
|
+
"regulatoryFines": {
|
|
5331
|
+
"low": 0,
|
|
5332
|
+
"likely": 0,
|
|
5333
|
+
"high": 0
|
|
5334
|
+
},
|
|
5335
|
+
"directDamage": {
|
|
5336
|
+
"low": 250,
|
|
5337
|
+
"likely": 1250,
|
|
5338
|
+
"high": 10000
|
|
5339
|
+
},
|
|
5340
|
+
"classAction": {
|
|
5341
|
+
"low": 0,
|
|
5342
|
+
"likely": 0,
|
|
5343
|
+
"high": 0
|
|
5344
|
+
},
|
|
5345
|
+
"lostBusiness": {
|
|
5346
|
+
"low": 0,
|
|
5347
|
+
"likely": 0,
|
|
5348
|
+
"high": 0
|
|
5349
|
+
}
|
|
5350
|
+
},
|
|
5351
|
+
"dominantDriver": "legal counsel",
|
|
5352
|
+
"comparable": "Generic finding — likely cost driven by user count + jurisdiction stack",
|
|
5353
|
+
"confidence": "low",
|
|
5354
|
+
"narrative": "TOCTOU: existsSync followed by file op on `cross-service-taint.js:53` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Generic finding — likely cost driven by user count + jurisdiction stack."
|
|
5355
|
+
},
|
|
5356
|
+
"parser": "LOGIC",
|
|
5357
|
+
"family": null
|
|
5358
|
+
},
|
|
5359
|
+
{
|
|
5360
|
+
"id": "logic:cross-service-taint.js:97:TOCTOU:_existsSync_followed_by_file_op",
|
|
5361
|
+
"kind": "logic",
|
|
5362
|
+
"severity": "medium",
|
|
5363
|
+
"vuln": "TOCTOU: existsSync followed by file op",
|
|
5364
|
+
"cwe": "CWE-367",
|
|
5365
|
+
"stride": "Tampering",
|
|
5366
|
+
"file": "cross-service-taint.js",
|
|
5367
|
+
"line": 97,
|
|
5368
|
+
"snippet": "if (fs.existsSync(pkg)) {",
|
|
5369
|
+
"fix": {
|
|
5370
|
+
"description": "Replace the check-then-act sequence with a single atomic operation (e.g., `fs.open` with appropriate flags). Between `existsSync` and the file op the file can be replaced by a symlink or removed.",
|
|
5371
|
+
"code": ""
|
|
5372
|
+
},
|
|
5373
|
+
"blastRadius": {
|
|
5374
|
+
"scope": "all-users",
|
|
5375
|
+
"dataAtRisk": [
|
|
5376
|
+
"config"
|
|
5377
|
+
],
|
|
5378
|
+
"userCount": 50,
|
|
5379
|
+
"industry": "generic",
|
|
5380
|
+
"jurisdictions": [],
|
|
5381
|
+
"controlsApplied": [],
|
|
5382
|
+
"dollarBest": 23250,
|
|
5383
|
+
"dollarLikely": 136250,
|
|
5384
|
+
"dollarWorst": 775000,
|
|
5385
|
+
"dollarLow": 23250,
|
|
5386
|
+
"dollarHigh": 775000,
|
|
5387
|
+
"components": {
|
|
5388
|
+
"incidentResponse": {
|
|
5389
|
+
"low": 8000,
|
|
5390
|
+
"likely": 50000,
|
|
5391
|
+
"high": 250000
|
|
5392
|
+
},
|
|
5393
|
+
"legal": {
|
|
5394
|
+
"low": 10000,
|
|
5395
|
+
"likely": 75000,
|
|
5396
|
+
"high": 500000
|
|
5397
|
+
},
|
|
5398
|
+
"crisisPR": {
|
|
5399
|
+
"low": 0,
|
|
5400
|
+
"likely": 0,
|
|
5401
|
+
"high": 0
|
|
5402
|
+
},
|
|
5403
|
+
"notification": {
|
|
5404
|
+
"low": 5000,
|
|
5405
|
+
"likely": 10000,
|
|
5406
|
+
"high": 15000
|
|
5407
|
+
},
|
|
5408
|
+
"creditMonitoring": {
|
|
5409
|
+
"low": 0,
|
|
5410
|
+
"likely": 0,
|
|
5411
|
+
"high": 0
|
|
5412
|
+
},
|
|
5413
|
+
"regulatoryFines": {
|
|
5414
|
+
"low": 0,
|
|
5415
|
+
"likely": 0,
|
|
5416
|
+
"high": 0
|
|
5417
|
+
},
|
|
5418
|
+
"directDamage": {
|
|
5419
|
+
"low": 250,
|
|
5420
|
+
"likely": 1250,
|
|
5421
|
+
"high": 10000
|
|
5422
|
+
},
|
|
5423
|
+
"classAction": {
|
|
5424
|
+
"low": 0,
|
|
5425
|
+
"likely": 0,
|
|
5426
|
+
"high": 0
|
|
5427
|
+
},
|
|
5428
|
+
"lostBusiness": {
|
|
5429
|
+
"low": 0,
|
|
5430
|
+
"likely": 0,
|
|
5431
|
+
"high": 0
|
|
5432
|
+
}
|
|
5433
|
+
},
|
|
5434
|
+
"dominantDriver": "legal counsel",
|
|
5435
|
+
"comparable": "Generic finding — likely cost driven by user count + jurisdiction stack",
|
|
5436
|
+
"confidence": "low",
|
|
5437
|
+
"narrative": "TOCTOU: existsSync followed by file op on `cross-service-taint.js:97` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Generic finding — likely cost driven by user count + jurisdiction stack."
|
|
5438
|
+
},
|
|
5439
|
+
"parser": "LOGIC",
|
|
5440
|
+
"family": null
|
|
5441
|
+
},
|
|
5442
|
+
{
|
|
5443
|
+
"id": "logic:ifds-precise.js:177:TOCTOU:_existsSync_followed_by_file_op",
|
|
5444
|
+
"kind": "logic",
|
|
5445
|
+
"severity": "medium",
|
|
5446
|
+
"vuln": "TOCTOU: existsSync followed by file op",
|
|
5447
|
+
"cwe": "CWE-367",
|
|
5448
|
+
"stride": "Tampering",
|
|
5449
|
+
"file": "ifds-precise.js",
|
|
5450
|
+
"line": 177,
|
|
5451
|
+
"snippet": "if (!fs.existsSync(fp)) return null;",
|
|
5452
|
+
"fix": {
|
|
5453
|
+
"description": "Replace the check-then-act sequence with a single atomic operation (e.g., `fs.open` with appropriate flags). Between `existsSync` and the file op the file can be replaced by a symlink or removed.",
|
|
5454
|
+
"code": ""
|
|
5455
|
+
},
|
|
5456
|
+
"blastRadius": {
|
|
5457
|
+
"scope": "all-users",
|
|
5458
|
+
"dataAtRisk": [
|
|
5459
|
+
"config"
|
|
5460
|
+
],
|
|
5461
|
+
"userCount": 50,
|
|
5462
|
+
"industry": "generic",
|
|
5463
|
+
"jurisdictions": [],
|
|
5464
|
+
"controlsApplied": [],
|
|
5465
|
+
"dollarBest": 23250,
|
|
5466
|
+
"dollarLikely": 136250,
|
|
5467
|
+
"dollarWorst": 775000,
|
|
5468
|
+
"dollarLow": 23250,
|
|
5469
|
+
"dollarHigh": 775000,
|
|
5470
|
+
"components": {
|
|
5471
|
+
"incidentResponse": {
|
|
5472
|
+
"low": 8000,
|
|
5473
|
+
"likely": 50000,
|
|
5474
|
+
"high": 250000
|
|
5475
|
+
},
|
|
5476
|
+
"legal": {
|
|
5477
|
+
"low": 10000,
|
|
5478
|
+
"likely": 75000,
|
|
5479
|
+
"high": 500000
|
|
5480
|
+
},
|
|
5481
|
+
"crisisPR": {
|
|
5482
|
+
"low": 0,
|
|
5483
|
+
"likely": 0,
|
|
5484
|
+
"high": 0
|
|
5485
|
+
},
|
|
5486
|
+
"notification": {
|
|
5487
|
+
"low": 5000,
|
|
5488
|
+
"likely": 10000,
|
|
5489
|
+
"high": 15000
|
|
5490
|
+
},
|
|
5491
|
+
"creditMonitoring": {
|
|
5492
|
+
"low": 0,
|
|
5493
|
+
"likely": 0,
|
|
5494
|
+
"high": 0
|
|
5495
|
+
},
|
|
5496
|
+
"regulatoryFines": {
|
|
5497
|
+
"low": 0,
|
|
5498
|
+
"likely": 0,
|
|
5499
|
+
"high": 0
|
|
5500
|
+
},
|
|
5501
|
+
"directDamage": {
|
|
5502
|
+
"low": 250,
|
|
5503
|
+
"likely": 1250,
|
|
5504
|
+
"high": 10000
|
|
5505
|
+
},
|
|
5506
|
+
"classAction": {
|
|
5507
|
+
"low": 0,
|
|
5508
|
+
"likely": 0,
|
|
5509
|
+
"high": 0
|
|
5510
|
+
},
|
|
5511
|
+
"lostBusiness": {
|
|
5512
|
+
"low": 0,
|
|
5513
|
+
"likely": 0,
|
|
5514
|
+
"high": 0
|
|
5515
|
+
}
|
|
5516
|
+
},
|
|
5517
|
+
"dominantDriver": "legal counsel",
|
|
5518
|
+
"comparable": "Generic finding — likely cost driven by user count + jurisdiction stack",
|
|
5519
|
+
"confidence": "low",
|
|
5520
|
+
"narrative": "TOCTOU: existsSync followed by file op on `ifds-precise.js:177` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Generic finding — likely cost driven by user count + jurisdiction stack."
|
|
5521
|
+
},
|
|
5522
|
+
"parser": "LOGIC",
|
|
5523
|
+
"family": null
|
|
5524
|
+
},
|
|
5525
|
+
{
|
|
5526
|
+
"id": "77f1352c8462f8db",
|
|
3009
5527
|
"kind": "logic",
|
|
3010
5528
|
"severity": "medium",
|
|
3011
5529
|
"vuln": "Race Condition (TOCTOU)",
|
|
@@ -3340,7 +5858,7 @@
|
|
|
3340
5858
|
"bundles": [],
|
|
3341
5859
|
"routes": [],
|
|
3342
5860
|
"components": [],
|
|
3343
|
-
"suppressedCount":
|
|
5861
|
+
"suppressedCount": 13,
|
|
3344
5862
|
"blastRadiusSignals": {
|
|
3345
5863
|
"industry": "generic",
|
|
3346
5864
|
"industryConfidence": "low",
|
|
@@ -3358,7 +5876,7 @@
|
|
|
3358
5876
|
"_v3": {
|
|
3359
5877
|
"counterfactual": {
|
|
3360
5878
|
"spofControls": [],
|
|
3361
|
-
"controlsDetected":
|
|
5879
|
+
"controlsDetected": 343
|
|
3362
5880
|
},
|
|
3363
5881
|
"threatModel": {
|
|
3364
5882
|
"summary": {
|
|
@@ -3366,10 +5884,10 @@
|
|
|
3366
5884
|
"boundaryCount": 2,
|
|
3367
5885
|
"strideCounts": {
|
|
3368
5886
|
"spoofing": 0,
|
|
3369
|
-
"tampering":
|
|
5887
|
+
"tampering": 7,
|
|
3370
5888
|
"repudiation": 0,
|
|
3371
5889
|
"informationDisclosure": 0,
|
|
3372
|
-
"denialOfService":
|
|
5890
|
+
"denialOfService": 16,
|
|
3373
5891
|
"elevationOfPrivilege": 0
|
|
3374
5892
|
}
|
|
3375
5893
|
},
|
|
@@ -3397,12 +5915,30 @@
|
|
|
3397
5915
|
"line": 538,
|
|
3398
5916
|
"severity": "medium"
|
|
3399
5917
|
},
|
|
5918
|
+
{
|
|
5919
|
+
"vuln": "TOCTOU: file existence/permission check before open",
|
|
5920
|
+
"file": "cross-service-taint.js",
|
|
5921
|
+
"line": 53,
|
|
5922
|
+
"severity": "medium"
|
|
5923
|
+
},
|
|
5924
|
+
{
|
|
5925
|
+
"vuln": "TOCTOU: file existence/permission check before open",
|
|
5926
|
+
"file": "cross-service-taint.js",
|
|
5927
|
+
"line": 97,
|
|
5928
|
+
"severity": "medium"
|
|
5929
|
+
},
|
|
3400
5930
|
{
|
|
3401
5931
|
"vuln": "SSRF: explicit reference to cloud instance-metadata endpoint",
|
|
3402
5932
|
"file": "exploit-prover.js",
|
|
3403
5933
|
"line": 33,
|
|
3404
5934
|
"severity": "medium"
|
|
3405
5935
|
},
|
|
5936
|
+
{
|
|
5937
|
+
"vuln": "TOCTOU: file existence/permission check before open",
|
|
5938
|
+
"file": "ifds-precise.js",
|
|
5939
|
+
"line": 177,
|
|
5940
|
+
"severity": "medium"
|
|
5941
|
+
},
|
|
3406
5942
|
{
|
|
3407
5943
|
"vuln": "TOCTOU: file existence/permission check before open",
|
|
3408
5944
|
"file": "incremental.js",
|
|
@@ -3419,6 +5955,41 @@
|
|
|
3419
5955
|
"repudiation": [],
|
|
3420
5956
|
"informationDisclosure": [],
|
|
3421
5957
|
"denialOfService": [
|
|
5958
|
+
{
|
|
5959
|
+
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
5960
|
+
"file": "cross-service-taint.js",
|
|
5961
|
+
"severity": "medium"
|
|
5962
|
+
},
|
|
5963
|
+
{
|
|
5964
|
+
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
5965
|
+
"file": "cross-service-taint.js",
|
|
5966
|
+
"severity": "medium"
|
|
5967
|
+
},
|
|
5968
|
+
{
|
|
5969
|
+
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
5970
|
+
"file": "cross-service-taint.js",
|
|
5971
|
+
"severity": "medium"
|
|
5972
|
+
},
|
|
5973
|
+
{
|
|
5974
|
+
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
5975
|
+
"file": "cross-service-taint.js",
|
|
5976
|
+
"severity": "medium"
|
|
5977
|
+
},
|
|
5978
|
+
{
|
|
5979
|
+
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
5980
|
+
"file": "ifds-precise.js",
|
|
5981
|
+
"severity": "medium"
|
|
5982
|
+
},
|
|
5983
|
+
{
|
|
5984
|
+
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
5985
|
+
"file": "ifds-precise.js",
|
|
5986
|
+
"severity": "medium"
|
|
5987
|
+
},
|
|
5988
|
+
{
|
|
5989
|
+
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
5990
|
+
"file": "ifds-precise.js",
|
|
5991
|
+
"severity": "medium"
|
|
5992
|
+
},
|
|
3422
5993
|
{
|
|
3423
5994
|
"vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
|
|
3424
5995
|
"file": "incremental.js",
|