@clear-capabilities/agentic-security-scanner 0.78.0 → 0.79.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.
Files changed (76) hide show
  1. package/bin/.agentic-security/findings.json +16 -16
  2. package/bin/.agentic-security/last-scan.json +16 -16
  3. package/bin/.agentic-security/last-scan.json.sig +1 -1
  4. package/bin/.agentic-security/scan-history.json +51 -0
  5. package/bin/.agentic-security/streak.json +5 -5
  6. package/bin/agentic-security.js +22 -7
  7. package/dist/178.index.js +1 -1
  8. package/dist/384.index.js +1 -1
  9. package/dist/476.index.js +5 -5
  10. package/dist/637.index.js +1 -1
  11. package/dist/700.index.js +138 -0
  12. package/dist/718.index.js +53 -0
  13. package/dist/838.index.js +1 -1
  14. package/dist/985.index.js +5 -0
  15. package/dist/agentic-security.mjs +1 -1
  16. package/dist/agentic-security.mjs.sha256 +1 -1
  17. package/package.json +2 -2
  18. package/src/dataflow/engine.js +52 -8
  19. package/src/engine.js +107 -6
  20. package/src/integrations/index.js +2 -1
  21. package/src/ir/callgraph.js +27 -7
  22. package/src/llm-validator/index.js +7 -5
  23. package/src/mcp/audit.js +5 -0
  24. package/src/posture/calibration-drift.js +2 -1
  25. package/src/posture/calibration.js +3 -2
  26. package/src/posture/fix-history.js +8 -2
  27. package/src/posture/profile.js +4 -5
  28. package/src/posture/rule-overrides.js +2 -3
  29. package/src/posture/rule-pack-signing.js +2 -3
  30. package/src/posture/rule-synthesis.js +5 -6
  31. package/src/posture/security-trend.js +4 -7
  32. package/src/posture/state-dir.js +124 -0
  33. package/src/posture/streak.js +3 -0
  34. package/src/posture/suppressions.js +5 -8
  35. package/src/posture/triage.js +3 -5
  36. package/src/posture/validator-metrics.js +3 -6
  37. package/src/sast/db-taint.js +24 -0
  38. package/src/sast/rust.js +26 -0
  39. package/src/sca/binary-metadata.js +124 -0
  40. package/src/sca/py-package-functions.js +118 -0
  41. package/src/sca/vendor-detect.js +53 -0
  42. package/src/.agentic-security/findings.json +0 -82642
  43. package/src/.agentic-security/last-scan.json +0 -82642
  44. package/src/.agentic-security/last-scan.json.sig +0 -1
  45. package/src/.agentic-security/scan-history.json +0 -10054
  46. package/src/.agentic-security/streak.json +0 -21
  47. package/src/dataflow/.agentic-security/findings.json +0 -3515
  48. package/src/dataflow/.agentic-security/last-scan.json +0 -3515
  49. package/src/dataflow/.agentic-security/last-scan.json.sig +0 -1
  50. package/src/dataflow/.agentic-security/scan-history.json +0 -702
  51. package/src/dataflow/.agentic-security/streak.json +0 -22
  52. package/src/ir/.agentic-security/findings.json +0 -3777
  53. package/src/ir/.agentic-security/last-scan.json +0 -3777
  54. package/src/ir/.agentic-security/last-scan.json.sig +0 -1
  55. package/src/ir/.agentic-security/scan-history.json +0 -771
  56. package/src/ir/.agentic-security/streak.json +0 -21
  57. package/src/posture/.agentic-security/findings.json +0 -51562
  58. package/src/posture/.agentic-security/last-scan.json +0 -51562
  59. package/src/posture/.agentic-security/last-scan.json.sig +0 -1
  60. package/src/posture/.agentic-security/scan-history.json +0 -650
  61. package/src/posture/.agentic-security/streak.json +0 -20
  62. package/src/report/.agentic-security/findings.json +0 -80
  63. package/src/report/.agentic-security/last-scan.json +0 -80
  64. package/src/report/.agentic-security/last-scan.json.sig +0 -1
  65. package/src/report/.agentic-security/scan-history.json +0 -35
  66. package/src/report/.agentic-security/streak.json +0 -22
  67. package/src/sast/.agentic-security/findings.json +0 -5190
  68. package/src/sast/.agentic-security/last-scan.json +0 -5190
  69. package/src/sast/.agentic-security/last-scan.json.sig +0 -1
  70. package/src/sast/.agentic-security/scan-history.json +0 -408
  71. package/src/sast/.agentic-security/streak.json +0 -20
  72. package/src/sca/.agentic-security/findings.json +0 -1587
  73. package/src/sca/.agentic-security/last-scan.json +0 -1587
  74. package/src/sca/.agentic-security/last-scan.json.sig +0 -1
  75. package/src/sca/.agentic-security/scan-history.json +0 -36
  76. package/src/sca/.agentic-security/streak.json +0 -21
@@ -1,3777 +0,0 @@
1
- {
2
- "scanId": "1a8e7623-7074-46ec-9fe6-a8a0d25ee3c6",
3
- "startedAt": "2026-05-27T02:22:41.834Z",
4
- "durationMs": 363,
5
- "scanned": {
6
- "files": 15,
7
- "lines": 0
8
- },
9
- "findings": [
10
- {
11
- "id": "struct:parser-cs.js:208:Mass_Assignment_(req.body_Direct_to_Model)",
12
- "kind": "sast",
13
- "severity": "high",
14
- "vuln": "Mass Assignment (req.body Direct to Model)",
15
- "cwe": "CWE-915",
16
- "owaspLlm": null,
17
- "stride": "Tampering",
18
- "file": "parser-cs.js",
19
- "line": 208,
20
- "snippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
21
- "fix": null,
22
- "reachable": false,
23
- "triage": 39,
24
- "dataClasses": [],
25
- "chain": null,
26
- "confidence": 0.314,
27
- "toxicity": 35,
28
- "toxicityFactors": [
29
- "high-severity",
30
- "http-facing"
31
- ],
32
- "toxicityLabel": "Medium",
33
- "sources": null,
34
- "epssScore": null,
35
- "epssPercentile": null,
36
- "epssCve": null,
37
- "exploitedNow": false,
38
- "tags": null,
39
- "blastRadius": {
40
- "scope": "all-users",
41
- "dataAtRisk": [
42
- "config"
43
- ],
44
- "userCount": 50,
45
- "industry": "generic",
46
- "jurisdictions": [],
47
- "controlsApplied": [],
48
- "dollarBest": 23250,
49
- "dollarLikely": 136250,
50
- "dollarWorst": 775000,
51
- "dollarLow": 23250,
52
- "dollarHigh": 775000,
53
- "components": {
54
- "incidentResponse": {
55
- "low": 8000,
56
- "likely": 50000,
57
- "high": 250000
58
- },
59
- "legal": {
60
- "low": 10000,
61
- "likely": 75000,
62
- "high": 500000
63
- },
64
- "crisisPR": {
65
- "low": 0,
66
- "likely": 0,
67
- "high": 0
68
- },
69
- "notification": {
70
- "low": 5000,
71
- "likely": 10000,
72
- "high": 15000
73
- },
74
- "creditMonitoring": {
75
- "low": 0,
76
- "likely": 0,
77
- "high": 0
78
- },
79
- "regulatoryFines": {
80
- "low": 0,
81
- "likely": 0,
82
- "high": 0
83
- },
84
- "directDamage": {
85
- "low": 250,
86
- "likely": 1250,
87
- "high": 10000
88
- },
89
- "classAction": {
90
- "low": 0,
91
- "likely": 0,
92
- "high": 0
93
- },
94
- "lostBusiness": {
95
- "low": 0,
96
- "likely": 0,
97
- "high": 0
98
- }
99
- },
100
- "dominantDriver": "legal counsel",
101
- "comparable": "GitHub mass-assignment 2012 → public ridicule + emergency rebuild",
102
- "confidence": "low",
103
- "narrative": "Mass Assignment (req.body Direct to Model) on `parser-cs.js:208` 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: GitHub mass-assignment 2012 → public ridicule + emergency rebuild."
104
- },
105
- "stableId": "1881a55e55ca05ef",
106
- "confidenceTier": "low",
107
- "exploitability": 0.45,
108
- "exploitabilityTier": "medium",
109
- "exploitabilityFactors": [
110
- "sev:high",
111
- "unreachable"
112
- ],
113
- "clusterSize": null,
114
- "unreachable": false,
115
- "validator_verdict": "unvalidated",
116
- "llm_confidence": null,
117
- "unvalidated": true,
118
- "cross_language": false,
119
- "family": "mass-assignment",
120
- "parser": "STRUCTURAL",
121
- "_unsigned": false,
122
- "_passThroughSigning": false,
123
- "signatureStatus": "verified",
124
- "regression_test": null,
125
- "poc": null,
126
- "calibrated_confidence": null,
127
- "calibrated_confidence_ci": null,
128
- "calibrated_n": 5,
129
- "calibration_reason": "insufficient-samples",
130
- "verifier_verdict": "cannot-verify",
131
- "verifier_reason": "no-poc-no-sanitizer-rule",
132
- "verifier_runner": null,
133
- "narration": "A finding of type \"Mass Assignment (req.body Direct to Model)\" at parser-cs.js:?. Severity: high. Review the remediation field for class-specific guidance.",
134
- "mitigationVerdict": "unreachable-in-prod",
135
- "mitigationsApplied": [],
136
- "mitigatedByWaf": false,
137
- "wafRuleId": null,
138
- "mitigatedByAuth": false,
139
- "authMechanism": null,
140
- "mitigatedByNetwork": false,
141
- "networkExposure": null,
142
- "featureFlag": null,
143
- "featureFlagState": null,
144
- "featureFlagRollout": null,
145
- "exposedInProd": false,
146
- "unreachableInProd": true,
147
- "coldPath": false,
148
- "hotPath": false,
149
- "prodRequestCount": null,
150
- "crownJewelScore": 0.15,
151
- "crownJewelTier": "low-value",
152
- "crownJewelFactors": [
153
- "shell-execution"
154
- ],
155
- "cloneClusterId": "a0c829a31c63bf1a",
156
- "cloneClusterSize": 5,
157
- "provenance": "human-likely",
158
- "provenanceScore": 0.08,
159
- "typeNarrowed": null,
160
- "strideCategory": null,
161
- "personaScores": {
162
- "script-kiddie": {
163
- "score": 0.65,
164
- "tier": "high",
165
- "factors": [
166
- "sev:high"
167
- ]
168
- },
169
- "opportunistic-criminal": {
170
- "score": 0.85,
171
- "tier": "critical",
172
- "factors": [
173
- "sev:high",
174
- "bias:mass-assignment+0.20"
175
- ]
176
- },
177
- "apt-nation-state": {
178
- "score": 0.65,
179
- "tier": "high",
180
- "factors": [
181
- "sev:high"
182
- ]
183
- },
184
- "supply-chain-attacker": {
185
- "score": 0.65,
186
- "tier": "high",
187
- "factors": [
188
- "sev:high"
189
- ]
190
- },
191
- "malicious-insider": {
192
- "score": 1,
193
- "tier": "critical",
194
- "factors": [
195
- "sev:high",
196
- "bias:mass-assignment+0.25",
197
- "authz-bypass-favored"
198
- ]
199
- }
200
- },
201
- "personaTopTwo": [
202
- "malicious-insider",
203
- "opportunistic-criminal"
204
- ],
205
- "personaMaxName": "malicious-insider",
206
- "personaMaxScore": 1,
207
- "reverseExposure": null,
208
- "specMined": null,
209
- "whyFired": {
210
- "detector": "sast/mass-assignment",
211
- "ruleId": "CWE-915",
212
- "parser": "STRUCTURAL",
213
- "evidence": {
214
- "sinkSnippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
215
- "sourceSnippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
216
- "pathSteps": [],
217
- "sanitizers": [],
218
- "guards": []
219
- },
220
- "considered": {
221
- "suppressionsApplied": [],
222
- "suppressionsSkipped": [],
223
- "reachabilityFilter": "unaffected",
224
- "clusterCollapsed": false,
225
- "typeNarrowed": false,
226
- "crownJewelTier": "low-value",
227
- "mitigationVerdict": "unreachable-in-prod"
228
- },
229
- "scanner": {
230
- "rulesetVersion": null,
231
- "packHash": null,
232
- "modelId": null
233
- }
234
- },
235
- "adversaryTranscript": null,
236
- "predictedBountyUsd": {
237
- "low": 50,
238
- "likely": 200,
239
- "high": 600,
240
- "program": "web2"
241
- },
242
- "bountyConfidence": "medium",
243
- "attackPlaybook": {
244
- "cwe": "CWE-915",
245
- "kind": "curl",
246
- "title": "Mass assignment — privilege escalation probe",
247
- "instruction": "Submit an extra field (role) on profile update; verify it sticks.",
248
- "script": "# AUTHORIZED USE ONLY — run only against systems you own or have explicit permission to test.\n# CWE-915 — Mass assignment\ncurl -s -i -X PATCH \"${TARGET_URL}/api/me\" \\\n -H \"Authorization: Bearer ${TEST_TOKEN}\" -H \"Content-Type: application/json\" \\\n -d '{\"name\":\"x\",\"role\":\"admin\"}'\n# Confirmed when subsequent /api/me returns role=admin.",
249
- "ethics": "# AUTHORIZED USE ONLY — run only against systems you own or have explicit permission to test."
250
- }
251
- },
252
- {
253
- "id": "struct:parser-go.js:253:Mass_Assignment_(req.body_Direct_to_Model)",
254
- "kind": "sast",
255
- "severity": "high",
256
- "vuln": "Mass Assignment (req.body Direct to Model)",
257
- "cwe": "CWE-915",
258
- "owaspLlm": null,
259
- "stride": "Tampering",
260
- "file": "parser-go.js",
261
- "line": 253,
262
- "snippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
263
- "fix": null,
264
- "reachable": false,
265
- "triage": 39,
266
- "dataClasses": [],
267
- "chain": null,
268
- "confidence": 0.314,
269
- "toxicity": 35,
270
- "toxicityFactors": [
271
- "high-severity",
272
- "http-facing"
273
- ],
274
- "toxicityLabel": "Medium",
275
- "sources": null,
276
- "epssScore": null,
277
- "epssPercentile": null,
278
- "epssCve": null,
279
- "exploitedNow": false,
280
- "tags": null,
281
- "blastRadius": {
282
- "scope": "all-users",
283
- "dataAtRisk": [
284
- "config"
285
- ],
286
- "userCount": 50,
287
- "industry": "generic",
288
- "jurisdictions": [],
289
- "controlsApplied": [],
290
- "dollarBest": 23250,
291
- "dollarLikely": 136250,
292
- "dollarWorst": 775000,
293
- "dollarLow": 23250,
294
- "dollarHigh": 775000,
295
- "components": {
296
- "incidentResponse": {
297
- "low": 8000,
298
- "likely": 50000,
299
- "high": 250000
300
- },
301
- "legal": {
302
- "low": 10000,
303
- "likely": 75000,
304
- "high": 500000
305
- },
306
- "crisisPR": {
307
- "low": 0,
308
- "likely": 0,
309
- "high": 0
310
- },
311
- "notification": {
312
- "low": 5000,
313
- "likely": 10000,
314
- "high": 15000
315
- },
316
- "creditMonitoring": {
317
- "low": 0,
318
- "likely": 0,
319
- "high": 0
320
- },
321
- "regulatoryFines": {
322
- "low": 0,
323
- "likely": 0,
324
- "high": 0
325
- },
326
- "directDamage": {
327
- "low": 250,
328
- "likely": 1250,
329
- "high": 10000
330
- },
331
- "classAction": {
332
- "low": 0,
333
- "likely": 0,
334
- "high": 0
335
- },
336
- "lostBusiness": {
337
- "low": 0,
338
- "likely": 0,
339
- "high": 0
340
- }
341
- },
342
- "dominantDriver": "legal counsel",
343
- "comparable": "GitHub mass-assignment 2012 → public ridicule + emergency rebuild",
344
- "confidence": "low",
345
- "narrative": "Mass Assignment (req.body Direct to Model) on `parser-go.js:253` 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: GitHub mass-assignment 2012 → public ridicule + emergency rebuild."
346
- },
347
- "stableId": "a28da8de4671367b",
348
- "confidenceTier": "low",
349
- "exploitability": 0.45,
350
- "exploitabilityTier": "medium",
351
- "exploitabilityFactors": [
352
- "sev:high",
353
- "unreachable"
354
- ],
355
- "clusterSize": null,
356
- "unreachable": false,
357
- "validator_verdict": "unvalidated",
358
- "llm_confidence": null,
359
- "unvalidated": true,
360
- "cross_language": false,
361
- "family": "mass-assignment",
362
- "parser": "STRUCTURAL",
363
- "_unsigned": false,
364
- "_passThroughSigning": false,
365
- "signatureStatus": "verified",
366
- "regression_test": null,
367
- "poc": null,
368
- "calibrated_confidence": null,
369
- "calibrated_confidence_ci": null,
370
- "calibrated_n": 5,
371
- "calibration_reason": "insufficient-samples",
372
- "verifier_verdict": "cannot-verify",
373
- "verifier_reason": "no-poc-no-sanitizer-rule",
374
- "verifier_runner": null,
375
- "narration": "A finding of type \"Mass Assignment (req.body Direct to Model)\" at parser-go.js:?. Severity: high. Review the remediation field for class-specific guidance.",
376
- "mitigationVerdict": "unreachable-in-prod",
377
- "mitigationsApplied": [],
378
- "mitigatedByWaf": false,
379
- "wafRuleId": null,
380
- "mitigatedByAuth": false,
381
- "authMechanism": null,
382
- "mitigatedByNetwork": false,
383
- "networkExposure": null,
384
- "featureFlag": null,
385
- "featureFlagState": null,
386
- "featureFlagRollout": null,
387
- "exposedInProd": false,
388
- "unreachableInProd": true,
389
- "coldPath": false,
390
- "hotPath": false,
391
- "prodRequestCount": null,
392
- "crownJewelScore": 0.15,
393
- "crownJewelTier": "low-value",
394
- "crownJewelFactors": [
395
- "shell-execution"
396
- ],
397
- "cloneClusterId": "a0c829a31c63bf1a",
398
- "cloneClusterSize": 5,
399
- "provenance": "human-likely",
400
- "provenanceScore": 0,
401
- "typeNarrowed": null,
402
- "strideCategory": null,
403
- "personaScores": {
404
- "script-kiddie": {
405
- "score": 0.65,
406
- "tier": "high",
407
- "factors": [
408
- "sev:high"
409
- ]
410
- },
411
- "opportunistic-criminal": {
412
- "score": 0.85,
413
- "tier": "critical",
414
- "factors": [
415
- "sev:high",
416
- "bias:mass-assignment+0.20"
417
- ]
418
- },
419
- "apt-nation-state": {
420
- "score": 0.65,
421
- "tier": "high",
422
- "factors": [
423
- "sev:high"
424
- ]
425
- },
426
- "supply-chain-attacker": {
427
- "score": 0.65,
428
- "tier": "high",
429
- "factors": [
430
- "sev:high"
431
- ]
432
- },
433
- "malicious-insider": {
434
- "score": 1,
435
- "tier": "critical",
436
- "factors": [
437
- "sev:high",
438
- "bias:mass-assignment+0.25",
439
- "authz-bypass-favored"
440
- ]
441
- }
442
- },
443
- "personaTopTwo": [
444
- "malicious-insider",
445
- "opportunistic-criminal"
446
- ],
447
- "personaMaxName": "malicious-insider",
448
- "personaMaxScore": 1,
449
- "reverseExposure": null,
450
- "specMined": null,
451
- "whyFired": {
452
- "detector": "sast/mass-assignment",
453
- "ruleId": "CWE-915",
454
- "parser": "STRUCTURAL",
455
- "evidence": {
456
- "sinkSnippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
457
- "sourceSnippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
458
- "pathSteps": [],
459
- "sanitizers": [],
460
- "guards": []
461
- },
462
- "considered": {
463
- "suppressionsApplied": [],
464
- "suppressionsSkipped": [],
465
- "reachabilityFilter": "unaffected",
466
- "clusterCollapsed": false,
467
- "typeNarrowed": false,
468
- "crownJewelTier": "low-value",
469
- "mitigationVerdict": "unreachable-in-prod"
470
- },
471
- "scanner": {
472
- "rulesetVersion": null,
473
- "packHash": null,
474
- "modelId": null
475
- }
476
- },
477
- "adversaryTranscript": null,
478
- "predictedBountyUsd": {
479
- "low": 50,
480
- "likely": 200,
481
- "high": 600,
482
- "program": "web2"
483
- },
484
- "bountyConfidence": "medium",
485
- "attackPlaybook": {
486
- "cwe": "CWE-915",
487
- "kind": "curl",
488
- "title": "Mass assignment — privilege escalation probe",
489
- "instruction": "Submit an extra field (role) on profile update; verify it sticks.",
490
- "script": "# AUTHORIZED USE ONLY — run only against systems you own or have explicit permission to test.\n# CWE-915 — Mass assignment\ncurl -s -i -X PATCH \"${TARGET_URL}/api/me\" \\\n -H \"Authorization: Bearer ${TEST_TOKEN}\" -H \"Content-Type: application/json\" \\\n -d '{\"name\":\"x\",\"role\":\"admin\"}'\n# Confirmed when subsequent /api/me returns role=admin.",
491
- "ethics": "# AUTHORIZED USE ONLY — run only against systems you own or have explicit permission to test."
492
- }
493
- },
494
- {
495
- "id": "struct:parser-kt.js:207:Mass_Assignment_(req.body_Direct_to_Model)",
496
- "kind": "sast",
497
- "severity": "high",
498
- "vuln": "Mass Assignment (req.body Direct to Model)",
499
- "cwe": "CWE-915",
500
- "owaspLlm": null,
501
- "stride": "Tampering",
502
- "file": "parser-kt.js",
503
- "line": 207,
504
- "snippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
505
- "fix": null,
506
- "reachable": false,
507
- "triage": 39,
508
- "dataClasses": [],
509
- "chain": null,
510
- "confidence": 0.314,
511
- "toxicity": 35,
512
- "toxicityFactors": [
513
- "high-severity",
514
- "http-facing"
515
- ],
516
- "toxicityLabel": "Medium",
517
- "sources": null,
518
- "epssScore": null,
519
- "epssPercentile": null,
520
- "epssCve": null,
521
- "exploitedNow": false,
522
- "tags": null,
523
- "blastRadius": {
524
- "scope": "all-users",
525
- "dataAtRisk": [
526
- "config"
527
- ],
528
- "userCount": 50,
529
- "industry": "generic",
530
- "jurisdictions": [],
531
- "controlsApplied": [],
532
- "dollarBest": 23250,
533
- "dollarLikely": 136250,
534
- "dollarWorst": 775000,
535
- "dollarLow": 23250,
536
- "dollarHigh": 775000,
537
- "components": {
538
- "incidentResponse": {
539
- "low": 8000,
540
- "likely": 50000,
541
- "high": 250000
542
- },
543
- "legal": {
544
- "low": 10000,
545
- "likely": 75000,
546
- "high": 500000
547
- },
548
- "crisisPR": {
549
- "low": 0,
550
- "likely": 0,
551
- "high": 0
552
- },
553
- "notification": {
554
- "low": 5000,
555
- "likely": 10000,
556
- "high": 15000
557
- },
558
- "creditMonitoring": {
559
- "low": 0,
560
- "likely": 0,
561
- "high": 0
562
- },
563
- "regulatoryFines": {
564
- "low": 0,
565
- "likely": 0,
566
- "high": 0
567
- },
568
- "directDamage": {
569
- "low": 250,
570
- "likely": 1250,
571
- "high": 10000
572
- },
573
- "classAction": {
574
- "low": 0,
575
- "likely": 0,
576
- "high": 0
577
- },
578
- "lostBusiness": {
579
- "low": 0,
580
- "likely": 0,
581
- "high": 0
582
- }
583
- },
584
- "dominantDriver": "legal counsel",
585
- "comparable": "GitHub mass-assignment 2012 → public ridicule + emergency rebuild",
586
- "confidence": "low",
587
- "narrative": "Mass Assignment (req.body Direct to Model) on `parser-kt.js:207` 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: GitHub mass-assignment 2012 → public ridicule + emergency rebuild."
588
- },
589
- "stableId": "2fc3bac9558c1472",
590
- "confidenceTier": "low",
591
- "exploitability": 0.45,
592
- "exploitabilityTier": "medium",
593
- "exploitabilityFactors": [
594
- "sev:high",
595
- "unreachable"
596
- ],
597
- "clusterSize": null,
598
- "unreachable": false,
599
- "validator_verdict": "unvalidated",
600
- "llm_confidence": null,
601
- "unvalidated": true,
602
- "cross_language": false,
603
- "family": "mass-assignment",
604
- "parser": "STRUCTURAL",
605
- "_unsigned": false,
606
- "_passThroughSigning": false,
607
- "signatureStatus": "verified",
608
- "regression_test": null,
609
- "poc": null,
610
- "calibrated_confidence": null,
611
- "calibrated_confidence_ci": null,
612
- "calibrated_n": 5,
613
- "calibration_reason": "insufficient-samples",
614
- "verifier_verdict": "cannot-verify",
615
- "verifier_reason": "no-poc-no-sanitizer-rule",
616
- "verifier_runner": null,
617
- "narration": "A finding of type \"Mass Assignment (req.body Direct to Model)\" at parser-kt.js:?. Severity: high. Review the remediation field for class-specific guidance.",
618
- "mitigationVerdict": "unreachable-in-prod",
619
- "mitigationsApplied": [],
620
- "mitigatedByWaf": false,
621
- "wafRuleId": null,
622
- "mitigatedByAuth": false,
623
- "authMechanism": null,
624
- "mitigatedByNetwork": false,
625
- "networkExposure": null,
626
- "featureFlag": null,
627
- "featureFlagState": null,
628
- "featureFlagRollout": null,
629
- "exposedInProd": false,
630
- "unreachableInProd": true,
631
- "coldPath": false,
632
- "hotPath": false,
633
- "prodRequestCount": null,
634
- "crownJewelScore": 0.15,
635
- "crownJewelTier": "low-value",
636
- "crownJewelFactors": [
637
- "shell-execution"
638
- ],
639
- "cloneClusterId": "a0c829a31c63bf1a",
640
- "cloneClusterSize": 5,
641
- "provenance": "human-likely",
642
- "provenanceScore": 0,
643
- "typeNarrowed": null,
644
- "strideCategory": null,
645
- "personaScores": {
646
- "script-kiddie": {
647
- "score": 0.65,
648
- "tier": "high",
649
- "factors": [
650
- "sev:high"
651
- ]
652
- },
653
- "opportunistic-criminal": {
654
- "score": 0.85,
655
- "tier": "critical",
656
- "factors": [
657
- "sev:high",
658
- "bias:mass-assignment+0.20"
659
- ]
660
- },
661
- "apt-nation-state": {
662
- "score": 0.65,
663
- "tier": "high",
664
- "factors": [
665
- "sev:high"
666
- ]
667
- },
668
- "supply-chain-attacker": {
669
- "score": 0.65,
670
- "tier": "high",
671
- "factors": [
672
- "sev:high"
673
- ]
674
- },
675
- "malicious-insider": {
676
- "score": 1,
677
- "tier": "critical",
678
- "factors": [
679
- "sev:high",
680
- "bias:mass-assignment+0.25",
681
- "authz-bypass-favored"
682
- ]
683
- }
684
- },
685
- "personaTopTwo": [
686
- "malicious-insider",
687
- "opportunistic-criminal"
688
- ],
689
- "personaMaxName": "malicious-insider",
690
- "personaMaxScore": 1,
691
- "reverseExposure": null,
692
- "specMined": null,
693
- "whyFired": {
694
- "detector": "sast/mass-assignment",
695
- "ruleId": "CWE-915",
696
- "parser": "STRUCTURAL",
697
- "evidence": {
698
- "sinkSnippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
699
- "sourceSnippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
700
- "pathSteps": [],
701
- "sanitizers": [],
702
- "guards": []
703
- },
704
- "considered": {
705
- "suppressionsApplied": [],
706
- "suppressionsSkipped": [],
707
- "reachabilityFilter": "unaffected",
708
- "clusterCollapsed": false,
709
- "typeNarrowed": false,
710
- "crownJewelTier": "low-value",
711
- "mitigationVerdict": "unreachable-in-prod"
712
- },
713
- "scanner": {
714
- "rulesetVersion": null,
715
- "packHash": null,
716
- "modelId": null
717
- }
718
- },
719
- "adversaryTranscript": null,
720
- "predictedBountyUsd": {
721
- "low": 50,
722
- "likely": 200,
723
- "high": 600,
724
- "program": "web2"
725
- },
726
- "bountyConfidence": "medium",
727
- "attackPlaybook": {
728
- "cwe": "CWE-915",
729
- "kind": "curl",
730
- "title": "Mass assignment — privilege escalation probe",
731
- "instruction": "Submit an extra field (role) on profile update; verify it sticks.",
732
- "script": "# AUTHORIZED USE ONLY — run only against systems you own or have explicit permission to test.\n# CWE-915 — Mass assignment\ncurl -s -i -X PATCH \"${TARGET_URL}/api/me\" \\\n -H \"Authorization: Bearer ${TEST_TOKEN}\" -H \"Content-Type: application/json\" \\\n -d '{\"name\":\"x\",\"role\":\"admin\"}'\n# Confirmed when subsequent /api/me returns role=admin.",
733
- "ethics": "# AUTHORIZED USE ONLY — run only against systems you own or have explicit permission to test."
734
- }
735
- },
736
- {
737
- "id": "struct:parser-php.js:209:Mass_Assignment_(req.body_Direct_to_Model)",
738
- "kind": "sast",
739
- "severity": "high",
740
- "vuln": "Mass Assignment (req.body Direct to Model)",
741
- "cwe": "CWE-915",
742
- "owaspLlm": null,
743
- "stride": "Tampering",
744
- "file": "parser-php.js",
745
- "line": 209,
746
- "snippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
747
- "fix": null,
748
- "reachable": false,
749
- "triage": 39,
750
- "dataClasses": [],
751
- "chain": null,
752
- "confidence": 0.314,
753
- "toxicity": 35,
754
- "toxicityFactors": [
755
- "high-severity",
756
- "http-facing"
757
- ],
758
- "toxicityLabel": "Medium",
759
- "sources": null,
760
- "epssScore": null,
761
- "epssPercentile": null,
762
- "epssCve": null,
763
- "exploitedNow": false,
764
- "tags": null,
765
- "blastRadius": {
766
- "scope": "all-users",
767
- "dataAtRisk": [
768
- "config"
769
- ],
770
- "userCount": 50,
771
- "industry": "generic",
772
- "jurisdictions": [],
773
- "controlsApplied": [],
774
- "dollarBest": 23250,
775
- "dollarLikely": 136250,
776
- "dollarWorst": 775000,
777
- "dollarLow": 23250,
778
- "dollarHigh": 775000,
779
- "components": {
780
- "incidentResponse": {
781
- "low": 8000,
782
- "likely": 50000,
783
- "high": 250000
784
- },
785
- "legal": {
786
- "low": 10000,
787
- "likely": 75000,
788
- "high": 500000
789
- },
790
- "crisisPR": {
791
- "low": 0,
792
- "likely": 0,
793
- "high": 0
794
- },
795
- "notification": {
796
- "low": 5000,
797
- "likely": 10000,
798
- "high": 15000
799
- },
800
- "creditMonitoring": {
801
- "low": 0,
802
- "likely": 0,
803
- "high": 0
804
- },
805
- "regulatoryFines": {
806
- "low": 0,
807
- "likely": 0,
808
- "high": 0
809
- },
810
- "directDamage": {
811
- "low": 250,
812
- "likely": 1250,
813
- "high": 10000
814
- },
815
- "classAction": {
816
- "low": 0,
817
- "likely": 0,
818
- "high": 0
819
- },
820
- "lostBusiness": {
821
- "low": 0,
822
- "likely": 0,
823
- "high": 0
824
- }
825
- },
826
- "dominantDriver": "legal counsel",
827
- "comparable": "GitHub mass-assignment 2012 → public ridicule + emergency rebuild",
828
- "confidence": "low",
829
- "narrative": "Mass Assignment (req.body Direct to Model) on `parser-php.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: GitHub mass-assignment 2012 → public ridicule + emergency rebuild."
830
- },
831
- "stableId": "b73364b3c23bcce8",
832
- "confidenceTier": "low",
833
- "exploitability": 0.45,
834
- "exploitabilityTier": "medium",
835
- "exploitabilityFactors": [
836
- "sev:high",
837
- "unreachable"
838
- ],
839
- "clusterSize": null,
840
- "unreachable": false,
841
- "validator_verdict": "unvalidated",
842
- "llm_confidence": null,
843
- "unvalidated": true,
844
- "cross_language": false,
845
- "family": "mass-assignment",
846
- "parser": "STRUCTURAL",
847
- "_unsigned": false,
848
- "_passThroughSigning": false,
849
- "signatureStatus": "verified",
850
- "regression_test": null,
851
- "poc": null,
852
- "calibrated_confidence": null,
853
- "calibrated_confidence_ci": null,
854
- "calibrated_n": 5,
855
- "calibration_reason": "insufficient-samples",
856
- "verifier_verdict": "cannot-verify",
857
- "verifier_reason": "no-poc-no-sanitizer-rule",
858
- "verifier_runner": null,
859
- "narration": "A finding of type \"Mass Assignment (req.body Direct to Model)\" at parser-php.js:?. Severity: high. Review the remediation field for class-specific guidance.",
860
- "mitigationVerdict": "unreachable-in-prod",
861
- "mitigationsApplied": [],
862
- "mitigatedByWaf": false,
863
- "wafRuleId": null,
864
- "mitigatedByAuth": false,
865
- "authMechanism": null,
866
- "mitigatedByNetwork": false,
867
- "networkExposure": null,
868
- "featureFlag": null,
869
- "featureFlagState": null,
870
- "featureFlagRollout": null,
871
- "exposedInProd": false,
872
- "unreachableInProd": true,
873
- "coldPath": false,
874
- "hotPath": false,
875
- "prodRequestCount": null,
876
- "crownJewelScore": 0.15,
877
- "crownJewelTier": "low-value",
878
- "crownJewelFactors": [
879
- "shell-execution"
880
- ],
881
- "cloneClusterId": "a0c829a31c63bf1a",
882
- "cloneClusterSize": 5,
883
- "provenance": "human-likely",
884
- "provenanceScore": 0,
885
- "typeNarrowed": null,
886
- "strideCategory": null,
887
- "personaScores": {
888
- "script-kiddie": {
889
- "score": 0.65,
890
- "tier": "high",
891
- "factors": [
892
- "sev:high"
893
- ]
894
- },
895
- "opportunistic-criminal": {
896
- "score": 0.85,
897
- "tier": "critical",
898
- "factors": [
899
- "sev:high",
900
- "bias:mass-assignment+0.20"
901
- ]
902
- },
903
- "apt-nation-state": {
904
- "score": 0.65,
905
- "tier": "high",
906
- "factors": [
907
- "sev:high"
908
- ]
909
- },
910
- "supply-chain-attacker": {
911
- "score": 0.65,
912
- "tier": "high",
913
- "factors": [
914
- "sev:high"
915
- ]
916
- },
917
- "malicious-insider": {
918
- "score": 1,
919
- "tier": "critical",
920
- "factors": [
921
- "sev:high",
922
- "bias:mass-assignment+0.25",
923
- "authz-bypass-favored"
924
- ]
925
- }
926
- },
927
- "personaTopTwo": [
928
- "malicious-insider",
929
- "opportunistic-criminal"
930
- ],
931
- "personaMaxName": "malicious-insider",
932
- "personaMaxScore": 1,
933
- "reverseExposure": null,
934
- "specMined": null,
935
- "whyFired": {
936
- "detector": "sast/mass-assignment",
937
- "ruleId": "CWE-915",
938
- "parser": "STRUCTURAL",
939
- "evidence": {
940
- "sinkSnippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
941
- "sourceSnippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
942
- "pathSteps": [],
943
- "sanitizers": [],
944
- "guards": []
945
- },
946
- "considered": {
947
- "suppressionsApplied": [],
948
- "suppressionsSkipped": [],
949
- "reachabilityFilter": "unaffected",
950
- "clusterCollapsed": false,
951
- "typeNarrowed": false,
952
- "crownJewelTier": "low-value",
953
- "mitigationVerdict": "unreachable-in-prod"
954
- },
955
- "scanner": {
956
- "rulesetVersion": null,
957
- "packHash": null,
958
- "modelId": null
959
- }
960
- },
961
- "adversaryTranscript": null,
962
- "predictedBountyUsd": {
963
- "low": 50,
964
- "likely": 200,
965
- "high": 600,
966
- "program": "web2"
967
- },
968
- "bountyConfidence": "medium",
969
- "attackPlaybook": {
970
- "cwe": "CWE-915",
971
- "kind": "curl",
972
- "title": "Mass assignment — privilege escalation probe",
973
- "instruction": "Submit an extra field (role) on profile update; verify it sticks.",
974
- "script": "# AUTHORIZED USE ONLY — run only against systems you own or have explicit permission to test.\n# CWE-915 — Mass assignment\ncurl -s -i -X PATCH \"${TARGET_URL}/api/me\" \\\n -H \"Authorization: Bearer ${TEST_TOKEN}\" -H \"Content-Type: application/json\" \\\n -d '{\"name\":\"x\",\"role\":\"admin\"}'\n# Confirmed when subsequent /api/me returns role=admin.",
975
- "ethics": "# AUTHORIZED USE ONLY — run only against systems you own or have explicit permission to test."
976
- }
977
- },
978
- {
979
- "id": "struct:parser-rb.js:201:Mass_Assignment_(req.body_Direct_to_Model)",
980
- "kind": "sast",
981
- "severity": "high",
982
- "vuln": "Mass Assignment (req.body Direct to Model)",
983
- "cwe": "CWE-915",
984
- "owaspLlm": null,
985
- "stride": "Tampering",
986
- "file": "parser-rb.js",
987
- "line": 201,
988
- "snippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
989
- "fix": null,
990
- "reachable": false,
991
- "triage": 39,
992
- "dataClasses": [],
993
- "chain": null,
994
- "confidence": 0.314,
995
- "toxicity": 35,
996
- "toxicityFactors": [
997
- "high-severity",
998
- "http-facing"
999
- ],
1000
- "toxicityLabel": "Medium",
1001
- "sources": null,
1002
- "epssScore": null,
1003
- "epssPercentile": null,
1004
- "epssCve": null,
1005
- "exploitedNow": false,
1006
- "tags": null,
1007
- "blastRadius": {
1008
- "scope": "all-users",
1009
- "dataAtRisk": [
1010
- "config"
1011
- ],
1012
- "userCount": 50,
1013
- "industry": "generic",
1014
- "jurisdictions": [],
1015
- "controlsApplied": [],
1016
- "dollarBest": 23250,
1017
- "dollarLikely": 136250,
1018
- "dollarWorst": 775000,
1019
- "dollarLow": 23250,
1020
- "dollarHigh": 775000,
1021
- "components": {
1022
- "incidentResponse": {
1023
- "low": 8000,
1024
- "likely": 50000,
1025
- "high": 250000
1026
- },
1027
- "legal": {
1028
- "low": 10000,
1029
- "likely": 75000,
1030
- "high": 500000
1031
- },
1032
- "crisisPR": {
1033
- "low": 0,
1034
- "likely": 0,
1035
- "high": 0
1036
- },
1037
- "notification": {
1038
- "low": 5000,
1039
- "likely": 10000,
1040
- "high": 15000
1041
- },
1042
- "creditMonitoring": {
1043
- "low": 0,
1044
- "likely": 0,
1045
- "high": 0
1046
- },
1047
- "regulatoryFines": {
1048
- "low": 0,
1049
- "likely": 0,
1050
- "high": 0
1051
- },
1052
- "directDamage": {
1053
- "low": 250,
1054
- "likely": 1250,
1055
- "high": 10000
1056
- },
1057
- "classAction": {
1058
- "low": 0,
1059
- "likely": 0,
1060
- "high": 0
1061
- },
1062
- "lostBusiness": {
1063
- "low": 0,
1064
- "likely": 0,
1065
- "high": 0
1066
- }
1067
- },
1068
- "dominantDriver": "legal counsel",
1069
- "comparable": "GitHub mass-assignment 2012 → public ridicule + emergency rebuild",
1070
- "confidence": "low",
1071
- "narrative": "Mass Assignment (req.body Direct to Model) on `parser-rb.js:201` 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: GitHub mass-assignment 2012 → public ridicule + emergency rebuild."
1072
- },
1073
- "stableId": "1889976dc0f1120c",
1074
- "confidenceTier": "low",
1075
- "exploitability": 0.45,
1076
- "exploitabilityTier": "medium",
1077
- "exploitabilityFactors": [
1078
- "sev:high",
1079
- "unreachable"
1080
- ],
1081
- "clusterSize": null,
1082
- "unreachable": false,
1083
- "validator_verdict": "unvalidated",
1084
- "llm_confidence": null,
1085
- "unvalidated": true,
1086
- "cross_language": false,
1087
- "family": "mass-assignment",
1088
- "parser": "STRUCTURAL",
1089
- "_unsigned": false,
1090
- "_passThroughSigning": false,
1091
- "signatureStatus": "verified",
1092
- "regression_test": null,
1093
- "poc": null,
1094
- "calibrated_confidence": null,
1095
- "calibrated_confidence_ci": null,
1096
- "calibrated_n": 5,
1097
- "calibration_reason": "insufficient-samples",
1098
- "verifier_verdict": "cannot-verify",
1099
- "verifier_reason": "no-poc-no-sanitizer-rule",
1100
- "verifier_runner": null,
1101
- "narration": "A finding of type \"Mass Assignment (req.body Direct to Model)\" at parser-rb.js:?. Severity: high. Review the remediation field for class-specific guidance.",
1102
- "mitigationVerdict": "unreachable-in-prod",
1103
- "mitigationsApplied": [],
1104
- "mitigatedByWaf": false,
1105
- "wafRuleId": null,
1106
- "mitigatedByAuth": false,
1107
- "authMechanism": null,
1108
- "mitigatedByNetwork": false,
1109
- "networkExposure": null,
1110
- "featureFlag": null,
1111
- "featureFlagState": null,
1112
- "featureFlagRollout": null,
1113
- "exposedInProd": false,
1114
- "unreachableInProd": true,
1115
- "coldPath": false,
1116
- "hotPath": false,
1117
- "prodRequestCount": null,
1118
- "crownJewelScore": 0.15,
1119
- "crownJewelTier": "low-value",
1120
- "crownJewelFactors": [
1121
- "shell-execution"
1122
- ],
1123
- "cloneClusterId": "a0c829a31c63bf1a",
1124
- "cloneClusterSize": 5,
1125
- "provenance": "human-likely",
1126
- "provenanceScore": 0,
1127
- "typeNarrowed": null,
1128
- "strideCategory": null,
1129
- "personaScores": {
1130
- "script-kiddie": {
1131
- "score": 0.65,
1132
- "tier": "high",
1133
- "factors": [
1134
- "sev:high"
1135
- ]
1136
- },
1137
- "opportunistic-criminal": {
1138
- "score": 0.85,
1139
- "tier": "critical",
1140
- "factors": [
1141
- "sev:high",
1142
- "bias:mass-assignment+0.20"
1143
- ]
1144
- },
1145
- "apt-nation-state": {
1146
- "score": 0.65,
1147
- "tier": "high",
1148
- "factors": [
1149
- "sev:high"
1150
- ]
1151
- },
1152
- "supply-chain-attacker": {
1153
- "score": 0.65,
1154
- "tier": "high",
1155
- "factors": [
1156
- "sev:high"
1157
- ]
1158
- },
1159
- "malicious-insider": {
1160
- "score": 1,
1161
- "tier": "critical",
1162
- "factors": [
1163
- "sev:high",
1164
- "bias:mass-assignment+0.25",
1165
- "authz-bypass-favored"
1166
- ]
1167
- }
1168
- },
1169
- "personaTopTwo": [
1170
- "malicious-insider",
1171
- "opportunistic-criminal"
1172
- ],
1173
- "personaMaxName": "malicious-insider",
1174
- "personaMaxScore": 1,
1175
- "reverseExposure": null,
1176
- "specMined": null,
1177
- "whyFired": {
1178
- "detector": "sast/mass-assignment",
1179
- "ruleId": "CWE-915",
1180
- "parser": "STRUCTURAL",
1181
- "evidence": {
1182
- "sinkSnippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
1183
- "sourceSnippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
1184
- "pathSteps": [],
1185
- "sanitizers": [],
1186
- "guards": []
1187
- },
1188
- "considered": {
1189
- "suppressionsApplied": [],
1190
- "suppressionsSkipped": [],
1191
- "reachabilityFilter": "unaffected",
1192
- "clusterCollapsed": false,
1193
- "typeNarrowed": false,
1194
- "crownJewelTier": "low-value",
1195
- "mitigationVerdict": "unreachable-in-prod"
1196
- },
1197
- "scanner": {
1198
- "rulesetVersion": null,
1199
- "packHash": null,
1200
- "modelId": null
1201
- }
1202
- },
1203
- "adversaryTranscript": null,
1204
- "predictedBountyUsd": {
1205
- "low": 50,
1206
- "likely": 200,
1207
- "high": 600,
1208
- "program": "web2"
1209
- },
1210
- "bountyConfidence": "medium",
1211
- "attackPlaybook": {
1212
- "cwe": "CWE-915",
1213
- "kind": "curl",
1214
- "title": "Mass assignment — privilege escalation probe",
1215
- "instruction": "Submit an extra field (role) on profile update; verify it sticks.",
1216
- "script": "# AUTHORIZED USE ONLY — run only against systems you own or have explicit permission to test.\n# CWE-915 — Mass assignment\ncurl -s -i -X PATCH \"${TARGET_URL}/api/me\" \\\n -H \"Authorization: Bearer ${TEST_TOKEN}\" -H \"Content-Type: application/json\" \\\n -d '{\"name\":\"x\",\"role\":\"admin\"}'\n# Confirmed when subsequent /api/me returns role=admin.",
1217
- "ethics": "# AUTHORIZED USE ONLY — run only against systems you own or have explicit permission to test."
1218
- }
1219
- },
1220
- {
1221
- "id": "struct:type-stubs.js:48:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
1222
- "kind": "sast",
1223
- "severity": "medium",
1224
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
1225
- "cwe": "CWE-400",
1226
- "owaspLlm": null,
1227
- "stride": "Denial of Service",
1228
- "file": "type-stubs.js",
1229
- "line": 48,
1230
- "snippet": "try { inputs.push(p + ':' + fs.statSync(fp).mtimeMs); } catch {}",
1231
- "fix": null,
1232
- "reachable": false,
1233
- "triage": 22,
1234
- "dataClasses": [],
1235
- "chain": null,
1236
- "confidence": 0.212,
1237
- "toxicity": 28,
1238
- "toxicityFactors": [
1239
- "http-facing"
1240
- ],
1241
- "toxicityLabel": "Medium",
1242
- "sources": null,
1243
- "epssScore": null,
1244
- "epssPercentile": null,
1245
- "epssCve": null,
1246
- "exploitedNow": false,
1247
- "tags": null,
1248
- "blastRadius": {
1249
- "scope": "all-users",
1250
- "dataAtRisk": [
1251
- "config"
1252
- ],
1253
- "userCount": 50,
1254
- "industry": "generic",
1255
- "jurisdictions": [],
1256
- "controlsApplied": [],
1257
- "dollarBest": 23250,
1258
- "dollarLikely": 136250,
1259
- "dollarWorst": 775000,
1260
- "dollarLow": 23250,
1261
- "dollarHigh": 775000,
1262
- "components": {
1263
- "incidentResponse": {
1264
- "low": 8000,
1265
- "likely": 50000,
1266
- "high": 250000
1267
- },
1268
- "legal": {
1269
- "low": 10000,
1270
- "likely": 75000,
1271
- "high": 500000
1272
- },
1273
- "crisisPR": {
1274
- "low": 0,
1275
- "likely": 0,
1276
- "high": 0
1277
- },
1278
- "notification": {
1279
- "low": 5000,
1280
- "likely": 10000,
1281
- "high": 15000
1282
- },
1283
- "creditMonitoring": {
1284
- "low": 0,
1285
- "likely": 0,
1286
- "high": 0
1287
- },
1288
- "regulatoryFines": {
1289
- "low": 0,
1290
- "likely": 0,
1291
- "high": 0
1292
- },
1293
- "directDamage": {
1294
- "low": 250,
1295
- "likely": 1250,
1296
- "high": 10000
1297
- },
1298
- "classAction": {
1299
- "low": 0,
1300
- "likely": 0,
1301
- "high": 0
1302
- },
1303
- "lostBusiness": {
1304
- "low": 0,
1305
- "likely": 0,
1306
- "high": 0
1307
- }
1308
- },
1309
- "dominantDriver": "legal counsel",
1310
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
1311
- "confidence": "low",
1312
- "narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `type-stubs.js:48` 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."
1313
- },
1314
- "stableId": "de7f5b06a0db0ac9",
1315
- "confidenceTier": "very-low",
1316
- "exploitability": 0.2,
1317
- "exploitabilityTier": "low",
1318
- "exploitabilityFactors": [
1319
- "sev:medium",
1320
- "unreachable"
1321
- ],
1322
- "clusterSize": null,
1323
- "unreachable": false,
1324
- "validator_verdict": "unvalidated",
1325
- "llm_confidence": null,
1326
- "unvalidated": true,
1327
- "cross_language": false,
1328
- "family": "dos-sync-io",
1329
- "parser": "STRUCTURAL",
1330
- "_unsigned": false,
1331
- "_passThroughSigning": false,
1332
- "signatureStatus": "verified",
1333
- "regression_test": null,
1334
- "poc": null,
1335
- "calibrated_confidence": null,
1336
- "calibrated_confidence_ci": null,
1337
- "calibrated_n": 0,
1338
- "calibration_reason": "no-history",
1339
- "verifier_verdict": "cannot-verify",
1340
- "verifier_reason": "no-poc-no-sanitizer-rule",
1341
- "verifier_runner": null,
1342
- "narration": null,
1343
- "mitigationVerdict": "unreachable-in-prod",
1344
- "mitigationsApplied": [],
1345
- "mitigatedByWaf": false,
1346
- "wafRuleId": null,
1347
- "mitigatedByAuth": false,
1348
- "authMechanism": null,
1349
- "mitigatedByNetwork": false,
1350
- "networkExposure": null,
1351
- "featureFlag": null,
1352
- "featureFlagState": null,
1353
- "featureFlagRollout": null,
1354
- "exposedInProd": false,
1355
- "unreachableInProd": true,
1356
- "coldPath": false,
1357
- "hotPath": false,
1358
- "prodRequestCount": null,
1359
- "crownJewelScore": 0.15,
1360
- "crownJewelTier": "low-value",
1361
- "crownJewelFactors": [
1362
- "shell-execution"
1363
- ],
1364
- "cloneClusterId": "1ca765ccc2c8227c",
1365
- "cloneClusterSize": 2,
1366
- "provenance": "human-likely",
1367
- "provenanceScore": 0.12,
1368
- "typeNarrowed": null,
1369
- "strideCategory": "denialOfService",
1370
- "personaScores": {
1371
- "script-kiddie": {
1372
- "score": 0.4,
1373
- "tier": "medium",
1374
- "factors": [
1375
- "sev:medium"
1376
- ]
1377
- },
1378
- "opportunistic-criminal": {
1379
- "score": 0.4,
1380
- "tier": "medium",
1381
- "factors": [
1382
- "sev:medium"
1383
- ]
1384
- },
1385
- "apt-nation-state": {
1386
- "score": 0.4,
1387
- "tier": "medium",
1388
- "factors": [
1389
- "sev:medium"
1390
- ]
1391
- },
1392
- "supply-chain-attacker": {
1393
- "score": 0.4,
1394
- "tier": "medium",
1395
- "factors": [
1396
- "sev:medium"
1397
- ]
1398
- },
1399
- "malicious-insider": {
1400
- "score": 0.4,
1401
- "tier": "medium",
1402
- "factors": [
1403
- "sev:medium"
1404
- ]
1405
- }
1406
- },
1407
- "personaTopTwo": [
1408
- "script-kiddie",
1409
- "opportunistic-criminal"
1410
- ],
1411
- "personaMaxName": "script-kiddie",
1412
- "personaMaxScore": 0.4,
1413
- "reverseExposure": null,
1414
- "specMined": null,
1415
- "whyFired": {
1416
- "detector": "sast/dos-sync-io",
1417
- "ruleId": "CWE-400",
1418
- "parser": "STRUCTURAL",
1419
- "evidence": {
1420
- "sinkSnippet": "try { inputs.push(p + ':' + fs.statSync(fp).mtimeMs); } catch {}",
1421
- "sourceSnippet": "try { inputs.push(p + ':' + fs.statSync(fp).mtimeMs); } catch {}",
1422
- "pathSteps": [],
1423
- "sanitizers": [],
1424
- "guards": []
1425
- },
1426
- "considered": {
1427
- "suppressionsApplied": [],
1428
- "suppressionsSkipped": [],
1429
- "reachabilityFilter": "unaffected",
1430
- "clusterCollapsed": false,
1431
- "typeNarrowed": false,
1432
- "crownJewelTier": "low-value",
1433
- "mitigationVerdict": "unreachable-in-prod"
1434
- },
1435
- "scanner": {
1436
- "rulesetVersion": null,
1437
- "packHash": null,
1438
- "modelId": null
1439
- }
1440
- },
1441
- "adversaryTranscript": null,
1442
- "predictedBountyUsd": {
1443
- "low": 10,
1444
- "likely": 40,
1445
- "high": 120,
1446
- "program": "web2"
1447
- },
1448
- "bountyConfidence": "high",
1449
- "attackPlaybook": null
1450
- },
1451
- {
1452
- "id": "struct:type-stubs.js:57:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
1453
- "kind": "sast",
1454
- "severity": "medium",
1455
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
1456
- "cwe": "CWE-400",
1457
- "owaspLlm": null,
1458
- "stride": "Denial of Service",
1459
- "file": "type-stubs.js",
1460
- "line": 57,
1461
- "snippet": "if (!fs.existsSync(fp)) return null;",
1462
- "fix": null,
1463
- "reachable": false,
1464
- "triage": 22,
1465
- "dataClasses": [],
1466
- "chain": null,
1467
- "confidence": 0.212,
1468
- "toxicity": 28,
1469
- "toxicityFactors": [
1470
- "http-facing"
1471
- ],
1472
- "toxicityLabel": "Medium",
1473
- "sources": null,
1474
- "epssScore": null,
1475
- "epssPercentile": null,
1476
- "epssCve": null,
1477
- "exploitedNow": false,
1478
- "tags": null,
1479
- "blastRadius": {
1480
- "scope": "all-users",
1481
- "dataAtRisk": [
1482
- "config"
1483
- ],
1484
- "userCount": 50,
1485
- "industry": "generic",
1486
- "jurisdictions": [],
1487
- "controlsApplied": [],
1488
- "dollarBest": 23250,
1489
- "dollarLikely": 136250,
1490
- "dollarWorst": 775000,
1491
- "dollarLow": 23250,
1492
- "dollarHigh": 775000,
1493
- "components": {
1494
- "incidentResponse": {
1495
- "low": 8000,
1496
- "likely": 50000,
1497
- "high": 250000
1498
- },
1499
- "legal": {
1500
- "low": 10000,
1501
- "likely": 75000,
1502
- "high": 500000
1503
- },
1504
- "crisisPR": {
1505
- "low": 0,
1506
- "likely": 0,
1507
- "high": 0
1508
- },
1509
- "notification": {
1510
- "low": 5000,
1511
- "likely": 10000,
1512
- "high": 15000
1513
- },
1514
- "creditMonitoring": {
1515
- "low": 0,
1516
- "likely": 0,
1517
- "high": 0
1518
- },
1519
- "regulatoryFines": {
1520
- "low": 0,
1521
- "likely": 0,
1522
- "high": 0
1523
- },
1524
- "directDamage": {
1525
- "low": 250,
1526
- "likely": 1250,
1527
- "high": 10000
1528
- },
1529
- "classAction": {
1530
- "low": 0,
1531
- "likely": 0,
1532
- "high": 0
1533
- },
1534
- "lostBusiness": {
1535
- "low": 0,
1536
- "likely": 0,
1537
- "high": 0
1538
- }
1539
- },
1540
- "dominantDriver": "legal counsel",
1541
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
1542
- "confidence": "low",
1543
- "narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `type-stubs.js:57` 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."
1544
- },
1545
- "stableId": "256de17293c86e74",
1546
- "confidenceTier": "very-low",
1547
- "exploitability": 0.2,
1548
- "exploitabilityTier": "low",
1549
- "exploitabilityFactors": [
1550
- "sev:medium",
1551
- "unreachable"
1552
- ],
1553
- "clusterSize": null,
1554
- "unreachable": false,
1555
- "validator_verdict": "unvalidated",
1556
- "llm_confidence": null,
1557
- "unvalidated": true,
1558
- "cross_language": false,
1559
- "family": "dos-sync-io",
1560
- "parser": "STRUCTURAL",
1561
- "_unsigned": false,
1562
- "_passThroughSigning": false,
1563
- "signatureStatus": "verified",
1564
- "regression_test": null,
1565
- "poc": null,
1566
- "calibrated_confidence": null,
1567
- "calibrated_confidence_ci": null,
1568
- "calibrated_n": 0,
1569
- "calibration_reason": "no-history",
1570
- "verifier_verdict": "cannot-verify",
1571
- "verifier_reason": "no-poc-no-sanitizer-rule",
1572
- "verifier_runner": null,
1573
- "narration": null,
1574
- "mitigationVerdict": "unreachable-in-prod",
1575
- "mitigationsApplied": [],
1576
- "mitigatedByWaf": false,
1577
- "wafRuleId": null,
1578
- "mitigatedByAuth": false,
1579
- "authMechanism": null,
1580
- "mitigatedByNetwork": false,
1581
- "networkExposure": null,
1582
- "featureFlag": null,
1583
- "featureFlagState": null,
1584
- "featureFlagRollout": null,
1585
- "exposedInProd": false,
1586
- "unreachableInProd": true,
1587
- "coldPath": false,
1588
- "hotPath": false,
1589
- "prodRequestCount": null,
1590
- "crownJewelScore": 0.15,
1591
- "crownJewelTier": "low-value",
1592
- "crownJewelFactors": [
1593
- "shell-execution"
1594
- ],
1595
- "cloneClusterId": "66b8a8c25816e7f9",
1596
- "cloneClusterSize": 2,
1597
- "provenance": "human-likely",
1598
- "provenanceScore": 0.12,
1599
- "typeNarrowed": null,
1600
- "strideCategory": "denialOfService",
1601
- "personaScores": {
1602
- "script-kiddie": {
1603
- "score": 0.4,
1604
- "tier": "medium",
1605
- "factors": [
1606
- "sev:medium"
1607
- ]
1608
- },
1609
- "opportunistic-criminal": {
1610
- "score": 0.4,
1611
- "tier": "medium",
1612
- "factors": [
1613
- "sev:medium"
1614
- ]
1615
- },
1616
- "apt-nation-state": {
1617
- "score": 0.4,
1618
- "tier": "medium",
1619
- "factors": [
1620
- "sev:medium"
1621
- ]
1622
- },
1623
- "supply-chain-attacker": {
1624
- "score": 0.4,
1625
- "tier": "medium",
1626
- "factors": [
1627
- "sev:medium"
1628
- ]
1629
- },
1630
- "malicious-insider": {
1631
- "score": 0.4,
1632
- "tier": "medium",
1633
- "factors": [
1634
- "sev:medium"
1635
- ]
1636
- }
1637
- },
1638
- "personaTopTwo": [
1639
- "script-kiddie",
1640
- "opportunistic-criminal"
1641
- ],
1642
- "personaMaxName": "script-kiddie",
1643
- "personaMaxScore": 0.4,
1644
- "reverseExposure": null,
1645
- "specMined": null,
1646
- "whyFired": {
1647
- "detector": "sast/dos-sync-io",
1648
- "ruleId": "CWE-400",
1649
- "parser": "STRUCTURAL",
1650
- "evidence": {
1651
- "sinkSnippet": "if (!fs.existsSync(fp)) return null;",
1652
- "sourceSnippet": "if (!fs.existsSync(fp)) return null;",
1653
- "pathSteps": [],
1654
- "sanitizers": [],
1655
- "guards": []
1656
- },
1657
- "considered": {
1658
- "suppressionsApplied": [],
1659
- "suppressionsSkipped": [],
1660
- "reachabilityFilter": "unaffected",
1661
- "clusterCollapsed": false,
1662
- "typeNarrowed": false,
1663
- "crownJewelTier": "low-value",
1664
- "mitigationVerdict": "unreachable-in-prod"
1665
- },
1666
- "scanner": {
1667
- "rulesetVersion": null,
1668
- "packHash": null,
1669
- "modelId": null
1670
- }
1671
- },
1672
- "adversaryTranscript": null,
1673
- "predictedBountyUsd": {
1674
- "low": 10,
1675
- "likely": 40,
1676
- "high": 120,
1677
- "program": "web2"
1678
- },
1679
- "bountyConfidence": "high",
1680
- "attackPlaybook": null
1681
- },
1682
- {
1683
- "id": "struct:type-stubs.js:58:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
1684
- "kind": "sast",
1685
- "severity": "medium",
1686
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
1687
- "cwe": "CWE-400",
1688
- "owaspLlm": null,
1689
- "stride": "Denial of Service",
1690
- "file": "type-stubs.js",
1691
- "line": 58,
1692
- "snippet": "const obj = JSON.parse(fs.readFileSync(fp, 'utf8'));",
1693
- "fix": null,
1694
- "reachable": false,
1695
- "triage": 22,
1696
- "dataClasses": [],
1697
- "chain": null,
1698
- "confidence": 0.212,
1699
- "toxicity": 28,
1700
- "toxicityFactors": [
1701
- "http-facing"
1702
- ],
1703
- "toxicityLabel": "Medium",
1704
- "sources": null,
1705
- "epssScore": null,
1706
- "epssPercentile": null,
1707
- "epssCve": null,
1708
- "exploitedNow": false,
1709
- "tags": null,
1710
- "blastRadius": {
1711
- "scope": "all-users",
1712
- "dataAtRisk": [
1713
- "config"
1714
- ],
1715
- "userCount": 50,
1716
- "industry": "generic",
1717
- "jurisdictions": [],
1718
- "controlsApplied": [],
1719
- "dollarBest": 23250,
1720
- "dollarLikely": 136250,
1721
- "dollarWorst": 775000,
1722
- "dollarLow": 23250,
1723
- "dollarHigh": 775000,
1724
- "components": {
1725
- "incidentResponse": {
1726
- "low": 8000,
1727
- "likely": 50000,
1728
- "high": 250000
1729
- },
1730
- "legal": {
1731
- "low": 10000,
1732
- "likely": 75000,
1733
- "high": 500000
1734
- },
1735
- "crisisPR": {
1736
- "low": 0,
1737
- "likely": 0,
1738
- "high": 0
1739
- },
1740
- "notification": {
1741
- "low": 5000,
1742
- "likely": 10000,
1743
- "high": 15000
1744
- },
1745
- "creditMonitoring": {
1746
- "low": 0,
1747
- "likely": 0,
1748
- "high": 0
1749
- },
1750
- "regulatoryFines": {
1751
- "low": 0,
1752
- "likely": 0,
1753
- "high": 0
1754
- },
1755
- "directDamage": {
1756
- "low": 250,
1757
- "likely": 1250,
1758
- "high": 10000
1759
- },
1760
- "classAction": {
1761
- "low": 0,
1762
- "likely": 0,
1763
- "high": 0
1764
- },
1765
- "lostBusiness": {
1766
- "low": 0,
1767
- "likely": 0,
1768
- "high": 0
1769
- }
1770
- },
1771
- "dominantDriver": "legal counsel",
1772
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
1773
- "confidence": "low",
1774
- "narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `type-stubs.js:58` 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."
1775
- },
1776
- "stableId": "4f8d060ad72a925a",
1777
- "confidenceTier": "very-low",
1778
- "exploitability": 0.2,
1779
- "exploitabilityTier": "low",
1780
- "exploitabilityFactors": [
1781
- "sev:medium",
1782
- "unreachable"
1783
- ],
1784
- "clusterSize": null,
1785
- "unreachable": false,
1786
- "validator_verdict": "unvalidated",
1787
- "llm_confidence": null,
1788
- "unvalidated": true,
1789
- "cross_language": false,
1790
- "family": "dos-sync-io",
1791
- "parser": "STRUCTURAL",
1792
- "_unsigned": false,
1793
- "_passThroughSigning": false,
1794
- "signatureStatus": "verified",
1795
- "regression_test": null,
1796
- "poc": null,
1797
- "calibrated_confidence": null,
1798
- "calibrated_confidence_ci": null,
1799
- "calibrated_n": 0,
1800
- "calibration_reason": "no-history",
1801
- "verifier_verdict": "cannot-verify",
1802
- "verifier_reason": "no-poc-no-sanitizer-rule",
1803
- "verifier_runner": null,
1804
- "narration": null,
1805
- "mitigationVerdict": "unreachable-in-prod",
1806
- "mitigationsApplied": [],
1807
- "mitigatedByWaf": false,
1808
- "wafRuleId": null,
1809
- "mitigatedByAuth": false,
1810
- "authMechanism": null,
1811
- "mitigatedByNetwork": false,
1812
- "networkExposure": null,
1813
- "featureFlag": null,
1814
- "featureFlagState": null,
1815
- "featureFlagRollout": null,
1816
- "exposedInProd": false,
1817
- "unreachableInProd": true,
1818
- "coldPath": false,
1819
- "hotPath": false,
1820
- "prodRequestCount": null,
1821
- "crownJewelScore": 0.15,
1822
- "crownJewelTier": "low-value",
1823
- "crownJewelFactors": [
1824
- "shell-execution"
1825
- ],
1826
- "cloneClusterId": "8b60c3f57d48c622",
1827
- "cloneClusterSize": 1,
1828
- "provenance": "human-likely",
1829
- "provenanceScore": 0.12,
1830
- "typeNarrowed": null,
1831
- "strideCategory": "denialOfService",
1832
- "personaScores": {
1833
- "script-kiddie": {
1834
- "score": 0.4,
1835
- "tier": "medium",
1836
- "factors": [
1837
- "sev:medium"
1838
- ]
1839
- },
1840
- "opportunistic-criminal": {
1841
- "score": 0.4,
1842
- "tier": "medium",
1843
- "factors": [
1844
- "sev:medium"
1845
- ]
1846
- },
1847
- "apt-nation-state": {
1848
- "score": 0.4,
1849
- "tier": "medium",
1850
- "factors": [
1851
- "sev:medium"
1852
- ]
1853
- },
1854
- "supply-chain-attacker": {
1855
- "score": 0.4,
1856
- "tier": "medium",
1857
- "factors": [
1858
- "sev:medium"
1859
- ]
1860
- },
1861
- "malicious-insider": {
1862
- "score": 0.4,
1863
- "tier": "medium",
1864
- "factors": [
1865
- "sev:medium"
1866
- ]
1867
- }
1868
- },
1869
- "personaTopTwo": [
1870
- "script-kiddie",
1871
- "opportunistic-criminal"
1872
- ],
1873
- "personaMaxName": "script-kiddie",
1874
- "personaMaxScore": 0.4,
1875
- "reverseExposure": null,
1876
- "specMined": null,
1877
- "whyFired": {
1878
- "detector": "sast/dos-sync-io",
1879
- "ruleId": "CWE-400",
1880
- "parser": "STRUCTURAL",
1881
- "evidence": {
1882
- "sinkSnippet": "const obj = JSON.parse(fs.readFileSync(fp, 'utf8'));",
1883
- "sourceSnippet": "const obj = JSON.parse(fs.readFileSync(fp, 'utf8'));",
1884
- "pathSteps": [],
1885
- "sanitizers": [],
1886
- "guards": []
1887
- },
1888
- "considered": {
1889
- "suppressionsApplied": [],
1890
- "suppressionsSkipped": [],
1891
- "reachabilityFilter": "unaffected",
1892
- "clusterCollapsed": false,
1893
- "typeNarrowed": false,
1894
- "crownJewelTier": "low-value",
1895
- "mitigationVerdict": "unreachable-in-prod"
1896
- },
1897
- "scanner": {
1898
- "rulesetVersion": null,
1899
- "packHash": null,
1900
- "modelId": null
1901
- }
1902
- },
1903
- "adversaryTranscript": null,
1904
- "predictedBountyUsd": {
1905
- "low": 10,
1906
- "likely": 40,
1907
- "high": 120,
1908
- "program": "web2"
1909
- },
1910
- "bountyConfidence": "high",
1911
- "attackPlaybook": null
1912
- },
1913
- {
1914
- "id": "struct:type-stubs.js:79:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
1915
- "kind": "sast",
1916
- "severity": "medium",
1917
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
1918
- "cwe": "CWE-400",
1919
- "owaspLlm": null,
1920
- "stride": "Denial of Service",
1921
- "file": "type-stubs.js",
1922
- "line": 79,
1923
- "snippet": "try { fs.writeFileSync(fp, JSON.stringify(obj)); } catch {}",
1924
- "fix": null,
1925
- "reachable": false,
1926
- "triage": 22,
1927
- "dataClasses": [],
1928
- "chain": null,
1929
- "confidence": 0.212,
1930
- "toxicity": 28,
1931
- "toxicityFactors": [
1932
- "http-facing"
1933
- ],
1934
- "toxicityLabel": "Medium",
1935
- "sources": null,
1936
- "epssScore": null,
1937
- "epssPercentile": null,
1938
- "epssCve": null,
1939
- "exploitedNow": false,
1940
- "tags": null,
1941
- "blastRadius": {
1942
- "scope": "all-users",
1943
- "dataAtRisk": [
1944
- "config"
1945
- ],
1946
- "userCount": 50,
1947
- "industry": "generic",
1948
- "jurisdictions": [],
1949
- "controlsApplied": [],
1950
- "dollarBest": 23250,
1951
- "dollarLikely": 136250,
1952
- "dollarWorst": 775000,
1953
- "dollarLow": 23250,
1954
- "dollarHigh": 775000,
1955
- "components": {
1956
- "incidentResponse": {
1957
- "low": 8000,
1958
- "likely": 50000,
1959
- "high": 250000
1960
- },
1961
- "legal": {
1962
- "low": 10000,
1963
- "likely": 75000,
1964
- "high": 500000
1965
- },
1966
- "crisisPR": {
1967
- "low": 0,
1968
- "likely": 0,
1969
- "high": 0
1970
- },
1971
- "notification": {
1972
- "low": 5000,
1973
- "likely": 10000,
1974
- "high": 15000
1975
- },
1976
- "creditMonitoring": {
1977
- "low": 0,
1978
- "likely": 0,
1979
- "high": 0
1980
- },
1981
- "regulatoryFines": {
1982
- "low": 0,
1983
- "likely": 0,
1984
- "high": 0
1985
- },
1986
- "directDamage": {
1987
- "low": 250,
1988
- "likely": 1250,
1989
- "high": 10000
1990
- },
1991
- "classAction": {
1992
- "low": 0,
1993
- "likely": 0,
1994
- "high": 0
1995
- },
1996
- "lostBusiness": {
1997
- "low": 0,
1998
- "likely": 0,
1999
- "high": 0
2000
- }
2001
- },
2002
- "dominantDriver": "legal counsel",
2003
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
2004
- "confidence": "low",
2005
- "narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `type-stubs.js:79` 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."
2006
- },
2007
- "stableId": "e7a40ff787e8c228",
2008
- "confidenceTier": "very-low",
2009
- "exploitability": 0.2,
2010
- "exploitabilityTier": "low",
2011
- "exploitabilityFactors": [
2012
- "sev:medium",
2013
- "unreachable"
2014
- ],
2015
- "clusterSize": null,
2016
- "unreachable": false,
2017
- "validator_verdict": "unvalidated",
2018
- "llm_confidence": null,
2019
- "unvalidated": true,
2020
- "cross_language": false,
2021
- "family": "dos-sync-io",
2022
- "parser": "STRUCTURAL",
2023
- "_unsigned": false,
2024
- "_passThroughSigning": false,
2025
- "signatureStatus": "verified",
2026
- "regression_test": null,
2027
- "poc": null,
2028
- "calibrated_confidence": null,
2029
- "calibrated_confidence_ci": null,
2030
- "calibrated_n": 0,
2031
- "calibration_reason": "no-history",
2032
- "verifier_verdict": "cannot-verify",
2033
- "verifier_reason": "no-poc-no-sanitizer-rule",
2034
- "verifier_runner": null,
2035
- "narration": null,
2036
- "mitigationVerdict": "unreachable-in-prod",
2037
- "mitigationsApplied": [],
2038
- "mitigatedByWaf": false,
2039
- "wafRuleId": null,
2040
- "mitigatedByAuth": false,
2041
- "authMechanism": null,
2042
- "mitigatedByNetwork": false,
2043
- "networkExposure": null,
2044
- "featureFlag": null,
2045
- "featureFlagState": null,
2046
- "featureFlagRollout": null,
2047
- "exposedInProd": false,
2048
- "unreachableInProd": true,
2049
- "coldPath": false,
2050
- "hotPath": false,
2051
- "prodRequestCount": null,
2052
- "crownJewelScore": 0.15,
2053
- "crownJewelTier": "low-value",
2054
- "crownJewelFactors": [
2055
- "shell-execution"
2056
- ],
2057
- "cloneClusterId": "d2ce1948de2c53fb",
2058
- "cloneClusterSize": 1,
2059
- "provenance": "human-likely",
2060
- "provenanceScore": 0.12,
2061
- "typeNarrowed": null,
2062
- "strideCategory": "denialOfService",
2063
- "personaScores": {
2064
- "script-kiddie": {
2065
- "score": 0.4,
2066
- "tier": "medium",
2067
- "factors": [
2068
- "sev:medium"
2069
- ]
2070
- },
2071
- "opportunistic-criminal": {
2072
- "score": 0.4,
2073
- "tier": "medium",
2074
- "factors": [
2075
- "sev:medium"
2076
- ]
2077
- },
2078
- "apt-nation-state": {
2079
- "score": 0.4,
2080
- "tier": "medium",
2081
- "factors": [
2082
- "sev:medium"
2083
- ]
2084
- },
2085
- "supply-chain-attacker": {
2086
- "score": 0.4,
2087
- "tier": "medium",
2088
- "factors": [
2089
- "sev:medium"
2090
- ]
2091
- },
2092
- "malicious-insider": {
2093
- "score": 0.4,
2094
- "tier": "medium",
2095
- "factors": [
2096
- "sev:medium"
2097
- ]
2098
- }
2099
- },
2100
- "personaTopTwo": [
2101
- "script-kiddie",
2102
- "opportunistic-criminal"
2103
- ],
2104
- "personaMaxName": "script-kiddie",
2105
- "personaMaxScore": 0.4,
2106
- "reverseExposure": null,
2107
- "specMined": null,
2108
- "whyFired": {
2109
- "detector": "sast/dos-sync-io",
2110
- "ruleId": "CWE-400",
2111
- "parser": "STRUCTURAL",
2112
- "evidence": {
2113
- "sinkSnippet": "try { fs.writeFileSync(fp, JSON.stringify(obj)); } catch {}",
2114
- "sourceSnippet": "try { fs.writeFileSync(fp, JSON.stringify(obj)); } catch {}",
2115
- "pathSteps": [],
2116
- "sanitizers": [],
2117
- "guards": []
2118
- },
2119
- "considered": {
2120
- "suppressionsApplied": [],
2121
- "suppressionsSkipped": [],
2122
- "reachabilityFilter": "unaffected",
2123
- "clusterCollapsed": false,
2124
- "typeNarrowed": false,
2125
- "crownJewelTier": "low-value",
2126
- "mitigationVerdict": "unreachable-in-prod"
2127
- },
2128
- "scanner": {
2129
- "rulesetVersion": null,
2130
- "packHash": null,
2131
- "modelId": null
2132
- }
2133
- },
2134
- "adversaryTranscript": null,
2135
- "predictedBountyUsd": {
2136
- "low": 10,
2137
- "likely": 40,
2138
- "high": 120,
2139
- "program": "web2"
2140
- },
2141
- "bountyConfidence": "high",
2142
- "attackPlaybook": null
2143
- },
2144
- {
2145
- "id": "struct:type-stubs.js:190:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
2146
- "kind": "sast",
2147
- "severity": "medium",
2148
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
2149
- "cwe": "CWE-400",
2150
- "owaspLlm": null,
2151
- "stride": "Denial of Service",
2152
- "file": "type-stubs.js",
2153
- "line": 190,
2154
- "snippet": "try { entries = fs.readdirSync(dir, { withFileTypes: true }); } catch { return; }",
2155
- "fix": null,
2156
- "reachable": false,
2157
- "triage": 22,
2158
- "dataClasses": [],
2159
- "chain": null,
2160
- "confidence": 0.212,
2161
- "toxicity": 28,
2162
- "toxicityFactors": [
2163
- "http-facing"
2164
- ],
2165
- "toxicityLabel": "Medium",
2166
- "sources": null,
2167
- "epssScore": null,
2168
- "epssPercentile": null,
2169
- "epssCve": null,
2170
- "exploitedNow": false,
2171
- "tags": null,
2172
- "blastRadius": {
2173
- "scope": "all-users",
2174
- "dataAtRisk": [
2175
- "config"
2176
- ],
2177
- "userCount": 50,
2178
- "industry": "generic",
2179
- "jurisdictions": [],
2180
- "controlsApplied": [],
2181
- "dollarBest": 23250,
2182
- "dollarLikely": 136250,
2183
- "dollarWorst": 775000,
2184
- "dollarLow": 23250,
2185
- "dollarHigh": 775000,
2186
- "components": {
2187
- "incidentResponse": {
2188
- "low": 8000,
2189
- "likely": 50000,
2190
- "high": 250000
2191
- },
2192
- "legal": {
2193
- "low": 10000,
2194
- "likely": 75000,
2195
- "high": 500000
2196
- },
2197
- "crisisPR": {
2198
- "low": 0,
2199
- "likely": 0,
2200
- "high": 0
2201
- },
2202
- "notification": {
2203
- "low": 5000,
2204
- "likely": 10000,
2205
- "high": 15000
2206
- },
2207
- "creditMonitoring": {
2208
- "low": 0,
2209
- "likely": 0,
2210
- "high": 0
2211
- },
2212
- "regulatoryFines": {
2213
- "low": 0,
2214
- "likely": 0,
2215
- "high": 0
2216
- },
2217
- "directDamage": {
2218
- "low": 250,
2219
- "likely": 1250,
2220
- "high": 10000
2221
- },
2222
- "classAction": {
2223
- "low": 0,
2224
- "likely": 0,
2225
- "high": 0
2226
- },
2227
- "lostBusiness": {
2228
- "low": 0,
2229
- "likely": 0,
2230
- "high": 0
2231
- }
2232
- },
2233
- "dominantDriver": "legal counsel",
2234
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
2235
- "confidence": "low",
2236
- "narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `type-stubs.js:190` 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."
2237
- },
2238
- "stableId": "db5b5598e24d7b37",
2239
- "confidenceTier": "very-low",
2240
- "exploitability": 0.2,
2241
- "exploitabilityTier": "low",
2242
- "exploitabilityFactors": [
2243
- "sev:medium",
2244
- "unreachable"
2245
- ],
2246
- "clusterSize": null,
2247
- "unreachable": false,
2248
- "validator_verdict": "unvalidated",
2249
- "llm_confidence": null,
2250
- "unvalidated": true,
2251
- "cross_language": false,
2252
- "family": "dos-sync-io",
2253
- "parser": "STRUCTURAL",
2254
- "_unsigned": false,
2255
- "_passThroughSigning": false,
2256
- "signatureStatus": "verified",
2257
- "regression_test": null,
2258
- "poc": null,
2259
- "calibrated_confidence": null,
2260
- "calibrated_confidence_ci": null,
2261
- "calibrated_n": 0,
2262
- "calibration_reason": "no-history",
2263
- "verifier_verdict": "cannot-verify",
2264
- "verifier_reason": "no-poc-no-sanitizer-rule",
2265
- "verifier_runner": null,
2266
- "narration": null,
2267
- "mitigationVerdict": "unreachable-in-prod",
2268
- "mitigationsApplied": [],
2269
- "mitigatedByWaf": false,
2270
- "wafRuleId": null,
2271
- "mitigatedByAuth": false,
2272
- "authMechanism": null,
2273
- "mitigatedByNetwork": false,
2274
- "networkExposure": null,
2275
- "featureFlag": null,
2276
- "featureFlagState": null,
2277
- "featureFlagRollout": null,
2278
- "exposedInProd": false,
2279
- "unreachableInProd": true,
2280
- "coldPath": false,
2281
- "hotPath": false,
2282
- "prodRequestCount": null,
2283
- "crownJewelScore": 0.15,
2284
- "crownJewelTier": "low-value",
2285
- "crownJewelFactors": [
2286
- "shell-execution"
2287
- ],
2288
- "cloneClusterId": "b093e72efde4b555",
2289
- "cloneClusterSize": 1,
2290
- "provenance": "human-likely",
2291
- "provenanceScore": 0.12,
2292
- "typeNarrowed": null,
2293
- "strideCategory": "denialOfService",
2294
- "personaScores": {
2295
- "script-kiddie": {
2296
- "score": 0.4,
2297
- "tier": "medium",
2298
- "factors": [
2299
- "sev:medium"
2300
- ]
2301
- },
2302
- "opportunistic-criminal": {
2303
- "score": 0.4,
2304
- "tier": "medium",
2305
- "factors": [
2306
- "sev:medium"
2307
- ]
2308
- },
2309
- "apt-nation-state": {
2310
- "score": 0.4,
2311
- "tier": "medium",
2312
- "factors": [
2313
- "sev:medium"
2314
- ]
2315
- },
2316
- "supply-chain-attacker": {
2317
- "score": 0.4,
2318
- "tier": "medium",
2319
- "factors": [
2320
- "sev:medium"
2321
- ]
2322
- },
2323
- "malicious-insider": {
2324
- "score": 0.4,
2325
- "tier": "medium",
2326
- "factors": [
2327
- "sev:medium"
2328
- ]
2329
- }
2330
- },
2331
- "personaTopTwo": [
2332
- "script-kiddie",
2333
- "opportunistic-criminal"
2334
- ],
2335
- "personaMaxName": "script-kiddie",
2336
- "personaMaxScore": 0.4,
2337
- "reverseExposure": null,
2338
- "specMined": null,
2339
- "whyFired": {
2340
- "detector": "sast/dos-sync-io",
2341
- "ruleId": "CWE-400",
2342
- "parser": "STRUCTURAL",
2343
- "evidence": {
2344
- "sinkSnippet": "try { entries = fs.readdirSync(dir, { withFileTypes: true }); } catch { return; }",
2345
- "sourceSnippet": "try { entries = fs.readdirSync(dir, { withFileTypes: true }); } catch { return; }",
2346
- "pathSteps": [],
2347
- "sanitizers": [],
2348
- "guards": []
2349
- },
2350
- "considered": {
2351
- "suppressionsApplied": [],
2352
- "suppressionsSkipped": [],
2353
- "reachabilityFilter": "unaffected",
2354
- "clusterCollapsed": false,
2355
- "typeNarrowed": false,
2356
- "crownJewelTier": "low-value",
2357
- "mitigationVerdict": "unreachable-in-prod"
2358
- },
2359
- "scanner": {
2360
- "rulesetVersion": null,
2361
- "packHash": null,
2362
- "modelId": null
2363
- }
2364
- },
2365
- "adversaryTranscript": null,
2366
- "predictedBountyUsd": {
2367
- "low": 10,
2368
- "likely": 40,
2369
- "high": 120,
2370
- "program": "web2"
2371
- },
2372
- "bountyConfidence": "high",
2373
- "attackPlaybook": null
2374
- },
2375
- {
2376
- "id": "struct:type-stubs.js:198:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
2377
- "kind": "sast",
2378
- "severity": "medium",
2379
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
2380
- "cwe": "CWE-400",
2381
- "owaspLlm": null,
2382
- "stride": "Denial of Service",
2383
- "file": "type-stubs.js",
2384
- "line": 198,
2385
- "snippet": "if (fs.existsSync(tdir)) walk(tdir, depth + 1);",
2386
- "fix": null,
2387
- "reachable": false,
2388
- "triage": 22,
2389
- "dataClasses": [],
2390
- "chain": null,
2391
- "confidence": 0.212,
2392
- "toxicity": 28,
2393
- "toxicityFactors": [
2394
- "http-facing"
2395
- ],
2396
- "toxicityLabel": "Medium",
2397
- "sources": null,
2398
- "epssScore": null,
2399
- "epssPercentile": null,
2400
- "epssCve": null,
2401
- "exploitedNow": false,
2402
- "tags": null,
2403
- "blastRadius": {
2404
- "scope": "all-users",
2405
- "dataAtRisk": [
2406
- "config"
2407
- ],
2408
- "userCount": 50,
2409
- "industry": "generic",
2410
- "jurisdictions": [],
2411
- "controlsApplied": [],
2412
- "dollarBest": 23250,
2413
- "dollarLikely": 136250,
2414
- "dollarWorst": 775000,
2415
- "dollarLow": 23250,
2416
- "dollarHigh": 775000,
2417
- "components": {
2418
- "incidentResponse": {
2419
- "low": 8000,
2420
- "likely": 50000,
2421
- "high": 250000
2422
- },
2423
- "legal": {
2424
- "low": 10000,
2425
- "likely": 75000,
2426
- "high": 500000
2427
- },
2428
- "crisisPR": {
2429
- "low": 0,
2430
- "likely": 0,
2431
- "high": 0
2432
- },
2433
- "notification": {
2434
- "low": 5000,
2435
- "likely": 10000,
2436
- "high": 15000
2437
- },
2438
- "creditMonitoring": {
2439
- "low": 0,
2440
- "likely": 0,
2441
- "high": 0
2442
- },
2443
- "regulatoryFines": {
2444
- "low": 0,
2445
- "likely": 0,
2446
- "high": 0
2447
- },
2448
- "directDamage": {
2449
- "low": 250,
2450
- "likely": 1250,
2451
- "high": 10000
2452
- },
2453
- "classAction": {
2454
- "low": 0,
2455
- "likely": 0,
2456
- "high": 0
2457
- },
2458
- "lostBusiness": {
2459
- "low": 0,
2460
- "likely": 0,
2461
- "high": 0
2462
- }
2463
- },
2464
- "dominantDriver": "legal counsel",
2465
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
2466
- "confidence": "low",
2467
- "narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `type-stubs.js:198` 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."
2468
- },
2469
- "stableId": "da0930b64e53120b",
2470
- "confidenceTier": "very-low",
2471
- "exploitability": 0.2,
2472
- "exploitabilityTier": "low",
2473
- "exploitabilityFactors": [
2474
- "sev:medium",
2475
- "unreachable"
2476
- ],
2477
- "clusterSize": null,
2478
- "unreachable": false,
2479
- "validator_verdict": "unvalidated",
2480
- "llm_confidence": null,
2481
- "unvalidated": true,
2482
- "cross_language": false,
2483
- "family": "dos-sync-io",
2484
- "parser": "STRUCTURAL",
2485
- "_unsigned": false,
2486
- "_passThroughSigning": false,
2487
- "signatureStatus": "verified",
2488
- "regression_test": null,
2489
- "poc": null,
2490
- "calibrated_confidence": null,
2491
- "calibrated_confidence_ci": null,
2492
- "calibrated_n": 0,
2493
- "calibration_reason": "no-history",
2494
- "verifier_verdict": "cannot-verify",
2495
- "verifier_reason": "no-poc-no-sanitizer-rule",
2496
- "verifier_runner": null,
2497
- "narration": null,
2498
- "mitigationVerdict": "unreachable-in-prod",
2499
- "mitigationsApplied": [],
2500
- "mitigatedByWaf": false,
2501
- "wafRuleId": null,
2502
- "mitigatedByAuth": false,
2503
- "authMechanism": null,
2504
- "mitigatedByNetwork": false,
2505
- "networkExposure": null,
2506
- "featureFlag": null,
2507
- "featureFlagState": null,
2508
- "featureFlagRollout": null,
2509
- "exposedInProd": false,
2510
- "unreachableInProd": true,
2511
- "coldPath": false,
2512
- "hotPath": false,
2513
- "prodRequestCount": null,
2514
- "crownJewelScore": 0.15,
2515
- "crownJewelTier": "low-value",
2516
- "crownJewelFactors": [
2517
- "shell-execution"
2518
- ],
2519
- "cloneClusterId": "5e5357c1989b7538",
2520
- "cloneClusterSize": 1,
2521
- "provenance": "human-likely",
2522
- "provenanceScore": 0.12,
2523
- "typeNarrowed": null,
2524
- "strideCategory": "denialOfService",
2525
- "personaScores": {
2526
- "script-kiddie": {
2527
- "score": 0.4,
2528
- "tier": "medium",
2529
- "factors": [
2530
- "sev:medium"
2531
- ]
2532
- },
2533
- "opportunistic-criminal": {
2534
- "score": 0.4,
2535
- "tier": "medium",
2536
- "factors": [
2537
- "sev:medium"
2538
- ]
2539
- },
2540
- "apt-nation-state": {
2541
- "score": 0.4,
2542
- "tier": "medium",
2543
- "factors": [
2544
- "sev:medium"
2545
- ]
2546
- },
2547
- "supply-chain-attacker": {
2548
- "score": 0.4,
2549
- "tier": "medium",
2550
- "factors": [
2551
- "sev:medium"
2552
- ]
2553
- },
2554
- "malicious-insider": {
2555
- "score": 0.4,
2556
- "tier": "medium",
2557
- "factors": [
2558
- "sev:medium"
2559
- ]
2560
- }
2561
- },
2562
- "personaTopTwo": [
2563
- "script-kiddie",
2564
- "opportunistic-criminal"
2565
- ],
2566
- "personaMaxName": "script-kiddie",
2567
- "personaMaxScore": 0.4,
2568
- "reverseExposure": null,
2569
- "specMined": null,
2570
- "whyFired": {
2571
- "detector": "sast/dos-sync-io",
2572
- "ruleId": "CWE-400",
2573
- "parser": "STRUCTURAL",
2574
- "evidence": {
2575
- "sinkSnippet": "if (fs.existsSync(tdir)) walk(tdir, depth + 1);",
2576
- "sourceSnippet": "if (fs.existsSync(tdir)) walk(tdir, depth + 1);",
2577
- "pathSteps": [],
2578
- "sanitizers": [],
2579
- "guards": []
2580
- },
2581
- "considered": {
2582
- "suppressionsApplied": [],
2583
- "suppressionsSkipped": [],
2584
- "reachabilityFilter": "unaffected",
2585
- "clusterCollapsed": false,
2586
- "typeNarrowed": false,
2587
- "crownJewelTier": "low-value",
2588
- "mitigationVerdict": "unreachable-in-prod"
2589
- },
2590
- "scanner": {
2591
- "rulesetVersion": null,
2592
- "packHash": null,
2593
- "modelId": null
2594
- }
2595
- },
2596
- "adversaryTranscript": null,
2597
- "predictedBountyUsd": {
2598
- "low": 10,
2599
- "likely": 40,
2600
- "high": 120,
2601
- "program": "web2"
2602
- },
2603
- "bountyConfidence": "high",
2604
- "attackPlaybook": null
2605
- },
2606
- {
2607
- "id": "struct:type-stubs.js:216:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
2608
- "kind": "sast",
2609
- "severity": "medium",
2610
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
2611
- "cwe": "CWE-400",
2612
- "owaspLlm": null,
2613
- "stride": "Denial of Service",
2614
- "file": "type-stubs.js",
2615
- "line": 216,
2616
- "snippet": "const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));",
2617
- "fix": null,
2618
- "reachable": false,
2619
- "triage": 22,
2620
- "dataClasses": [],
2621
- "chain": null,
2622
- "confidence": 0.212,
2623
- "toxicity": 28,
2624
- "toxicityFactors": [
2625
- "http-facing"
2626
- ],
2627
- "toxicityLabel": "Medium",
2628
- "sources": null,
2629
- "epssScore": null,
2630
- "epssPercentile": null,
2631
- "epssCve": null,
2632
- "exploitedNow": false,
2633
- "tags": null,
2634
- "blastRadius": {
2635
- "scope": "all-users",
2636
- "dataAtRisk": [
2637
- "config"
2638
- ],
2639
- "userCount": 50,
2640
- "industry": "generic",
2641
- "jurisdictions": [],
2642
- "controlsApplied": [],
2643
- "dollarBest": 23250,
2644
- "dollarLikely": 136250,
2645
- "dollarWorst": 775000,
2646
- "dollarLow": 23250,
2647
- "dollarHigh": 775000,
2648
- "components": {
2649
- "incidentResponse": {
2650
- "low": 8000,
2651
- "likely": 50000,
2652
- "high": 250000
2653
- },
2654
- "legal": {
2655
- "low": 10000,
2656
- "likely": 75000,
2657
- "high": 500000
2658
- },
2659
- "crisisPR": {
2660
- "low": 0,
2661
- "likely": 0,
2662
- "high": 0
2663
- },
2664
- "notification": {
2665
- "low": 5000,
2666
- "likely": 10000,
2667
- "high": 15000
2668
- },
2669
- "creditMonitoring": {
2670
- "low": 0,
2671
- "likely": 0,
2672
- "high": 0
2673
- },
2674
- "regulatoryFines": {
2675
- "low": 0,
2676
- "likely": 0,
2677
- "high": 0
2678
- },
2679
- "directDamage": {
2680
- "low": 250,
2681
- "likely": 1250,
2682
- "high": 10000
2683
- },
2684
- "classAction": {
2685
- "low": 0,
2686
- "likely": 0,
2687
- "high": 0
2688
- },
2689
- "lostBusiness": {
2690
- "low": 0,
2691
- "likely": 0,
2692
- "high": 0
2693
- }
2694
- },
2695
- "dominantDriver": "legal counsel",
2696
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
2697
- "confidence": "low",
2698
- "narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `type-stubs.js:216` 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."
2699
- },
2700
- "stableId": "9f54fa968991f0c8",
2701
- "confidenceTier": "very-low",
2702
- "exploitability": 0.2,
2703
- "exploitabilityTier": "low",
2704
- "exploitabilityFactors": [
2705
- "sev:medium",
2706
- "unreachable"
2707
- ],
2708
- "clusterSize": null,
2709
- "unreachable": false,
2710
- "validator_verdict": "unvalidated",
2711
- "llm_confidence": null,
2712
- "unvalidated": true,
2713
- "cross_language": false,
2714
- "family": "dos-sync-io",
2715
- "parser": "STRUCTURAL",
2716
- "_unsigned": false,
2717
- "_passThroughSigning": false,
2718
- "signatureStatus": "verified",
2719
- "regression_test": null,
2720
- "poc": null,
2721
- "calibrated_confidence": null,
2722
- "calibrated_confidence_ci": null,
2723
- "calibrated_n": 0,
2724
- "calibration_reason": "no-history",
2725
- "verifier_verdict": "cannot-verify",
2726
- "verifier_reason": "no-poc-no-sanitizer-rule",
2727
- "verifier_runner": null,
2728
- "narration": null,
2729
- "mitigationVerdict": "unreachable-in-prod",
2730
- "mitigationsApplied": [],
2731
- "mitigatedByWaf": false,
2732
- "wafRuleId": null,
2733
- "mitigatedByAuth": false,
2734
- "authMechanism": null,
2735
- "mitigatedByNetwork": false,
2736
- "networkExposure": null,
2737
- "featureFlag": null,
2738
- "featureFlagState": null,
2739
- "featureFlagRollout": null,
2740
- "exposedInProd": false,
2741
- "unreachableInProd": true,
2742
- "coldPath": false,
2743
- "hotPath": false,
2744
- "prodRequestCount": null,
2745
- "crownJewelScore": 0.15,
2746
- "crownJewelTier": "low-value",
2747
- "crownJewelFactors": [
2748
- "shell-execution"
2749
- ],
2750
- "cloneClusterId": "f686c808d16515e4",
2751
- "cloneClusterSize": 1,
2752
- "provenance": "human-likely",
2753
- "provenanceScore": 0.12,
2754
- "typeNarrowed": null,
2755
- "strideCategory": "denialOfService",
2756
- "personaScores": {
2757
- "script-kiddie": {
2758
- "score": 0.4,
2759
- "tier": "medium",
2760
- "factors": [
2761
- "sev:medium"
2762
- ]
2763
- },
2764
- "opportunistic-criminal": {
2765
- "score": 0.4,
2766
- "tier": "medium",
2767
- "factors": [
2768
- "sev:medium"
2769
- ]
2770
- },
2771
- "apt-nation-state": {
2772
- "score": 0.4,
2773
- "tier": "medium",
2774
- "factors": [
2775
- "sev:medium"
2776
- ]
2777
- },
2778
- "supply-chain-attacker": {
2779
- "score": 0.4,
2780
- "tier": "medium",
2781
- "factors": [
2782
- "sev:medium"
2783
- ]
2784
- },
2785
- "malicious-insider": {
2786
- "score": 0.4,
2787
- "tier": "medium",
2788
- "factors": [
2789
- "sev:medium"
2790
- ]
2791
- }
2792
- },
2793
- "personaTopTwo": [
2794
- "script-kiddie",
2795
- "opportunistic-criminal"
2796
- ],
2797
- "personaMaxName": "script-kiddie",
2798
- "personaMaxScore": 0.4,
2799
- "reverseExposure": null,
2800
- "specMined": null,
2801
- "whyFired": {
2802
- "detector": "sast/dos-sync-io",
2803
- "ruleId": "CWE-400",
2804
- "parser": "STRUCTURAL",
2805
- "evidence": {
2806
- "sinkSnippet": "const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));",
2807
- "sourceSnippet": "const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));",
2808
- "pathSteps": [],
2809
- "sanitizers": [],
2810
- "guards": []
2811
- },
2812
- "considered": {
2813
- "suppressionsApplied": [],
2814
- "suppressionsSkipped": [],
2815
- "reachabilityFilter": "unaffected",
2816
- "clusterCollapsed": false,
2817
- "typeNarrowed": false,
2818
- "crownJewelTier": "low-value",
2819
- "mitigationVerdict": "unreachable-in-prod"
2820
- },
2821
- "scanner": {
2822
- "rulesetVersion": null,
2823
- "packHash": null,
2824
- "modelId": null
2825
- }
2826
- },
2827
- "adversaryTranscript": null,
2828
- "predictedBountyUsd": {
2829
- "low": 10,
2830
- "likely": 40,
2831
- "high": 120,
2832
- "program": "web2"
2833
- },
2834
- "bountyConfidence": "high",
2835
- "attackPlaybook": null
2836
- },
2837
- {
2838
- "id": "struct:type-stubs.js:245:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
2839
- "kind": "sast",
2840
- "severity": "medium",
2841
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
2842
- "cwe": "CWE-400",
2843
- "owaspLlm": null,
2844
- "stride": "Denial of Service",
2845
- "file": "type-stubs.js",
2846
- "line": 245,
2847
- "snippet": "try { body = fs.readFileSync(f.path, 'utf8'); } catch { continue; }",
2848
- "fix": null,
2849
- "reachable": false,
2850
- "triage": 22,
2851
- "dataClasses": [],
2852
- "chain": null,
2853
- "confidence": 0.212,
2854
- "toxicity": 28,
2855
- "toxicityFactors": [
2856
- "http-facing"
2857
- ],
2858
- "toxicityLabel": "Medium",
2859
- "sources": null,
2860
- "epssScore": null,
2861
- "epssPercentile": null,
2862
- "epssCve": null,
2863
- "exploitedNow": false,
2864
- "tags": null,
2865
- "blastRadius": {
2866
- "scope": "all-users",
2867
- "dataAtRisk": [
2868
- "config"
2869
- ],
2870
- "userCount": 50,
2871
- "industry": "generic",
2872
- "jurisdictions": [],
2873
- "controlsApplied": [],
2874
- "dollarBest": 23250,
2875
- "dollarLikely": 136250,
2876
- "dollarWorst": 775000,
2877
- "dollarLow": 23250,
2878
- "dollarHigh": 775000,
2879
- "components": {
2880
- "incidentResponse": {
2881
- "low": 8000,
2882
- "likely": 50000,
2883
- "high": 250000
2884
- },
2885
- "legal": {
2886
- "low": 10000,
2887
- "likely": 75000,
2888
- "high": 500000
2889
- },
2890
- "crisisPR": {
2891
- "low": 0,
2892
- "likely": 0,
2893
- "high": 0
2894
- },
2895
- "notification": {
2896
- "low": 5000,
2897
- "likely": 10000,
2898
- "high": 15000
2899
- },
2900
- "creditMonitoring": {
2901
- "low": 0,
2902
- "likely": 0,
2903
- "high": 0
2904
- },
2905
- "regulatoryFines": {
2906
- "low": 0,
2907
- "likely": 0,
2908
- "high": 0
2909
- },
2910
- "directDamage": {
2911
- "low": 250,
2912
- "likely": 1250,
2913
- "high": 10000
2914
- },
2915
- "classAction": {
2916
- "low": 0,
2917
- "likely": 0,
2918
- "high": 0
2919
- },
2920
- "lostBusiness": {
2921
- "low": 0,
2922
- "likely": 0,
2923
- "high": 0
2924
- }
2925
- },
2926
- "dominantDriver": "legal counsel",
2927
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
2928
- "confidence": "low",
2929
- "narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `type-stubs.js:245` 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."
2930
- },
2931
- "stableId": "d7f878f4239f7f2f",
2932
- "confidenceTier": "very-low",
2933
- "exploitability": 0.2,
2934
- "exploitabilityTier": "low",
2935
- "exploitabilityFactors": [
2936
- "sev:medium",
2937
- "unreachable"
2938
- ],
2939
- "clusterSize": null,
2940
- "unreachable": false,
2941
- "validator_verdict": "unvalidated",
2942
- "llm_confidence": null,
2943
- "unvalidated": true,
2944
- "cross_language": false,
2945
- "family": "dos-sync-io",
2946
- "parser": "STRUCTURAL",
2947
- "_unsigned": false,
2948
- "_passThroughSigning": false,
2949
- "signatureStatus": "verified",
2950
- "regression_test": null,
2951
- "poc": null,
2952
- "calibrated_confidence": null,
2953
- "calibrated_confidence_ci": null,
2954
- "calibrated_n": 0,
2955
- "calibration_reason": "no-history",
2956
- "verifier_verdict": "cannot-verify",
2957
- "verifier_reason": "no-poc-no-sanitizer-rule",
2958
- "verifier_runner": null,
2959
- "narration": null,
2960
- "mitigationVerdict": "unreachable-in-prod",
2961
- "mitigationsApplied": [],
2962
- "mitigatedByWaf": false,
2963
- "wafRuleId": null,
2964
- "mitigatedByAuth": false,
2965
- "authMechanism": null,
2966
- "mitigatedByNetwork": false,
2967
- "networkExposure": null,
2968
- "featureFlag": null,
2969
- "featureFlagState": null,
2970
- "featureFlagRollout": null,
2971
- "exposedInProd": false,
2972
- "unreachableInProd": true,
2973
- "coldPath": false,
2974
- "hotPath": false,
2975
- "prodRequestCount": null,
2976
- "crownJewelScore": 0.15,
2977
- "crownJewelTier": "low-value",
2978
- "crownJewelFactors": [
2979
- "shell-execution"
2980
- ],
2981
- "cloneClusterId": "01bed4bbdd04761a",
2982
- "cloneClusterSize": 1,
2983
- "provenance": "human-likely",
2984
- "provenanceScore": 0.12,
2985
- "typeNarrowed": null,
2986
- "strideCategory": "denialOfService",
2987
- "personaScores": {
2988
- "script-kiddie": {
2989
- "score": 0.4,
2990
- "tier": "medium",
2991
- "factors": [
2992
- "sev:medium"
2993
- ]
2994
- },
2995
- "opportunistic-criminal": {
2996
- "score": 0.4,
2997
- "tier": "medium",
2998
- "factors": [
2999
- "sev:medium"
3000
- ]
3001
- },
3002
- "apt-nation-state": {
3003
- "score": 0.4,
3004
- "tier": "medium",
3005
- "factors": [
3006
- "sev:medium"
3007
- ]
3008
- },
3009
- "supply-chain-attacker": {
3010
- "score": 0.4,
3011
- "tier": "medium",
3012
- "factors": [
3013
- "sev:medium"
3014
- ]
3015
- },
3016
- "malicious-insider": {
3017
- "score": 0.4,
3018
- "tier": "medium",
3019
- "factors": [
3020
- "sev:medium"
3021
- ]
3022
- }
3023
- },
3024
- "personaTopTwo": [
3025
- "script-kiddie",
3026
- "opportunistic-criminal"
3027
- ],
3028
- "personaMaxName": "script-kiddie",
3029
- "personaMaxScore": 0.4,
3030
- "reverseExposure": null,
3031
- "specMined": null,
3032
- "whyFired": {
3033
- "detector": "sast/dos-sync-io",
3034
- "ruleId": "CWE-400",
3035
- "parser": "STRUCTURAL",
3036
- "evidence": {
3037
- "sinkSnippet": "try { body = fs.readFileSync(f.path, 'utf8'); } catch { continue; }",
3038
- "sourceSnippet": "try { body = fs.readFileSync(f.path, 'utf8'); } catch { continue; }",
3039
- "pathSteps": [],
3040
- "sanitizers": [],
3041
- "guards": []
3042
- },
3043
- "considered": {
3044
- "suppressionsApplied": [],
3045
- "suppressionsSkipped": [],
3046
- "reachabilityFilter": "unaffected",
3047
- "clusterCollapsed": false,
3048
- "typeNarrowed": false,
3049
- "crownJewelTier": "low-value",
3050
- "mitigationVerdict": "unreachable-in-prod"
3051
- },
3052
- "scanner": {
3053
- "rulesetVersion": null,
3054
- "packHash": null,
3055
- "modelId": null
3056
- }
3057
- },
3058
- "adversaryTranscript": null,
3059
- "predictedBountyUsd": {
3060
- "low": 10,
3061
- "likely": 40,
3062
- "high": 120,
3063
- "program": "web2"
3064
- },
3065
- "bountyConfidence": "high",
3066
- "attackPlaybook": null
3067
- },
3068
- {
3069
- "id": "struct:parser-py-cst.js:91:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
3070
- "kind": "sast",
3071
- "severity": "medium",
3072
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
3073
- "cwe": "CWE-400",
3074
- "owaspLlm": null,
3075
- "stride": "Denial of Service",
3076
- "file": "parser-py-cst.js",
3077
- "line": 91,
3078
- "snippet": "if (!fs.existsSync(HELPER_PATH)) return null;",
3079
- "fix": null,
3080
- "reachable": false,
3081
- "triage": 18,
3082
- "dataClasses": [],
3083
- "chain": null,
3084
- "confidence": 0.161,
3085
- "toxicity": 28,
3086
- "toxicityFactors": [
3087
- "http-facing"
3088
- ],
3089
- "toxicityLabel": "Medium",
3090
- "sources": null,
3091
- "epssScore": null,
3092
- "epssPercentile": null,
3093
- "epssCve": null,
3094
- "exploitedNow": false,
3095
- "tags": null,
3096
- "blastRadius": {
3097
- "scope": "all-users",
3098
- "dataAtRisk": [
3099
- "config"
3100
- ],
3101
- "userCount": 50,
3102
- "industry": "generic",
3103
- "jurisdictions": [],
3104
- "controlsApplied": [],
3105
- "dollarBest": 23250,
3106
- "dollarLikely": 136250,
3107
- "dollarWorst": 775000,
3108
- "dollarLow": 23250,
3109
- "dollarHigh": 775000,
3110
- "components": {
3111
- "incidentResponse": {
3112
- "low": 8000,
3113
- "likely": 50000,
3114
- "high": 250000
3115
- },
3116
- "legal": {
3117
- "low": 10000,
3118
- "likely": 75000,
3119
- "high": 500000
3120
- },
3121
- "crisisPR": {
3122
- "low": 0,
3123
- "likely": 0,
3124
- "high": 0
3125
- },
3126
- "notification": {
3127
- "low": 5000,
3128
- "likely": 10000,
3129
- "high": 15000
3130
- },
3131
- "creditMonitoring": {
3132
- "low": 0,
3133
- "likely": 0,
3134
- "high": 0
3135
- },
3136
- "regulatoryFines": {
3137
- "low": 0,
3138
- "likely": 0,
3139
- "high": 0
3140
- },
3141
- "directDamage": {
3142
- "low": 250,
3143
- "likely": 1250,
3144
- "high": 10000
3145
- },
3146
- "classAction": {
3147
- "low": 0,
3148
- "likely": 0,
3149
- "high": 0
3150
- },
3151
- "lostBusiness": {
3152
- "low": 0,
3153
- "likely": 0,
3154
- "high": 0
3155
- }
3156
- },
3157
- "dominantDriver": "legal counsel",
3158
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
3159
- "confidence": "low",
3160
- "narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `parser-py-cst.js:91` 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."
3161
- },
3162
- "stableId": "ca57234f46aecc6a",
3163
- "confidenceTier": "very-low",
3164
- "exploitability": 0.05,
3165
- "exploitabilityTier": "low",
3166
- "exploitabilityFactors": [
3167
- "sev:medium",
3168
- "unreachable",
3169
- "guards:1"
3170
- ],
3171
- "clusterSize": null,
3172
- "unreachable": false,
3173
- "validator_verdict": "unvalidated",
3174
- "llm_confidence": null,
3175
- "unvalidated": true,
3176
- "cross_language": false,
3177
- "family": "dos-sync-io",
3178
- "parser": "STRUCTURAL",
3179
- "_unsigned": false,
3180
- "_passThroughSigning": false,
3181
- "signatureStatus": "verified",
3182
- "regression_test": null,
3183
- "poc": null,
3184
- "calibrated_confidence": null,
3185
- "calibrated_confidence_ci": null,
3186
- "calibrated_n": 0,
3187
- "calibration_reason": "no-history",
3188
- "verifier_verdict": "cannot-verify",
3189
- "verifier_reason": "no-poc-no-sanitizer-rule",
3190
- "verifier_runner": null,
3191
- "narration": null,
3192
- "mitigationVerdict": "unreachable-in-prod",
3193
- "mitigationsApplied": [],
3194
- "mitigatedByWaf": false,
3195
- "wafRuleId": null,
3196
- "mitigatedByAuth": false,
3197
- "authMechanism": null,
3198
- "mitigatedByNetwork": false,
3199
- "networkExposure": null,
3200
- "featureFlag": null,
3201
- "featureFlagState": null,
3202
- "featureFlagRollout": null,
3203
- "exposedInProd": false,
3204
- "unreachableInProd": true,
3205
- "coldPath": false,
3206
- "hotPath": false,
3207
- "prodRequestCount": null,
3208
- "crownJewelScore": 0.15,
3209
- "crownJewelTier": "low-value",
3210
- "crownJewelFactors": [
3211
- "shell-execution"
3212
- ],
3213
- "cloneClusterId": "66b8a8c25816e7f9",
3214
- "cloneClusterSize": 2,
3215
- "provenance": "mixed",
3216
- "provenanceScore": 0.4,
3217
- "typeNarrowed": null,
3218
- "strideCategory": "denialOfService",
3219
- "personaScores": {
3220
- "script-kiddie": {
3221
- "score": 0.2,
3222
- "tier": "low",
3223
- "factors": [
3224
- "sev:medium",
3225
- "auth-gated:1"
3226
- ]
3227
- },
3228
- "opportunistic-criminal": {
3229
- "score": 0.4,
3230
- "tier": "medium",
3231
- "factors": [
3232
- "sev:medium"
3233
- ]
3234
- },
3235
- "apt-nation-state": {
3236
- "score": 0.35,
3237
- "tier": "medium",
3238
- "factors": [
3239
- "sev:medium",
3240
- "minor-auth-cost"
3241
- ]
3242
- },
3243
- "supply-chain-attacker": {
3244
- "score": 0.4,
3245
- "tier": "medium",
3246
- "factors": [
3247
- "sev:medium"
3248
- ]
3249
- },
3250
- "malicious-insider": {
3251
- "score": 0.3,
3252
- "tier": "low",
3253
- "factors": [
3254
- "sev:medium",
3255
- "insider-bypasses-edge"
3256
- ]
3257
- }
3258
- },
3259
- "personaTopTwo": [
3260
- "opportunistic-criminal",
3261
- "supply-chain-attacker"
3262
- ],
3263
- "personaMaxName": "opportunistic-criminal",
3264
- "personaMaxScore": 0.4,
3265
- "reverseExposure": null,
3266
- "specMined": null,
3267
- "whyFired": {
3268
- "detector": "sast/dos-sync-io",
3269
- "ruleId": "CWE-400",
3270
- "parser": "STRUCTURAL",
3271
- "evidence": {
3272
- "sinkSnippet": "if (!fs.existsSync(HELPER_PATH)) return null;",
3273
- "sourceSnippet": "if (!fs.existsSync(HELPER_PATH)) return null;",
3274
- "pathSteps": [],
3275
- "sanitizers": [],
3276
- "guards": [
3277
- "type-check"
3278
- ]
3279
- },
3280
- "considered": {
3281
- "suppressionsApplied": [],
3282
- "suppressionsSkipped": [],
3283
- "reachabilityFilter": "unaffected",
3284
- "clusterCollapsed": false,
3285
- "typeNarrowed": false,
3286
- "crownJewelTier": "low-value",
3287
- "mitigationVerdict": "unreachable-in-prod"
3288
- },
3289
- "scanner": {
3290
- "rulesetVersion": null,
3291
- "packHash": null,
3292
- "modelId": null
3293
- }
3294
- },
3295
- "adversaryTranscript": null,
3296
- "predictedBountyUsd": {
3297
- "low": 10,
3298
- "likely": 40,
3299
- "high": 120,
3300
- "program": "web2"
3301
- },
3302
- "bountyConfidence": "high",
3303
- "attackPlaybook": null
3304
- },
3305
- {
3306
- "id": "toctou-fs:type-stubs.js:48",
3307
- "kind": "sast",
3308
- "severity": "medium",
3309
- "vuln": "TOCTOU: file existence/permission check before open",
3310
- "cwe": "CWE-367",
3311
- "owaspLlm": null,
3312
- "stride": "Tampering",
3313
- "file": "type-stubs.js",
3314
- "line": 48,
3315
- "snippet": "try { inputs.push(p + ':' + fs.statSync(fp).mtimeMs); } catch {}",
3316
- "fix": null,
3317
- "reachable": false,
3318
- "triage": 22,
3319
- "dataClasses": [],
3320
- "chain": null,
3321
- "confidence": 0.7,
3322
- "toxicity": 8,
3323
- "toxicityFactors": [],
3324
- "toxicityLabel": "Low",
3325
- "sources": null,
3326
- "epssScore": null,
3327
- "epssPercentile": null,
3328
- "epssCve": null,
3329
- "exploitedNow": false,
3330
- "tags": null,
3331
- "blastRadius": {
3332
- "scope": "all-users",
3333
- "dataAtRisk": [
3334
- "config"
3335
- ],
3336
- "userCount": 50,
3337
- "industry": "generic",
3338
- "jurisdictions": [],
3339
- "controlsApplied": [],
3340
- "dollarBest": 23250,
3341
- "dollarLikely": 136250,
3342
- "dollarWorst": 775000,
3343
- "dollarLow": 23250,
3344
- "dollarHigh": 775000,
3345
- "components": {
3346
- "incidentResponse": {
3347
- "low": 8000,
3348
- "likely": 50000,
3349
- "high": 250000
3350
- },
3351
- "legal": {
3352
- "low": 10000,
3353
- "likely": 75000,
3354
- "high": 500000
3355
- },
3356
- "crisisPR": {
3357
- "low": 0,
3358
- "likely": 0,
3359
- "high": 0
3360
- },
3361
- "notification": {
3362
- "low": 5000,
3363
- "likely": 10000,
3364
- "high": 15000
3365
- },
3366
- "creditMonitoring": {
3367
- "low": 0,
3368
- "likely": 0,
3369
- "high": 0
3370
- },
3371
- "regulatoryFines": {
3372
- "low": 0,
3373
- "likely": 0,
3374
- "high": 0
3375
- },
3376
- "directDamage": {
3377
- "low": 250,
3378
- "likely": 1250,
3379
- "high": 10000
3380
- },
3381
- "classAction": {
3382
- "low": 0,
3383
- "likely": 0,
3384
- "high": 0
3385
- },
3386
- "lostBusiness": {
3387
- "low": 0,
3388
- "likely": 0,
3389
- "high": 0
3390
- }
3391
- },
3392
- "dominantDriver": "legal counsel",
3393
- "comparable": "Generic finding — likely cost driven by user count + jurisdiction stack",
3394
- "confidence": "low",
3395
- "narrative": "TOCTOU: file existence/permission check before open on `type-stubs.js:48` 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."
3396
- },
3397
- "stableId": "d72348aa62acffcb",
3398
- "confidenceTier": "medium",
3399
- "exploitability": 0.2,
3400
- "exploitabilityTier": "low",
3401
- "exploitabilityFactors": [
3402
- "sev:medium",
3403
- "unreachable"
3404
- ],
3405
- "clusterSize": null,
3406
- "unreachable": false,
3407
- "validator_verdict": "unvalidated",
3408
- "llm_confidence": null,
3409
- "unvalidated": true,
3410
- "cross_language": false,
3411
- "family": "toctou-file-existence-permission-check-b",
3412
- "parser": "TOCTOU",
3413
- "_unsigned": false,
3414
- "_passThroughSigning": false,
3415
- "signatureStatus": "verified",
3416
- "regression_test": null,
3417
- "poc": null,
3418
- "calibrated_confidence": null,
3419
- "calibrated_confidence_ci": null,
3420
- "calibrated_n": 0,
3421
- "calibration_reason": "no-history",
3422
- "verifier_verdict": "cannot-verify",
3423
- "verifier_reason": "no-poc-no-sanitizer-rule",
3424
- "verifier_runner": null,
3425
- "narration": null,
3426
- "mitigationVerdict": "unreachable-in-prod",
3427
- "mitigationsApplied": [],
3428
- "mitigatedByWaf": false,
3429
- "wafRuleId": null,
3430
- "mitigatedByAuth": false,
3431
- "authMechanism": null,
3432
- "mitigatedByNetwork": false,
3433
- "networkExposure": null,
3434
- "featureFlag": null,
3435
- "featureFlagState": null,
3436
- "featureFlagRollout": null,
3437
- "exposedInProd": false,
3438
- "unreachableInProd": true,
3439
- "coldPath": false,
3440
- "hotPath": false,
3441
- "prodRequestCount": null,
3442
- "crownJewelScore": 0.15,
3443
- "crownJewelTier": "low-value",
3444
- "crownJewelFactors": [
3445
- "shell-execution"
3446
- ],
3447
- "cloneClusterId": "1ca765ccc2c8227c",
3448
- "cloneClusterSize": 2,
3449
- "provenance": "human-likely",
3450
- "provenanceScore": 0.12,
3451
- "typeNarrowed": null,
3452
- "strideCategory": "tampering",
3453
- "personaScores": {
3454
- "script-kiddie": {
3455
- "score": 0.4,
3456
- "tier": "medium",
3457
- "factors": [
3458
- "sev:medium"
3459
- ]
3460
- },
3461
- "opportunistic-criminal": {
3462
- "score": 0.4,
3463
- "tier": "medium",
3464
- "factors": [
3465
- "sev:medium"
3466
- ]
3467
- },
3468
- "apt-nation-state": {
3469
- "score": 0.4,
3470
- "tier": "medium",
3471
- "factors": [
3472
- "sev:medium"
3473
- ]
3474
- },
3475
- "supply-chain-attacker": {
3476
- "score": 0.4,
3477
- "tier": "medium",
3478
- "factors": [
3479
- "sev:medium"
3480
- ]
3481
- },
3482
- "malicious-insider": {
3483
- "score": 0.4,
3484
- "tier": "medium",
3485
- "factors": [
3486
- "sev:medium"
3487
- ]
3488
- }
3489
- },
3490
- "personaTopTwo": [
3491
- "script-kiddie",
3492
- "opportunistic-criminal"
3493
- ],
3494
- "personaMaxName": "script-kiddie",
3495
- "personaMaxScore": 0.4,
3496
- "reverseExposure": null,
3497
- "specMined": null,
3498
- "whyFired": {
3499
- "detector": "sast/toctou-file-existence-permission-check-b",
3500
- "ruleId": "CWE-367",
3501
- "parser": "TOCTOU",
3502
- "evidence": {
3503
- "sinkSnippet": "try { inputs.push(p + ':' + fs.statSync(fp).mtimeMs); } catch {}",
3504
- "sourceSnippet": null,
3505
- "pathSteps": [],
3506
- "sanitizers": [],
3507
- "guards": []
3508
- },
3509
- "considered": {
3510
- "suppressionsApplied": [],
3511
- "suppressionsSkipped": [],
3512
- "reachabilityFilter": "unaffected",
3513
- "clusterCollapsed": false,
3514
- "typeNarrowed": false,
3515
- "crownJewelTier": "low-value",
3516
- "mitigationVerdict": "unreachable-in-prod"
3517
- },
3518
- "scanner": {
3519
- "rulesetVersion": null,
3520
- "packHash": null,
3521
- "modelId": null
3522
- }
3523
- },
3524
- "adversaryTranscript": null,
3525
- "predictedBountyUsd": null,
3526
- "bountyConfidence": null,
3527
- "attackPlaybook": null
3528
- },
3529
- {
3530
- "id": "logic:type-stubs.js:57:TOCTOU:_existsSync_followed_by_file_op",
3531
- "kind": "logic",
3532
- "severity": "medium",
3533
- "vuln": "TOCTOU: existsSync followed by file op",
3534
- "cwe": "CWE-367",
3535
- "stride": "Tampering",
3536
- "file": "type-stubs.js",
3537
- "line": 57,
3538
- "snippet": "if (!fs.existsSync(fp)) return null;",
3539
- "fix": {
3540
- "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.",
3541
- "code": ""
3542
- },
3543
- "blastRadius": {
3544
- "scope": "all-users",
3545
- "dataAtRisk": [
3546
- "config"
3547
- ],
3548
- "userCount": 50,
3549
- "industry": "generic",
3550
- "jurisdictions": [],
3551
- "controlsApplied": [],
3552
- "dollarBest": 23250,
3553
- "dollarLikely": 136250,
3554
- "dollarWorst": 775000,
3555
- "dollarLow": 23250,
3556
- "dollarHigh": 775000,
3557
- "components": {
3558
- "incidentResponse": {
3559
- "low": 8000,
3560
- "likely": 50000,
3561
- "high": 250000
3562
- },
3563
- "legal": {
3564
- "low": 10000,
3565
- "likely": 75000,
3566
- "high": 500000
3567
- },
3568
- "crisisPR": {
3569
- "low": 0,
3570
- "likely": 0,
3571
- "high": 0
3572
- },
3573
- "notification": {
3574
- "low": 5000,
3575
- "likely": 10000,
3576
- "high": 15000
3577
- },
3578
- "creditMonitoring": {
3579
- "low": 0,
3580
- "likely": 0,
3581
- "high": 0
3582
- },
3583
- "regulatoryFines": {
3584
- "low": 0,
3585
- "likely": 0,
3586
- "high": 0
3587
- },
3588
- "directDamage": {
3589
- "low": 250,
3590
- "likely": 1250,
3591
- "high": 10000
3592
- },
3593
- "classAction": {
3594
- "low": 0,
3595
- "likely": 0,
3596
- "high": 0
3597
- },
3598
- "lostBusiness": {
3599
- "low": 0,
3600
- "likely": 0,
3601
- "high": 0
3602
- }
3603
- },
3604
- "dominantDriver": "legal counsel",
3605
- "comparable": "Generic finding — likely cost driven by user count + jurisdiction stack",
3606
- "confidence": "low",
3607
- "narrative": "TOCTOU: existsSync followed by file op on `type-stubs.js:57` 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."
3608
- },
3609
- "parser": "LOGIC",
3610
- "family": null
3611
- }
3612
- ],
3613
- "bundles": [],
3614
- "routes": [],
3615
- "components": [],
3616
- "suppressedCount": 6,
3617
- "blastRadiusSignals": {
3618
- "industry": "generic",
3619
- "industryConfidence": "low",
3620
- "jurisdictions": [],
3621
- "controls": [],
3622
- "estimatedUsers": 50,
3623
- "revenueIndicator": "pre-revenue",
3624
- "hasStripe": false,
3625
- "hasAuth": false,
3626
- "hasUserTable": false,
3627
- "hasPII": false,
3628
- "hasPHI": false,
3629
- "hasS3": false
3630
- },
3631
- "_v3": {
3632
- "counterfactual": {
3633
- "spofControls": [],
3634
- "controlsDetected": 307
3635
- },
3636
- "threatModel": {
3637
- "summary": {
3638
- "assetCount": 0,
3639
- "boundaryCount": 2,
3640
- "strideCounts": {
3641
- "spoofing": 0,
3642
- "tampering": 1,
3643
- "repudiation": 0,
3644
- "informationDisclosure": 0,
3645
- "denialOfService": 9,
3646
- "elevationOfPrivilege": 0
3647
- }
3648
- },
3649
- "assets": [],
3650
- "trustBoundaries": [
3651
- {
3652
- "type": "db-edge",
3653
- "file": "parser-py-cst.js",
3654
- "line": 13,
3655
- "label": null
3656
- },
3657
- {
3658
- "type": "db-edge",
3659
- "file": "parser-py.js",
3660
- "line": 72,
3661
- "label": null
3662
- }
3663
- ],
3664
- "stride": {
3665
- "spoofing": [],
3666
- "tampering": [
3667
- {
3668
- "vuln": "TOCTOU: file existence/permission check before open",
3669
- "file": "type-stubs.js",
3670
- "line": 48,
3671
- "severity": "medium"
3672
- }
3673
- ],
3674
- "repudiation": [],
3675
- "informationDisclosure": [],
3676
- "denialOfService": [
3677
- {
3678
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
3679
- "file": "type-stubs.js",
3680
- "severity": "medium"
3681
- },
3682
- {
3683
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
3684
- "file": "type-stubs.js",
3685
- "severity": "medium"
3686
- },
3687
- {
3688
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
3689
- "file": "type-stubs.js",
3690
- "severity": "medium"
3691
- },
3692
- {
3693
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
3694
- "file": "type-stubs.js",
3695
- "severity": "medium"
3696
- },
3697
- {
3698
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
3699
- "file": "type-stubs.js",
3700
- "severity": "medium"
3701
- },
3702
- {
3703
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
3704
- "file": "type-stubs.js",
3705
- "severity": "medium"
3706
- },
3707
- {
3708
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
3709
- "file": "type-stubs.js",
3710
- "severity": "medium"
3711
- },
3712
- {
3713
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
3714
- "file": "type-stubs.js",
3715
- "severity": "medium"
3716
- },
3717
- {
3718
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
3719
- "file": "parser-py-cst.js",
3720
- "severity": "medium"
3721
- }
3722
- ],
3723
- "elevationOfPrivilege": []
3724
- }
3725
- },
3726
- "trustBoundaryDiagram": {
3727
- "mermaid": "flowchart LR\n INTERNET((Internet))\n APP[\"Application\"]\n db_parser_py_cst_js_13[(\"db@parser-py-cst.js:13\")]\n db_parser_py_js_72[(\"db@parser-py.js:72\")]\n APP -->|db| db_parser_py_cst_js_13\n APP -->|db| db_parser_py_js_72\n class db_parser_py_cst_js_13 sev_medium;\n classDef sev_critical fill:#ffcccc,stroke:#a00,stroke-width:2px;\n classDef sev_high fill:#ffe0b2,stroke:#c60,stroke-width:2px;\n classDef sev_medium fill:#fff3cd,stroke:#a80;\n classDef sev_low fill:#e8eaf6,stroke:#557;",
3728
- "nodes": [
3729
- {
3730
- "id": "INTERNET",
3731
- "kind": "external",
3732
- "label": "Internet"
3733
- },
3734
- {
3735
- "id": "APP",
3736
- "kind": "app",
3737
- "label": "Application"
3738
- },
3739
- {
3740
- "kind": "db",
3741
- "id": "db_parser_py_cst_js_13",
3742
- "label": "db@parser-py-cst.js:13"
3743
- },
3744
- {
3745
- "kind": "db",
3746
- "id": "db_parser_py_js_72",
3747
- "label": "db@parser-py.js:72"
3748
- }
3749
- ],
3750
- "edges": [
3751
- {
3752
- "from": "APP",
3753
- "to": "db_parser_py_cst_js_13",
3754
- "kind": "db"
3755
- },
3756
- {
3757
- "from": "APP",
3758
- "to": "db_parser_py_js_72",
3759
- "kind": "db"
3760
- }
3761
- ],
3762
- "decorations": [
3763
- {
3764
- "nodeId": "db_parser_py_cst_js_13",
3765
- "severity": "medium",
3766
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
3767
- "file": "parser-py-cst.js"
3768
- }
3769
- ]
3770
- },
3771
- "calibrationDrift": {
3772
- "alarms": [],
3773
- "note": "no-feedback-data"
3774
- }
3775
- },
3776
- "annotatorErrors": []
3777
- }