@clear-capabilities/agentic-security-scanner 0.76.1 → 0.77.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 (68) hide show
  1. package/dist/agentic-security.mjs +8 -8
  2. package/dist/agentic-security.mjs.sha256 +1 -1
  3. package/package.json +5 -5
  4. package/bin/.agentic-security/findings.json +0 -1596
  5. package/bin/.agentic-security/last-scan.json +0 -1596
  6. package/bin/.agentic-security/last-scan.json.sig +0 -1
  7. package/bin/.agentic-security/scan-history.json +0 -475
  8. package/bin/.agentic-security/streak.json +0 -25
  9. package/dist/218.index.js +0 -793
  10. package/dist/601.index.js +0 -1038
  11. package/dist/634.index.js +0 -1892
  12. package/src/.agentic-security/findings.json +0 -80844
  13. package/src/.agentic-security/last-scan.json +0 -80844
  14. package/src/.agentic-security/last-scan.json.sig +0 -1
  15. package/src/.agentic-security/scan-history.json +0 -8408
  16. package/src/.agentic-security/streak.json +0 -26
  17. package/src/dataflow/.agentic-security/findings.json +0 -3487
  18. package/src/dataflow/.agentic-security/last-scan.json +0 -3487
  19. package/src/dataflow/.agentic-security/last-scan.json.sig +0 -1
  20. package/src/dataflow/.agentic-security/scan-history.json +0 -735
  21. package/src/dataflow/.agentic-security/streak.json +0 -24
  22. package/src/integrations/.agentic-security/findings.json +0 -1504
  23. package/src/integrations/.agentic-security/last-scan.json +0 -1504
  24. package/src/integrations/.agentic-security/scan-history.json +0 -40
  25. package/src/integrations/.agentic-security/streak.json +0 -21
  26. package/src/ir/.agentic-security/findings.json +0 -3036
  27. package/src/ir/.agentic-security/last-scan.json +0 -3036
  28. package/src/ir/.agentic-security/last-scan.json.sig +0 -1
  29. package/src/ir/.agentic-security/scan-history.json +0 -364
  30. package/src/ir/.agentic-security/streak.json +0 -23
  31. package/src/llm-validator/.agentic-security/findings.json +0 -1891
  32. package/src/llm-validator/.agentic-security/last-scan.json +0 -1891
  33. package/src/llm-validator/.agentic-security/last-scan.json.sig +0 -1
  34. package/src/llm-validator/.agentic-security/scan-history.json +0 -168
  35. package/src/llm-validator/.agentic-security/streak.json +0 -20
  36. package/src/lsp/.agentic-security/findings.json +0 -28
  37. package/src/lsp/.agentic-security/last-scan.json +0 -28
  38. package/src/lsp/.agentic-security/scan-history.json +0 -79
  39. package/src/lsp/.agentic-security/streak.json +0 -22
  40. package/src/mcp/.agentic-security/findings.json +0 -8403
  41. package/src/mcp/.agentic-security/last-scan.json +0 -8403
  42. package/src/mcp/.agentic-security/last-scan.json.sig +0 -1
  43. package/src/mcp/.agentic-security/scan-history.json +0 -1182
  44. package/src/mcp/.agentic-security/streak.json +0 -22
  45. package/src/posture/.agentic-security/findings.json +0 -51239
  46. package/src/posture/.agentic-security/last-scan.json +0 -51239
  47. package/src/posture/.agentic-security/last-scan.json.sig +0 -1
  48. package/src/posture/.agentic-security/scan-history.json +0 -5557
  49. package/src/posture/.agentic-security/streak.json +0 -24
  50. package/src/report/.agentic-security/findings.json +0 -79
  51. package/src/report/.agentic-security/last-scan.json +0 -79
  52. package/src/report/.agentic-security/last-scan.json.sig +0 -1
  53. package/src/report/.agentic-security/scan-history.json +0 -332
  54. package/src/report/.agentic-security/streak.json +0 -23
  55. package/src/sast/.agentic-security/findings.json +0 -5051
  56. package/src/sast/.agentic-security/last-scan.json +0 -5051
  57. package/src/sast/.agentic-security/last-scan.json.sig +0 -1
  58. package/src/sast/.agentic-security/scan-history.json +0 -788
  59. package/src/sast/.agentic-security/streak.json +0 -23
  60. package/src/sast/bench-shape/.agentic-security/findings.json +0 -28
  61. package/src/sast/bench-shape/.agentic-security/last-scan.json +0 -28
  62. package/src/sast/bench-shape/.agentic-security/scan-history.json +0 -24
  63. package/src/sast/bench-shape/.agentic-security/streak.json +0 -22
  64. package/src/sca/.agentic-security/findings.json +0 -1096
  65. package/src/sca/.agentic-security/last-scan.json +0 -1096
  66. package/src/sca/.agentic-security/last-scan.json.sig +0 -1
  67. package/src/sca/.agentic-security/scan-history.json +0 -18
  68. package/src/sca/.agentic-security/streak.json +0 -21
@@ -1,3036 +0,0 @@
1
- {
2
- "scanId": "e3eb4e8f-6086-4f67-abc4-9f0666ae3092",
3
- "startedAt": "2026-05-20T17:01:27.260Z",
4
- "durationMs": 291,
5
- "scanned": {
6
- "files": 12,
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
- "_unsigned": false,
121
- "_passThroughSigning": false,
122
- "signatureStatus": "verified",
123
- "regression_test": null,
124
- "poc": null,
125
- "calibrated_confidence": null,
126
- "calibrated_confidence_ci": null,
127
- "calibrated_n": 5,
128
- "calibration_reason": "insufficient-samples",
129
- "verifier_verdict": "cannot-verify",
130
- "verifier_reason": "no-poc-no-sanitizer-rule",
131
- "verifier_runner": null,
132
- "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.",
133
- "mitigationVerdict": "unreachable-in-prod",
134
- "mitigationsApplied": [],
135
- "mitigatedByWaf": false,
136
- "wafRuleId": null,
137
- "mitigatedByAuth": false,
138
- "authMechanism": null,
139
- "mitigatedByNetwork": false,
140
- "networkExposure": null,
141
- "featureFlag": null,
142
- "featureFlagState": null,
143
- "featureFlagRollout": null,
144
- "exposedInProd": false,
145
- "unreachableInProd": true,
146
- "coldPath": false,
147
- "hotPath": false,
148
- "prodRequestCount": null,
149
- "crownJewelScore": 0.15,
150
- "crownJewelTier": "low-value",
151
- "crownJewelFactors": [
152
- "shell-execution"
153
- ],
154
- "cloneClusterId": "a0c829a31c63bf1a",
155
- "cloneClusterSize": 2,
156
- "provenance": "human-likely",
157
- "provenanceScore": 0.08,
158
- "typeNarrowed": null,
159
- "strideCategory": null,
160
- "personaScores": {
161
- "script-kiddie": {
162
- "score": 0.65,
163
- "tier": "high",
164
- "factors": [
165
- "sev:high"
166
- ]
167
- },
168
- "opportunistic-criminal": {
169
- "score": 0.85,
170
- "tier": "critical",
171
- "factors": [
172
- "sev:high",
173
- "bias:mass-assignment+0.20"
174
- ]
175
- },
176
- "apt-nation-state": {
177
- "score": 0.65,
178
- "tier": "high",
179
- "factors": [
180
- "sev:high"
181
- ]
182
- },
183
- "supply-chain-attacker": {
184
- "score": 0.65,
185
- "tier": "high",
186
- "factors": [
187
- "sev:high"
188
- ]
189
- },
190
- "malicious-insider": {
191
- "score": 1,
192
- "tier": "critical",
193
- "factors": [
194
- "sev:high",
195
- "bias:mass-assignment+0.25",
196
- "authz-bypass-favored"
197
- ]
198
- }
199
- },
200
- "personaTopTwo": [
201
- "malicious-insider",
202
- "opportunistic-criminal"
203
- ],
204
- "personaMaxName": "malicious-insider",
205
- "personaMaxScore": 1,
206
- "reverseExposure": null,
207
- "specMined": null,
208
- "whyFired": {
209
- "detector": "sast/mass-assignment",
210
- "ruleId": "CWE-915",
211
- "parser": "STRUCTURAL",
212
- "evidence": {
213
- "sinkSnippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
214
- "sourceSnippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
215
- "pathSteps": [],
216
- "sanitizers": [],
217
- "guards": []
218
- },
219
- "considered": {
220
- "suppressionsApplied": [],
221
- "suppressionsSkipped": [],
222
- "reachabilityFilter": "unaffected",
223
- "clusterCollapsed": false,
224
- "typeNarrowed": false,
225
- "crownJewelTier": "low-value",
226
- "mitigationVerdict": "unreachable-in-prod"
227
- },
228
- "scanner": {
229
- "rulesetVersion": null,
230
- "packHash": null,
231
- "modelId": null
232
- }
233
- },
234
- "adversaryTranscript": null,
235
- "predictedBountyUsd": {
236
- "low": 50,
237
- "likely": 200,
238
- "high": 600,
239
- "program": "web2"
240
- },
241
- "bountyConfidence": "medium",
242
- "attackPlaybook": {
243
- "cwe": "CWE-915",
244
- "kind": "curl",
245
- "title": "Mass assignment — privilege escalation probe",
246
- "instruction": "Submit an extra field (role) on profile update; verify it sticks.",
247
- "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.",
248
- "ethics": "# AUTHORIZED USE ONLY — run only against systems you own or have explicit permission to test."
249
- }
250
- },
251
- {
252
- "id": "struct:parser-kt.js:207:Mass_Assignment_(req.body_Direct_to_Model)",
253
- "kind": "sast",
254
- "severity": "high",
255
- "vuln": "Mass Assignment (req.body Direct to Model)",
256
- "cwe": "CWE-915",
257
- "owaspLlm": null,
258
- "stride": "Tampering",
259
- "file": "parser-kt.js",
260
- "line": 207,
261
- "snippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
262
- "fix": null,
263
- "reachable": false,
264
- "triage": 39,
265
- "dataClasses": [],
266
- "chain": null,
267
- "confidence": 0.314,
268
- "toxicity": 35,
269
- "toxicityFactors": [
270
- "high-severity",
271
- "http-facing"
272
- ],
273
- "toxicityLabel": "Medium",
274
- "sources": null,
275
- "epssScore": null,
276
- "epssPercentile": null,
277
- "epssCve": null,
278
- "exploitedNow": false,
279
- "tags": null,
280
- "blastRadius": {
281
- "scope": "all-users",
282
- "dataAtRisk": [
283
- "config"
284
- ],
285
- "userCount": 50,
286
- "industry": "generic",
287
- "jurisdictions": [],
288
- "controlsApplied": [],
289
- "dollarBest": 23250,
290
- "dollarLikely": 136250,
291
- "dollarWorst": 775000,
292
- "dollarLow": 23250,
293
- "dollarHigh": 775000,
294
- "components": {
295
- "incidentResponse": {
296
- "low": 8000,
297
- "likely": 50000,
298
- "high": 250000
299
- },
300
- "legal": {
301
- "low": 10000,
302
- "likely": 75000,
303
- "high": 500000
304
- },
305
- "crisisPR": {
306
- "low": 0,
307
- "likely": 0,
308
- "high": 0
309
- },
310
- "notification": {
311
- "low": 5000,
312
- "likely": 10000,
313
- "high": 15000
314
- },
315
- "creditMonitoring": {
316
- "low": 0,
317
- "likely": 0,
318
- "high": 0
319
- },
320
- "regulatoryFines": {
321
- "low": 0,
322
- "likely": 0,
323
- "high": 0
324
- },
325
- "directDamage": {
326
- "low": 250,
327
- "likely": 1250,
328
- "high": 10000
329
- },
330
- "classAction": {
331
- "low": 0,
332
- "likely": 0,
333
- "high": 0
334
- },
335
- "lostBusiness": {
336
- "low": 0,
337
- "likely": 0,
338
- "high": 0
339
- }
340
- },
341
- "dominantDriver": "legal counsel",
342
- "comparable": "GitHub mass-assignment 2012 → public ridicule + emergency rebuild",
343
- "confidence": "low",
344
- "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."
345
- },
346
- "stableId": "2fc3bac9558c1472",
347
- "confidenceTier": "low",
348
- "exploitability": 0.45,
349
- "exploitabilityTier": "medium",
350
- "exploitabilityFactors": [
351
- "sev:high",
352
- "unreachable"
353
- ],
354
- "clusterSize": null,
355
- "unreachable": false,
356
- "validator_verdict": "unvalidated",
357
- "llm_confidence": null,
358
- "unvalidated": true,
359
- "cross_language": false,
360
- "family": "mass-assignment",
361
- "_unsigned": false,
362
- "_passThroughSigning": false,
363
- "signatureStatus": "verified",
364
- "regression_test": null,
365
- "poc": null,
366
- "calibrated_confidence": null,
367
- "calibrated_confidence_ci": null,
368
- "calibrated_n": 5,
369
- "calibration_reason": "insufficient-samples",
370
- "verifier_verdict": "cannot-verify",
371
- "verifier_reason": "no-poc-no-sanitizer-rule",
372
- "verifier_runner": null,
373
- "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.",
374
- "mitigationVerdict": "unreachable-in-prod",
375
- "mitigationsApplied": [],
376
- "mitigatedByWaf": false,
377
- "wafRuleId": null,
378
- "mitigatedByAuth": false,
379
- "authMechanism": null,
380
- "mitigatedByNetwork": false,
381
- "networkExposure": null,
382
- "featureFlag": null,
383
- "featureFlagState": null,
384
- "featureFlagRollout": null,
385
- "exposedInProd": false,
386
- "unreachableInProd": true,
387
- "coldPath": false,
388
- "hotPath": false,
389
- "prodRequestCount": null,
390
- "crownJewelScore": 0.15,
391
- "crownJewelTier": "low-value",
392
- "crownJewelFactors": [
393
- "shell-execution"
394
- ],
395
- "cloneClusterId": "a0c829a31c63bf1a",
396
- "cloneClusterSize": 2,
397
- "provenance": "human-likely",
398
- "provenanceScore": 0,
399
- "typeNarrowed": null,
400
- "strideCategory": null,
401
- "personaScores": {
402
- "script-kiddie": {
403
- "score": 0.65,
404
- "tier": "high",
405
- "factors": [
406
- "sev:high"
407
- ]
408
- },
409
- "opportunistic-criminal": {
410
- "score": 0.85,
411
- "tier": "critical",
412
- "factors": [
413
- "sev:high",
414
- "bias:mass-assignment+0.20"
415
- ]
416
- },
417
- "apt-nation-state": {
418
- "score": 0.65,
419
- "tier": "high",
420
- "factors": [
421
- "sev:high"
422
- ]
423
- },
424
- "supply-chain-attacker": {
425
- "score": 0.65,
426
- "tier": "high",
427
- "factors": [
428
- "sev:high"
429
- ]
430
- },
431
- "malicious-insider": {
432
- "score": 1,
433
- "tier": "critical",
434
- "factors": [
435
- "sev:high",
436
- "bias:mass-assignment+0.25",
437
- "authz-bypass-favored"
438
- ]
439
- }
440
- },
441
- "personaTopTwo": [
442
- "malicious-insider",
443
- "opportunistic-criminal"
444
- ],
445
- "personaMaxName": "malicious-insider",
446
- "personaMaxScore": 1,
447
- "reverseExposure": null,
448
- "specMined": null,
449
- "whyFired": {
450
- "detector": "sast/mass-assignment",
451
- "ruleId": "CWE-915",
452
- "parser": "STRUCTURAL",
453
- "evidence": {
454
- "sinkSnippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
455
- "sourceSnippet": "const sha = crypto.createHash('sha256').update(body).digest('hex').slice(0, 8);",
456
- "pathSteps": [],
457
- "sanitizers": [],
458
- "guards": []
459
- },
460
- "considered": {
461
- "suppressionsApplied": [],
462
- "suppressionsSkipped": [],
463
- "reachabilityFilter": "unaffected",
464
- "clusterCollapsed": false,
465
- "typeNarrowed": false,
466
- "crownJewelTier": "low-value",
467
- "mitigationVerdict": "unreachable-in-prod"
468
- },
469
- "scanner": {
470
- "rulesetVersion": null,
471
- "packHash": null,
472
- "modelId": null
473
- }
474
- },
475
- "adversaryTranscript": null,
476
- "predictedBountyUsd": {
477
- "low": 50,
478
- "likely": 200,
479
- "high": 600,
480
- "program": "web2"
481
- },
482
- "bountyConfidence": "medium",
483
- "attackPlaybook": {
484
- "cwe": "CWE-915",
485
- "kind": "curl",
486
- "title": "Mass assignment — privilege escalation probe",
487
- "instruction": "Submit an extra field (role) on profile update; verify it sticks.",
488
- "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.",
489
- "ethics": "# AUTHORIZED USE ONLY — run only against systems you own or have explicit permission to test."
490
- }
491
- },
492
- {
493
- "id": "struct:type-stubs.js:48:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
494
- "kind": "sast",
495
- "severity": "medium",
496
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
497
- "cwe": "CWE-400",
498
- "owaspLlm": null,
499
- "stride": "Denial of Service",
500
- "file": "type-stubs.js",
501
- "line": 48,
502
- "snippet": "try { inputs.push(p + ':' + fs.statSync(fp).mtimeMs); } catch {}",
503
- "fix": null,
504
- "reachable": false,
505
- "triage": 22,
506
- "dataClasses": [],
507
- "chain": null,
508
- "confidence": 0.212,
509
- "toxicity": 28,
510
- "toxicityFactors": [
511
- "http-facing"
512
- ],
513
- "toxicityLabel": "Medium",
514
- "sources": null,
515
- "epssScore": null,
516
- "epssPercentile": null,
517
- "epssCve": null,
518
- "exploitedNow": false,
519
- "tags": null,
520
- "blastRadius": {
521
- "scope": "all-users",
522
- "dataAtRisk": [
523
- "config"
524
- ],
525
- "userCount": 50,
526
- "industry": "generic",
527
- "jurisdictions": [],
528
- "controlsApplied": [],
529
- "dollarBest": 23250,
530
- "dollarLikely": 136250,
531
- "dollarWorst": 775000,
532
- "dollarLow": 23250,
533
- "dollarHigh": 775000,
534
- "components": {
535
- "incidentResponse": {
536
- "low": 8000,
537
- "likely": 50000,
538
- "high": 250000
539
- },
540
- "legal": {
541
- "low": 10000,
542
- "likely": 75000,
543
- "high": 500000
544
- },
545
- "crisisPR": {
546
- "low": 0,
547
- "likely": 0,
548
- "high": 0
549
- },
550
- "notification": {
551
- "low": 5000,
552
- "likely": 10000,
553
- "high": 15000
554
- },
555
- "creditMonitoring": {
556
- "low": 0,
557
- "likely": 0,
558
- "high": 0
559
- },
560
- "regulatoryFines": {
561
- "low": 0,
562
- "likely": 0,
563
- "high": 0
564
- },
565
- "directDamage": {
566
- "low": 250,
567
- "likely": 1250,
568
- "high": 10000
569
- },
570
- "classAction": {
571
- "low": 0,
572
- "likely": 0,
573
- "high": 0
574
- },
575
- "lostBusiness": {
576
- "low": 0,
577
- "likely": 0,
578
- "high": 0
579
- }
580
- },
581
- "dominantDriver": "legal counsel",
582
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
583
- "confidence": "low",
584
- "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."
585
- },
586
- "stableId": "de7f5b06a0db0ac9",
587
- "confidenceTier": "very-low",
588
- "exploitability": 0.2,
589
- "exploitabilityTier": "low",
590
- "exploitabilityFactors": [
591
- "sev:medium",
592
- "unreachable"
593
- ],
594
- "clusterSize": null,
595
- "unreachable": false,
596
- "validator_verdict": "unvalidated",
597
- "llm_confidence": null,
598
- "unvalidated": true,
599
- "cross_language": false,
600
- "family": "dos-sync-io",
601
- "_unsigned": false,
602
- "_passThroughSigning": false,
603
- "signatureStatus": "verified",
604
- "regression_test": null,
605
- "poc": null,
606
- "calibrated_confidence": null,
607
- "calibrated_confidence_ci": null,
608
- "calibrated_n": 0,
609
- "calibration_reason": "no-history",
610
- "verifier_verdict": "cannot-verify",
611
- "verifier_reason": "no-poc-no-sanitizer-rule",
612
- "verifier_runner": null,
613
- "narration": null,
614
- "mitigationVerdict": "unreachable-in-prod",
615
- "mitigationsApplied": [],
616
- "mitigatedByWaf": false,
617
- "wafRuleId": null,
618
- "mitigatedByAuth": false,
619
- "authMechanism": null,
620
- "mitigatedByNetwork": false,
621
- "networkExposure": null,
622
- "featureFlag": null,
623
- "featureFlagState": null,
624
- "featureFlagRollout": null,
625
- "exposedInProd": false,
626
- "unreachableInProd": true,
627
- "coldPath": false,
628
- "hotPath": false,
629
- "prodRequestCount": null,
630
- "crownJewelScore": 0.15,
631
- "crownJewelTier": "low-value",
632
- "crownJewelFactors": [
633
- "shell-execution"
634
- ],
635
- "cloneClusterId": "1ca765ccc2c8227c",
636
- "cloneClusterSize": 2,
637
- "provenance": "human-likely",
638
- "provenanceScore": 0.12,
639
- "typeNarrowed": null,
640
- "strideCategory": "denialOfService",
641
- "personaScores": {
642
- "script-kiddie": {
643
- "score": 0.4,
644
- "tier": "medium",
645
- "factors": [
646
- "sev:medium"
647
- ]
648
- },
649
- "opportunistic-criminal": {
650
- "score": 0.4,
651
- "tier": "medium",
652
- "factors": [
653
- "sev:medium"
654
- ]
655
- },
656
- "apt-nation-state": {
657
- "score": 0.4,
658
- "tier": "medium",
659
- "factors": [
660
- "sev:medium"
661
- ]
662
- },
663
- "supply-chain-attacker": {
664
- "score": 0.4,
665
- "tier": "medium",
666
- "factors": [
667
- "sev:medium"
668
- ]
669
- },
670
- "malicious-insider": {
671
- "score": 0.4,
672
- "tier": "medium",
673
- "factors": [
674
- "sev:medium"
675
- ]
676
- }
677
- },
678
- "personaTopTwo": [
679
- "script-kiddie",
680
- "opportunistic-criminal"
681
- ],
682
- "personaMaxName": "script-kiddie",
683
- "personaMaxScore": 0.4,
684
- "reverseExposure": null,
685
- "specMined": null,
686
- "whyFired": {
687
- "detector": "sast/dos-sync-io",
688
- "ruleId": "CWE-400",
689
- "parser": "STRUCTURAL",
690
- "evidence": {
691
- "sinkSnippet": "try { inputs.push(p + ':' + fs.statSync(fp).mtimeMs); } catch {}",
692
- "sourceSnippet": "try { inputs.push(p + ':' + fs.statSync(fp).mtimeMs); } catch {}",
693
- "pathSteps": [],
694
- "sanitizers": [],
695
- "guards": []
696
- },
697
- "considered": {
698
- "suppressionsApplied": [],
699
- "suppressionsSkipped": [],
700
- "reachabilityFilter": "unaffected",
701
- "clusterCollapsed": false,
702
- "typeNarrowed": false,
703
- "crownJewelTier": "low-value",
704
- "mitigationVerdict": "unreachable-in-prod"
705
- },
706
- "scanner": {
707
- "rulesetVersion": null,
708
- "packHash": null,
709
- "modelId": null
710
- }
711
- },
712
- "adversaryTranscript": null,
713
- "predictedBountyUsd": {
714
- "low": 10,
715
- "likely": 40,
716
- "high": 120,
717
- "program": "web2"
718
- },
719
- "bountyConfidence": "high",
720
- "attackPlaybook": null
721
- },
722
- {
723
- "id": "struct:type-stubs.js:57:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
724
- "kind": "sast",
725
- "severity": "medium",
726
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
727
- "cwe": "CWE-400",
728
- "owaspLlm": null,
729
- "stride": "Denial of Service",
730
- "file": "type-stubs.js",
731
- "line": 57,
732
- "snippet": "if (!fs.existsSync(fp)) return null;",
733
- "fix": null,
734
- "reachable": false,
735
- "triage": 22,
736
- "dataClasses": [],
737
- "chain": null,
738
- "confidence": 0.212,
739
- "toxicity": 28,
740
- "toxicityFactors": [
741
- "http-facing"
742
- ],
743
- "toxicityLabel": "Medium",
744
- "sources": null,
745
- "epssScore": null,
746
- "epssPercentile": null,
747
- "epssCve": null,
748
- "exploitedNow": false,
749
- "tags": null,
750
- "blastRadius": {
751
- "scope": "all-users",
752
- "dataAtRisk": [
753
- "config"
754
- ],
755
- "userCount": 50,
756
- "industry": "generic",
757
- "jurisdictions": [],
758
- "controlsApplied": [],
759
- "dollarBest": 23250,
760
- "dollarLikely": 136250,
761
- "dollarWorst": 775000,
762
- "dollarLow": 23250,
763
- "dollarHigh": 775000,
764
- "components": {
765
- "incidentResponse": {
766
- "low": 8000,
767
- "likely": 50000,
768
- "high": 250000
769
- },
770
- "legal": {
771
- "low": 10000,
772
- "likely": 75000,
773
- "high": 500000
774
- },
775
- "crisisPR": {
776
- "low": 0,
777
- "likely": 0,
778
- "high": 0
779
- },
780
- "notification": {
781
- "low": 5000,
782
- "likely": 10000,
783
- "high": 15000
784
- },
785
- "creditMonitoring": {
786
- "low": 0,
787
- "likely": 0,
788
- "high": 0
789
- },
790
- "regulatoryFines": {
791
- "low": 0,
792
- "likely": 0,
793
- "high": 0
794
- },
795
- "directDamage": {
796
- "low": 250,
797
- "likely": 1250,
798
- "high": 10000
799
- },
800
- "classAction": {
801
- "low": 0,
802
- "likely": 0,
803
- "high": 0
804
- },
805
- "lostBusiness": {
806
- "low": 0,
807
- "likely": 0,
808
- "high": 0
809
- }
810
- },
811
- "dominantDriver": "legal counsel",
812
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
813
- "confidence": "low",
814
- "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."
815
- },
816
- "stableId": "256de17293c86e74",
817
- "confidenceTier": "very-low",
818
- "exploitability": 0.2,
819
- "exploitabilityTier": "low",
820
- "exploitabilityFactors": [
821
- "sev:medium",
822
- "unreachable"
823
- ],
824
- "clusterSize": null,
825
- "unreachable": false,
826
- "validator_verdict": "unvalidated",
827
- "llm_confidence": null,
828
- "unvalidated": true,
829
- "cross_language": false,
830
- "family": "dos-sync-io",
831
- "_unsigned": false,
832
- "_passThroughSigning": false,
833
- "signatureStatus": "verified",
834
- "regression_test": null,
835
- "poc": null,
836
- "calibrated_confidence": null,
837
- "calibrated_confidence_ci": null,
838
- "calibrated_n": 0,
839
- "calibration_reason": "no-history",
840
- "verifier_verdict": "cannot-verify",
841
- "verifier_reason": "no-poc-no-sanitizer-rule",
842
- "verifier_runner": null,
843
- "narration": null,
844
- "mitigationVerdict": "unreachable-in-prod",
845
- "mitigationsApplied": [],
846
- "mitigatedByWaf": false,
847
- "wafRuleId": null,
848
- "mitigatedByAuth": false,
849
- "authMechanism": null,
850
- "mitigatedByNetwork": false,
851
- "networkExposure": null,
852
- "featureFlag": null,
853
- "featureFlagState": null,
854
- "featureFlagRollout": null,
855
- "exposedInProd": false,
856
- "unreachableInProd": true,
857
- "coldPath": false,
858
- "hotPath": false,
859
- "prodRequestCount": null,
860
- "crownJewelScore": 0.15,
861
- "crownJewelTier": "low-value",
862
- "crownJewelFactors": [
863
- "shell-execution"
864
- ],
865
- "cloneClusterId": "66b8a8c25816e7f9",
866
- "cloneClusterSize": 2,
867
- "provenance": "human-likely",
868
- "provenanceScore": 0.12,
869
- "typeNarrowed": null,
870
- "strideCategory": "denialOfService",
871
- "personaScores": {
872
- "script-kiddie": {
873
- "score": 0.4,
874
- "tier": "medium",
875
- "factors": [
876
- "sev:medium"
877
- ]
878
- },
879
- "opportunistic-criminal": {
880
- "score": 0.4,
881
- "tier": "medium",
882
- "factors": [
883
- "sev:medium"
884
- ]
885
- },
886
- "apt-nation-state": {
887
- "score": 0.4,
888
- "tier": "medium",
889
- "factors": [
890
- "sev:medium"
891
- ]
892
- },
893
- "supply-chain-attacker": {
894
- "score": 0.4,
895
- "tier": "medium",
896
- "factors": [
897
- "sev:medium"
898
- ]
899
- },
900
- "malicious-insider": {
901
- "score": 0.4,
902
- "tier": "medium",
903
- "factors": [
904
- "sev:medium"
905
- ]
906
- }
907
- },
908
- "personaTopTwo": [
909
- "script-kiddie",
910
- "opportunistic-criminal"
911
- ],
912
- "personaMaxName": "script-kiddie",
913
- "personaMaxScore": 0.4,
914
- "reverseExposure": null,
915
- "specMined": null,
916
- "whyFired": {
917
- "detector": "sast/dos-sync-io",
918
- "ruleId": "CWE-400",
919
- "parser": "STRUCTURAL",
920
- "evidence": {
921
- "sinkSnippet": "if (!fs.existsSync(fp)) return null;",
922
- "sourceSnippet": "if (!fs.existsSync(fp)) return null;",
923
- "pathSteps": [],
924
- "sanitizers": [],
925
- "guards": []
926
- },
927
- "considered": {
928
- "suppressionsApplied": [],
929
- "suppressionsSkipped": [],
930
- "reachabilityFilter": "unaffected",
931
- "clusterCollapsed": false,
932
- "typeNarrowed": false,
933
- "crownJewelTier": "low-value",
934
- "mitigationVerdict": "unreachable-in-prod"
935
- },
936
- "scanner": {
937
- "rulesetVersion": null,
938
- "packHash": null,
939
- "modelId": null
940
- }
941
- },
942
- "adversaryTranscript": null,
943
- "predictedBountyUsd": {
944
- "low": 10,
945
- "likely": 40,
946
- "high": 120,
947
- "program": "web2"
948
- },
949
- "bountyConfidence": "high",
950
- "attackPlaybook": null
951
- },
952
- {
953
- "id": "struct:type-stubs.js:58:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
954
- "kind": "sast",
955
- "severity": "medium",
956
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
957
- "cwe": "CWE-400",
958
- "owaspLlm": null,
959
- "stride": "Denial of Service",
960
- "file": "type-stubs.js",
961
- "line": 58,
962
- "snippet": "const obj = JSON.parse(fs.readFileSync(fp, 'utf8'));",
963
- "fix": null,
964
- "reachable": false,
965
- "triage": 22,
966
- "dataClasses": [],
967
- "chain": null,
968
- "confidence": 0.212,
969
- "toxicity": 28,
970
- "toxicityFactors": [
971
- "http-facing"
972
- ],
973
- "toxicityLabel": "Medium",
974
- "sources": null,
975
- "epssScore": null,
976
- "epssPercentile": null,
977
- "epssCve": null,
978
- "exploitedNow": false,
979
- "tags": null,
980
- "blastRadius": {
981
- "scope": "all-users",
982
- "dataAtRisk": [
983
- "config"
984
- ],
985
- "userCount": 50,
986
- "industry": "generic",
987
- "jurisdictions": [],
988
- "controlsApplied": [],
989
- "dollarBest": 23250,
990
- "dollarLikely": 136250,
991
- "dollarWorst": 775000,
992
- "dollarLow": 23250,
993
- "dollarHigh": 775000,
994
- "components": {
995
- "incidentResponse": {
996
- "low": 8000,
997
- "likely": 50000,
998
- "high": 250000
999
- },
1000
- "legal": {
1001
- "low": 10000,
1002
- "likely": 75000,
1003
- "high": 500000
1004
- },
1005
- "crisisPR": {
1006
- "low": 0,
1007
- "likely": 0,
1008
- "high": 0
1009
- },
1010
- "notification": {
1011
- "low": 5000,
1012
- "likely": 10000,
1013
- "high": 15000
1014
- },
1015
- "creditMonitoring": {
1016
- "low": 0,
1017
- "likely": 0,
1018
- "high": 0
1019
- },
1020
- "regulatoryFines": {
1021
- "low": 0,
1022
- "likely": 0,
1023
- "high": 0
1024
- },
1025
- "directDamage": {
1026
- "low": 250,
1027
- "likely": 1250,
1028
- "high": 10000
1029
- },
1030
- "classAction": {
1031
- "low": 0,
1032
- "likely": 0,
1033
- "high": 0
1034
- },
1035
- "lostBusiness": {
1036
- "low": 0,
1037
- "likely": 0,
1038
- "high": 0
1039
- }
1040
- },
1041
- "dominantDriver": "legal counsel",
1042
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
1043
- "confidence": "low",
1044
- "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."
1045
- },
1046
- "stableId": "4f8d060ad72a925a",
1047
- "confidenceTier": "very-low",
1048
- "exploitability": 0.2,
1049
- "exploitabilityTier": "low",
1050
- "exploitabilityFactors": [
1051
- "sev:medium",
1052
- "unreachable"
1053
- ],
1054
- "clusterSize": null,
1055
- "unreachable": false,
1056
- "validator_verdict": "unvalidated",
1057
- "llm_confidence": null,
1058
- "unvalidated": true,
1059
- "cross_language": false,
1060
- "family": "dos-sync-io",
1061
- "_unsigned": false,
1062
- "_passThroughSigning": false,
1063
- "signatureStatus": "verified",
1064
- "regression_test": null,
1065
- "poc": null,
1066
- "calibrated_confidence": null,
1067
- "calibrated_confidence_ci": null,
1068
- "calibrated_n": 0,
1069
- "calibration_reason": "no-history",
1070
- "verifier_verdict": "cannot-verify",
1071
- "verifier_reason": "no-poc-no-sanitizer-rule",
1072
- "verifier_runner": null,
1073
- "narration": null,
1074
- "mitigationVerdict": "unreachable-in-prod",
1075
- "mitigationsApplied": [],
1076
- "mitigatedByWaf": false,
1077
- "wafRuleId": null,
1078
- "mitigatedByAuth": false,
1079
- "authMechanism": null,
1080
- "mitigatedByNetwork": false,
1081
- "networkExposure": null,
1082
- "featureFlag": null,
1083
- "featureFlagState": null,
1084
- "featureFlagRollout": null,
1085
- "exposedInProd": false,
1086
- "unreachableInProd": true,
1087
- "coldPath": false,
1088
- "hotPath": false,
1089
- "prodRequestCount": null,
1090
- "crownJewelScore": 0.15,
1091
- "crownJewelTier": "low-value",
1092
- "crownJewelFactors": [
1093
- "shell-execution"
1094
- ],
1095
- "cloneClusterId": "8b60c3f57d48c622",
1096
- "cloneClusterSize": 1,
1097
- "provenance": "human-likely",
1098
- "provenanceScore": 0.12,
1099
- "typeNarrowed": null,
1100
- "strideCategory": "denialOfService",
1101
- "personaScores": {
1102
- "script-kiddie": {
1103
- "score": 0.4,
1104
- "tier": "medium",
1105
- "factors": [
1106
- "sev:medium"
1107
- ]
1108
- },
1109
- "opportunistic-criminal": {
1110
- "score": 0.4,
1111
- "tier": "medium",
1112
- "factors": [
1113
- "sev:medium"
1114
- ]
1115
- },
1116
- "apt-nation-state": {
1117
- "score": 0.4,
1118
- "tier": "medium",
1119
- "factors": [
1120
- "sev:medium"
1121
- ]
1122
- },
1123
- "supply-chain-attacker": {
1124
- "score": 0.4,
1125
- "tier": "medium",
1126
- "factors": [
1127
- "sev:medium"
1128
- ]
1129
- },
1130
- "malicious-insider": {
1131
- "score": 0.4,
1132
- "tier": "medium",
1133
- "factors": [
1134
- "sev:medium"
1135
- ]
1136
- }
1137
- },
1138
- "personaTopTwo": [
1139
- "script-kiddie",
1140
- "opportunistic-criminal"
1141
- ],
1142
- "personaMaxName": "script-kiddie",
1143
- "personaMaxScore": 0.4,
1144
- "reverseExposure": null,
1145
- "specMined": null,
1146
- "whyFired": {
1147
- "detector": "sast/dos-sync-io",
1148
- "ruleId": "CWE-400",
1149
- "parser": "STRUCTURAL",
1150
- "evidence": {
1151
- "sinkSnippet": "const obj = JSON.parse(fs.readFileSync(fp, 'utf8'));",
1152
- "sourceSnippet": "const obj = JSON.parse(fs.readFileSync(fp, 'utf8'));",
1153
- "pathSteps": [],
1154
- "sanitizers": [],
1155
- "guards": []
1156
- },
1157
- "considered": {
1158
- "suppressionsApplied": [],
1159
- "suppressionsSkipped": [],
1160
- "reachabilityFilter": "unaffected",
1161
- "clusterCollapsed": false,
1162
- "typeNarrowed": false,
1163
- "crownJewelTier": "low-value",
1164
- "mitigationVerdict": "unreachable-in-prod"
1165
- },
1166
- "scanner": {
1167
- "rulesetVersion": null,
1168
- "packHash": null,
1169
- "modelId": null
1170
- }
1171
- },
1172
- "adversaryTranscript": null,
1173
- "predictedBountyUsd": {
1174
- "low": 10,
1175
- "likely": 40,
1176
- "high": 120,
1177
- "program": "web2"
1178
- },
1179
- "bountyConfidence": "high",
1180
- "attackPlaybook": null
1181
- },
1182
- {
1183
- "id": "struct:type-stubs.js:79:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
1184
- "kind": "sast",
1185
- "severity": "medium",
1186
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
1187
- "cwe": "CWE-400",
1188
- "owaspLlm": null,
1189
- "stride": "Denial of Service",
1190
- "file": "type-stubs.js",
1191
- "line": 79,
1192
- "snippet": "try { fs.writeFileSync(fp, JSON.stringify(obj)); } catch {}",
1193
- "fix": null,
1194
- "reachable": false,
1195
- "triage": 22,
1196
- "dataClasses": [],
1197
- "chain": null,
1198
- "confidence": 0.212,
1199
- "toxicity": 28,
1200
- "toxicityFactors": [
1201
- "http-facing"
1202
- ],
1203
- "toxicityLabel": "Medium",
1204
- "sources": null,
1205
- "epssScore": null,
1206
- "epssPercentile": null,
1207
- "epssCve": null,
1208
- "exploitedNow": false,
1209
- "tags": null,
1210
- "blastRadius": {
1211
- "scope": "all-users",
1212
- "dataAtRisk": [
1213
- "config"
1214
- ],
1215
- "userCount": 50,
1216
- "industry": "generic",
1217
- "jurisdictions": [],
1218
- "controlsApplied": [],
1219
- "dollarBest": 23250,
1220
- "dollarLikely": 136250,
1221
- "dollarWorst": 775000,
1222
- "dollarLow": 23250,
1223
- "dollarHigh": 775000,
1224
- "components": {
1225
- "incidentResponse": {
1226
- "low": 8000,
1227
- "likely": 50000,
1228
- "high": 250000
1229
- },
1230
- "legal": {
1231
- "low": 10000,
1232
- "likely": 75000,
1233
- "high": 500000
1234
- },
1235
- "crisisPR": {
1236
- "low": 0,
1237
- "likely": 0,
1238
- "high": 0
1239
- },
1240
- "notification": {
1241
- "low": 5000,
1242
- "likely": 10000,
1243
- "high": 15000
1244
- },
1245
- "creditMonitoring": {
1246
- "low": 0,
1247
- "likely": 0,
1248
- "high": 0
1249
- },
1250
- "regulatoryFines": {
1251
- "low": 0,
1252
- "likely": 0,
1253
- "high": 0
1254
- },
1255
- "directDamage": {
1256
- "low": 250,
1257
- "likely": 1250,
1258
- "high": 10000
1259
- },
1260
- "classAction": {
1261
- "low": 0,
1262
- "likely": 0,
1263
- "high": 0
1264
- },
1265
- "lostBusiness": {
1266
- "low": 0,
1267
- "likely": 0,
1268
- "high": 0
1269
- }
1270
- },
1271
- "dominantDriver": "legal counsel",
1272
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
1273
- "confidence": "low",
1274
- "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."
1275
- },
1276
- "stableId": "e7a40ff787e8c228",
1277
- "confidenceTier": "very-low",
1278
- "exploitability": 0.2,
1279
- "exploitabilityTier": "low",
1280
- "exploitabilityFactors": [
1281
- "sev:medium",
1282
- "unreachable"
1283
- ],
1284
- "clusterSize": null,
1285
- "unreachable": false,
1286
- "validator_verdict": "unvalidated",
1287
- "llm_confidence": null,
1288
- "unvalidated": true,
1289
- "cross_language": false,
1290
- "family": "dos-sync-io",
1291
- "_unsigned": false,
1292
- "_passThroughSigning": false,
1293
- "signatureStatus": "verified",
1294
- "regression_test": null,
1295
- "poc": null,
1296
- "calibrated_confidence": null,
1297
- "calibrated_confidence_ci": null,
1298
- "calibrated_n": 0,
1299
- "calibration_reason": "no-history",
1300
- "verifier_verdict": "cannot-verify",
1301
- "verifier_reason": "no-poc-no-sanitizer-rule",
1302
- "verifier_runner": null,
1303
- "narration": null,
1304
- "mitigationVerdict": "unreachable-in-prod",
1305
- "mitigationsApplied": [],
1306
- "mitigatedByWaf": false,
1307
- "wafRuleId": null,
1308
- "mitigatedByAuth": false,
1309
- "authMechanism": null,
1310
- "mitigatedByNetwork": false,
1311
- "networkExposure": null,
1312
- "featureFlag": null,
1313
- "featureFlagState": null,
1314
- "featureFlagRollout": null,
1315
- "exposedInProd": false,
1316
- "unreachableInProd": true,
1317
- "coldPath": false,
1318
- "hotPath": false,
1319
- "prodRequestCount": null,
1320
- "crownJewelScore": 0.15,
1321
- "crownJewelTier": "low-value",
1322
- "crownJewelFactors": [
1323
- "shell-execution"
1324
- ],
1325
- "cloneClusterId": "d2ce1948de2c53fb",
1326
- "cloneClusterSize": 1,
1327
- "provenance": "human-likely",
1328
- "provenanceScore": 0.12,
1329
- "typeNarrowed": null,
1330
- "strideCategory": "denialOfService",
1331
- "personaScores": {
1332
- "script-kiddie": {
1333
- "score": 0.4,
1334
- "tier": "medium",
1335
- "factors": [
1336
- "sev:medium"
1337
- ]
1338
- },
1339
- "opportunistic-criminal": {
1340
- "score": 0.4,
1341
- "tier": "medium",
1342
- "factors": [
1343
- "sev:medium"
1344
- ]
1345
- },
1346
- "apt-nation-state": {
1347
- "score": 0.4,
1348
- "tier": "medium",
1349
- "factors": [
1350
- "sev:medium"
1351
- ]
1352
- },
1353
- "supply-chain-attacker": {
1354
- "score": 0.4,
1355
- "tier": "medium",
1356
- "factors": [
1357
- "sev:medium"
1358
- ]
1359
- },
1360
- "malicious-insider": {
1361
- "score": 0.4,
1362
- "tier": "medium",
1363
- "factors": [
1364
- "sev:medium"
1365
- ]
1366
- }
1367
- },
1368
- "personaTopTwo": [
1369
- "script-kiddie",
1370
- "opportunistic-criminal"
1371
- ],
1372
- "personaMaxName": "script-kiddie",
1373
- "personaMaxScore": 0.4,
1374
- "reverseExposure": null,
1375
- "specMined": null,
1376
- "whyFired": {
1377
- "detector": "sast/dos-sync-io",
1378
- "ruleId": "CWE-400",
1379
- "parser": "STRUCTURAL",
1380
- "evidence": {
1381
- "sinkSnippet": "try { fs.writeFileSync(fp, JSON.stringify(obj)); } catch {}",
1382
- "sourceSnippet": "try { fs.writeFileSync(fp, JSON.stringify(obj)); } catch {}",
1383
- "pathSteps": [],
1384
- "sanitizers": [],
1385
- "guards": []
1386
- },
1387
- "considered": {
1388
- "suppressionsApplied": [],
1389
- "suppressionsSkipped": [],
1390
- "reachabilityFilter": "unaffected",
1391
- "clusterCollapsed": false,
1392
- "typeNarrowed": false,
1393
- "crownJewelTier": "low-value",
1394
- "mitigationVerdict": "unreachable-in-prod"
1395
- },
1396
- "scanner": {
1397
- "rulesetVersion": null,
1398
- "packHash": null,
1399
- "modelId": null
1400
- }
1401
- },
1402
- "adversaryTranscript": null,
1403
- "predictedBountyUsd": {
1404
- "low": 10,
1405
- "likely": 40,
1406
- "high": 120,
1407
- "program": "web2"
1408
- },
1409
- "bountyConfidence": "high",
1410
- "attackPlaybook": null
1411
- },
1412
- {
1413
- "id": "struct:type-stubs.js:190:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
1414
- "kind": "sast",
1415
- "severity": "medium",
1416
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
1417
- "cwe": "CWE-400",
1418
- "owaspLlm": null,
1419
- "stride": "Denial of Service",
1420
- "file": "type-stubs.js",
1421
- "line": 190,
1422
- "snippet": "try { entries = fs.readdirSync(dir, { withFileTypes: true }); } catch { return; }",
1423
- "fix": null,
1424
- "reachable": false,
1425
- "triage": 22,
1426
- "dataClasses": [],
1427
- "chain": null,
1428
- "confidence": 0.212,
1429
- "toxicity": 28,
1430
- "toxicityFactors": [
1431
- "http-facing"
1432
- ],
1433
- "toxicityLabel": "Medium",
1434
- "sources": null,
1435
- "epssScore": null,
1436
- "epssPercentile": null,
1437
- "epssCve": null,
1438
- "exploitedNow": false,
1439
- "tags": null,
1440
- "blastRadius": {
1441
- "scope": "all-users",
1442
- "dataAtRisk": [
1443
- "config"
1444
- ],
1445
- "userCount": 50,
1446
- "industry": "generic",
1447
- "jurisdictions": [],
1448
- "controlsApplied": [],
1449
- "dollarBest": 23250,
1450
- "dollarLikely": 136250,
1451
- "dollarWorst": 775000,
1452
- "dollarLow": 23250,
1453
- "dollarHigh": 775000,
1454
- "components": {
1455
- "incidentResponse": {
1456
- "low": 8000,
1457
- "likely": 50000,
1458
- "high": 250000
1459
- },
1460
- "legal": {
1461
- "low": 10000,
1462
- "likely": 75000,
1463
- "high": 500000
1464
- },
1465
- "crisisPR": {
1466
- "low": 0,
1467
- "likely": 0,
1468
- "high": 0
1469
- },
1470
- "notification": {
1471
- "low": 5000,
1472
- "likely": 10000,
1473
- "high": 15000
1474
- },
1475
- "creditMonitoring": {
1476
- "low": 0,
1477
- "likely": 0,
1478
- "high": 0
1479
- },
1480
- "regulatoryFines": {
1481
- "low": 0,
1482
- "likely": 0,
1483
- "high": 0
1484
- },
1485
- "directDamage": {
1486
- "low": 250,
1487
- "likely": 1250,
1488
- "high": 10000
1489
- },
1490
- "classAction": {
1491
- "low": 0,
1492
- "likely": 0,
1493
- "high": 0
1494
- },
1495
- "lostBusiness": {
1496
- "low": 0,
1497
- "likely": 0,
1498
- "high": 0
1499
- }
1500
- },
1501
- "dominantDriver": "legal counsel",
1502
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
1503
- "confidence": "low",
1504
- "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."
1505
- },
1506
- "stableId": "db5b5598e24d7b37",
1507
- "confidenceTier": "very-low",
1508
- "exploitability": 0.2,
1509
- "exploitabilityTier": "low",
1510
- "exploitabilityFactors": [
1511
- "sev:medium",
1512
- "unreachable"
1513
- ],
1514
- "clusterSize": null,
1515
- "unreachable": false,
1516
- "validator_verdict": "unvalidated",
1517
- "llm_confidence": null,
1518
- "unvalidated": true,
1519
- "cross_language": false,
1520
- "family": "dos-sync-io",
1521
- "_unsigned": false,
1522
- "_passThroughSigning": false,
1523
- "signatureStatus": "verified",
1524
- "regression_test": null,
1525
- "poc": null,
1526
- "calibrated_confidence": null,
1527
- "calibrated_confidence_ci": null,
1528
- "calibrated_n": 0,
1529
- "calibration_reason": "no-history",
1530
- "verifier_verdict": "cannot-verify",
1531
- "verifier_reason": "no-poc-no-sanitizer-rule",
1532
- "verifier_runner": null,
1533
- "narration": null,
1534
- "mitigationVerdict": "unreachable-in-prod",
1535
- "mitigationsApplied": [],
1536
- "mitigatedByWaf": false,
1537
- "wafRuleId": null,
1538
- "mitigatedByAuth": false,
1539
- "authMechanism": null,
1540
- "mitigatedByNetwork": false,
1541
- "networkExposure": null,
1542
- "featureFlag": null,
1543
- "featureFlagState": null,
1544
- "featureFlagRollout": null,
1545
- "exposedInProd": false,
1546
- "unreachableInProd": true,
1547
- "coldPath": false,
1548
- "hotPath": false,
1549
- "prodRequestCount": null,
1550
- "crownJewelScore": 0.15,
1551
- "crownJewelTier": "low-value",
1552
- "crownJewelFactors": [
1553
- "shell-execution"
1554
- ],
1555
- "cloneClusterId": "b093e72efde4b555",
1556
- "cloneClusterSize": 1,
1557
- "provenance": "human-likely",
1558
- "provenanceScore": 0.12,
1559
- "typeNarrowed": null,
1560
- "strideCategory": "denialOfService",
1561
- "personaScores": {
1562
- "script-kiddie": {
1563
- "score": 0.4,
1564
- "tier": "medium",
1565
- "factors": [
1566
- "sev:medium"
1567
- ]
1568
- },
1569
- "opportunistic-criminal": {
1570
- "score": 0.4,
1571
- "tier": "medium",
1572
- "factors": [
1573
- "sev:medium"
1574
- ]
1575
- },
1576
- "apt-nation-state": {
1577
- "score": 0.4,
1578
- "tier": "medium",
1579
- "factors": [
1580
- "sev:medium"
1581
- ]
1582
- },
1583
- "supply-chain-attacker": {
1584
- "score": 0.4,
1585
- "tier": "medium",
1586
- "factors": [
1587
- "sev:medium"
1588
- ]
1589
- },
1590
- "malicious-insider": {
1591
- "score": 0.4,
1592
- "tier": "medium",
1593
- "factors": [
1594
- "sev:medium"
1595
- ]
1596
- }
1597
- },
1598
- "personaTopTwo": [
1599
- "script-kiddie",
1600
- "opportunistic-criminal"
1601
- ],
1602
- "personaMaxName": "script-kiddie",
1603
- "personaMaxScore": 0.4,
1604
- "reverseExposure": null,
1605
- "specMined": null,
1606
- "whyFired": {
1607
- "detector": "sast/dos-sync-io",
1608
- "ruleId": "CWE-400",
1609
- "parser": "STRUCTURAL",
1610
- "evidence": {
1611
- "sinkSnippet": "try { entries = fs.readdirSync(dir, { withFileTypes: true }); } catch { return; }",
1612
- "sourceSnippet": "try { entries = fs.readdirSync(dir, { withFileTypes: true }); } catch { return; }",
1613
- "pathSteps": [],
1614
- "sanitizers": [],
1615
- "guards": []
1616
- },
1617
- "considered": {
1618
- "suppressionsApplied": [],
1619
- "suppressionsSkipped": [],
1620
- "reachabilityFilter": "unaffected",
1621
- "clusterCollapsed": false,
1622
- "typeNarrowed": false,
1623
- "crownJewelTier": "low-value",
1624
- "mitigationVerdict": "unreachable-in-prod"
1625
- },
1626
- "scanner": {
1627
- "rulesetVersion": null,
1628
- "packHash": null,
1629
- "modelId": null
1630
- }
1631
- },
1632
- "adversaryTranscript": null,
1633
- "predictedBountyUsd": {
1634
- "low": 10,
1635
- "likely": 40,
1636
- "high": 120,
1637
- "program": "web2"
1638
- },
1639
- "bountyConfidence": "high",
1640
- "attackPlaybook": null
1641
- },
1642
- {
1643
- "id": "struct:type-stubs.js:198:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
1644
- "kind": "sast",
1645
- "severity": "medium",
1646
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
1647
- "cwe": "CWE-400",
1648
- "owaspLlm": null,
1649
- "stride": "Denial of Service",
1650
- "file": "type-stubs.js",
1651
- "line": 198,
1652
- "snippet": "if (fs.existsSync(tdir)) walk(tdir, depth + 1);",
1653
- "fix": null,
1654
- "reachable": false,
1655
- "triage": 22,
1656
- "dataClasses": [],
1657
- "chain": null,
1658
- "confidence": 0.212,
1659
- "toxicity": 28,
1660
- "toxicityFactors": [
1661
- "http-facing"
1662
- ],
1663
- "toxicityLabel": "Medium",
1664
- "sources": null,
1665
- "epssScore": null,
1666
- "epssPercentile": null,
1667
- "epssCve": null,
1668
- "exploitedNow": false,
1669
- "tags": null,
1670
- "blastRadius": {
1671
- "scope": "all-users",
1672
- "dataAtRisk": [
1673
- "config"
1674
- ],
1675
- "userCount": 50,
1676
- "industry": "generic",
1677
- "jurisdictions": [],
1678
- "controlsApplied": [],
1679
- "dollarBest": 23250,
1680
- "dollarLikely": 136250,
1681
- "dollarWorst": 775000,
1682
- "dollarLow": 23250,
1683
- "dollarHigh": 775000,
1684
- "components": {
1685
- "incidentResponse": {
1686
- "low": 8000,
1687
- "likely": 50000,
1688
- "high": 250000
1689
- },
1690
- "legal": {
1691
- "low": 10000,
1692
- "likely": 75000,
1693
- "high": 500000
1694
- },
1695
- "crisisPR": {
1696
- "low": 0,
1697
- "likely": 0,
1698
- "high": 0
1699
- },
1700
- "notification": {
1701
- "low": 5000,
1702
- "likely": 10000,
1703
- "high": 15000
1704
- },
1705
- "creditMonitoring": {
1706
- "low": 0,
1707
- "likely": 0,
1708
- "high": 0
1709
- },
1710
- "regulatoryFines": {
1711
- "low": 0,
1712
- "likely": 0,
1713
- "high": 0
1714
- },
1715
- "directDamage": {
1716
- "low": 250,
1717
- "likely": 1250,
1718
- "high": 10000
1719
- },
1720
- "classAction": {
1721
- "low": 0,
1722
- "likely": 0,
1723
- "high": 0
1724
- },
1725
- "lostBusiness": {
1726
- "low": 0,
1727
- "likely": 0,
1728
- "high": 0
1729
- }
1730
- },
1731
- "dominantDriver": "legal counsel",
1732
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
1733
- "confidence": "low",
1734
- "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."
1735
- },
1736
- "stableId": "da0930b64e53120b",
1737
- "confidenceTier": "very-low",
1738
- "exploitability": 0.2,
1739
- "exploitabilityTier": "low",
1740
- "exploitabilityFactors": [
1741
- "sev:medium",
1742
- "unreachable"
1743
- ],
1744
- "clusterSize": null,
1745
- "unreachable": false,
1746
- "validator_verdict": "unvalidated",
1747
- "llm_confidence": null,
1748
- "unvalidated": true,
1749
- "cross_language": false,
1750
- "family": "dos-sync-io",
1751
- "_unsigned": false,
1752
- "_passThroughSigning": false,
1753
- "signatureStatus": "verified",
1754
- "regression_test": null,
1755
- "poc": null,
1756
- "calibrated_confidence": null,
1757
- "calibrated_confidence_ci": null,
1758
- "calibrated_n": 0,
1759
- "calibration_reason": "no-history",
1760
- "verifier_verdict": "cannot-verify",
1761
- "verifier_reason": "no-poc-no-sanitizer-rule",
1762
- "verifier_runner": null,
1763
- "narration": null,
1764
- "mitigationVerdict": "unreachable-in-prod",
1765
- "mitigationsApplied": [],
1766
- "mitigatedByWaf": false,
1767
- "wafRuleId": null,
1768
- "mitigatedByAuth": false,
1769
- "authMechanism": null,
1770
- "mitigatedByNetwork": false,
1771
- "networkExposure": null,
1772
- "featureFlag": null,
1773
- "featureFlagState": null,
1774
- "featureFlagRollout": null,
1775
- "exposedInProd": false,
1776
- "unreachableInProd": true,
1777
- "coldPath": false,
1778
- "hotPath": false,
1779
- "prodRequestCount": null,
1780
- "crownJewelScore": 0.15,
1781
- "crownJewelTier": "low-value",
1782
- "crownJewelFactors": [
1783
- "shell-execution"
1784
- ],
1785
- "cloneClusterId": "5e5357c1989b7538",
1786
- "cloneClusterSize": 1,
1787
- "provenance": "human-likely",
1788
- "provenanceScore": 0.12,
1789
- "typeNarrowed": null,
1790
- "strideCategory": "denialOfService",
1791
- "personaScores": {
1792
- "script-kiddie": {
1793
- "score": 0.4,
1794
- "tier": "medium",
1795
- "factors": [
1796
- "sev:medium"
1797
- ]
1798
- },
1799
- "opportunistic-criminal": {
1800
- "score": 0.4,
1801
- "tier": "medium",
1802
- "factors": [
1803
- "sev:medium"
1804
- ]
1805
- },
1806
- "apt-nation-state": {
1807
- "score": 0.4,
1808
- "tier": "medium",
1809
- "factors": [
1810
- "sev:medium"
1811
- ]
1812
- },
1813
- "supply-chain-attacker": {
1814
- "score": 0.4,
1815
- "tier": "medium",
1816
- "factors": [
1817
- "sev:medium"
1818
- ]
1819
- },
1820
- "malicious-insider": {
1821
- "score": 0.4,
1822
- "tier": "medium",
1823
- "factors": [
1824
- "sev:medium"
1825
- ]
1826
- }
1827
- },
1828
- "personaTopTwo": [
1829
- "script-kiddie",
1830
- "opportunistic-criminal"
1831
- ],
1832
- "personaMaxName": "script-kiddie",
1833
- "personaMaxScore": 0.4,
1834
- "reverseExposure": null,
1835
- "specMined": null,
1836
- "whyFired": {
1837
- "detector": "sast/dos-sync-io",
1838
- "ruleId": "CWE-400",
1839
- "parser": "STRUCTURAL",
1840
- "evidence": {
1841
- "sinkSnippet": "if (fs.existsSync(tdir)) walk(tdir, depth + 1);",
1842
- "sourceSnippet": "if (fs.existsSync(tdir)) walk(tdir, depth + 1);",
1843
- "pathSteps": [],
1844
- "sanitizers": [],
1845
- "guards": []
1846
- },
1847
- "considered": {
1848
- "suppressionsApplied": [],
1849
- "suppressionsSkipped": [],
1850
- "reachabilityFilter": "unaffected",
1851
- "clusterCollapsed": false,
1852
- "typeNarrowed": false,
1853
- "crownJewelTier": "low-value",
1854
- "mitigationVerdict": "unreachable-in-prod"
1855
- },
1856
- "scanner": {
1857
- "rulesetVersion": null,
1858
- "packHash": null,
1859
- "modelId": null
1860
- }
1861
- },
1862
- "adversaryTranscript": null,
1863
- "predictedBountyUsd": {
1864
- "low": 10,
1865
- "likely": 40,
1866
- "high": 120,
1867
- "program": "web2"
1868
- },
1869
- "bountyConfidence": "high",
1870
- "attackPlaybook": null
1871
- },
1872
- {
1873
- "id": "struct:type-stubs.js:216:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
1874
- "kind": "sast",
1875
- "severity": "medium",
1876
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
1877
- "cwe": "CWE-400",
1878
- "owaspLlm": null,
1879
- "stride": "Denial of Service",
1880
- "file": "type-stubs.js",
1881
- "line": 216,
1882
- "snippet": "const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));",
1883
- "fix": null,
1884
- "reachable": false,
1885
- "triage": 22,
1886
- "dataClasses": [],
1887
- "chain": null,
1888
- "confidence": 0.212,
1889
- "toxicity": 28,
1890
- "toxicityFactors": [
1891
- "http-facing"
1892
- ],
1893
- "toxicityLabel": "Medium",
1894
- "sources": null,
1895
- "epssScore": null,
1896
- "epssPercentile": null,
1897
- "epssCve": null,
1898
- "exploitedNow": false,
1899
- "tags": null,
1900
- "blastRadius": {
1901
- "scope": "all-users",
1902
- "dataAtRisk": [
1903
- "config"
1904
- ],
1905
- "userCount": 50,
1906
- "industry": "generic",
1907
- "jurisdictions": [],
1908
- "controlsApplied": [],
1909
- "dollarBest": 23250,
1910
- "dollarLikely": 136250,
1911
- "dollarWorst": 775000,
1912
- "dollarLow": 23250,
1913
- "dollarHigh": 775000,
1914
- "components": {
1915
- "incidentResponse": {
1916
- "low": 8000,
1917
- "likely": 50000,
1918
- "high": 250000
1919
- },
1920
- "legal": {
1921
- "low": 10000,
1922
- "likely": 75000,
1923
- "high": 500000
1924
- },
1925
- "crisisPR": {
1926
- "low": 0,
1927
- "likely": 0,
1928
- "high": 0
1929
- },
1930
- "notification": {
1931
- "low": 5000,
1932
- "likely": 10000,
1933
- "high": 15000
1934
- },
1935
- "creditMonitoring": {
1936
- "low": 0,
1937
- "likely": 0,
1938
- "high": 0
1939
- },
1940
- "regulatoryFines": {
1941
- "low": 0,
1942
- "likely": 0,
1943
- "high": 0
1944
- },
1945
- "directDamage": {
1946
- "low": 250,
1947
- "likely": 1250,
1948
- "high": 10000
1949
- },
1950
- "classAction": {
1951
- "low": 0,
1952
- "likely": 0,
1953
- "high": 0
1954
- },
1955
- "lostBusiness": {
1956
- "low": 0,
1957
- "likely": 0,
1958
- "high": 0
1959
- }
1960
- },
1961
- "dominantDriver": "legal counsel",
1962
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
1963
- "confidence": "low",
1964
- "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."
1965
- },
1966
- "stableId": "9f54fa968991f0c8",
1967
- "confidenceTier": "very-low",
1968
- "exploitability": 0.2,
1969
- "exploitabilityTier": "low",
1970
- "exploitabilityFactors": [
1971
- "sev:medium",
1972
- "unreachable"
1973
- ],
1974
- "clusterSize": null,
1975
- "unreachable": false,
1976
- "validator_verdict": "unvalidated",
1977
- "llm_confidence": null,
1978
- "unvalidated": true,
1979
- "cross_language": false,
1980
- "family": "dos-sync-io",
1981
- "_unsigned": false,
1982
- "_passThroughSigning": false,
1983
- "signatureStatus": "verified",
1984
- "regression_test": null,
1985
- "poc": null,
1986
- "calibrated_confidence": null,
1987
- "calibrated_confidence_ci": null,
1988
- "calibrated_n": 0,
1989
- "calibration_reason": "no-history",
1990
- "verifier_verdict": "cannot-verify",
1991
- "verifier_reason": "no-poc-no-sanitizer-rule",
1992
- "verifier_runner": null,
1993
- "narration": null,
1994
- "mitigationVerdict": "unreachable-in-prod",
1995
- "mitigationsApplied": [],
1996
- "mitigatedByWaf": false,
1997
- "wafRuleId": null,
1998
- "mitigatedByAuth": false,
1999
- "authMechanism": null,
2000
- "mitigatedByNetwork": false,
2001
- "networkExposure": null,
2002
- "featureFlag": null,
2003
- "featureFlagState": null,
2004
- "featureFlagRollout": null,
2005
- "exposedInProd": false,
2006
- "unreachableInProd": true,
2007
- "coldPath": false,
2008
- "hotPath": false,
2009
- "prodRequestCount": null,
2010
- "crownJewelScore": 0.15,
2011
- "crownJewelTier": "low-value",
2012
- "crownJewelFactors": [
2013
- "shell-execution"
2014
- ],
2015
- "cloneClusterId": "f686c808d16515e4",
2016
- "cloneClusterSize": 1,
2017
- "provenance": "human-likely",
2018
- "provenanceScore": 0.12,
2019
- "typeNarrowed": null,
2020
- "strideCategory": "denialOfService",
2021
- "personaScores": {
2022
- "script-kiddie": {
2023
- "score": 0.4,
2024
- "tier": "medium",
2025
- "factors": [
2026
- "sev:medium"
2027
- ]
2028
- },
2029
- "opportunistic-criminal": {
2030
- "score": 0.4,
2031
- "tier": "medium",
2032
- "factors": [
2033
- "sev:medium"
2034
- ]
2035
- },
2036
- "apt-nation-state": {
2037
- "score": 0.4,
2038
- "tier": "medium",
2039
- "factors": [
2040
- "sev:medium"
2041
- ]
2042
- },
2043
- "supply-chain-attacker": {
2044
- "score": 0.4,
2045
- "tier": "medium",
2046
- "factors": [
2047
- "sev:medium"
2048
- ]
2049
- },
2050
- "malicious-insider": {
2051
- "score": 0.4,
2052
- "tier": "medium",
2053
- "factors": [
2054
- "sev:medium"
2055
- ]
2056
- }
2057
- },
2058
- "personaTopTwo": [
2059
- "script-kiddie",
2060
- "opportunistic-criminal"
2061
- ],
2062
- "personaMaxName": "script-kiddie",
2063
- "personaMaxScore": 0.4,
2064
- "reverseExposure": null,
2065
- "specMined": null,
2066
- "whyFired": {
2067
- "detector": "sast/dos-sync-io",
2068
- "ruleId": "CWE-400",
2069
- "parser": "STRUCTURAL",
2070
- "evidence": {
2071
- "sinkSnippet": "const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));",
2072
- "sourceSnippet": "const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));",
2073
- "pathSteps": [],
2074
- "sanitizers": [],
2075
- "guards": []
2076
- },
2077
- "considered": {
2078
- "suppressionsApplied": [],
2079
- "suppressionsSkipped": [],
2080
- "reachabilityFilter": "unaffected",
2081
- "clusterCollapsed": false,
2082
- "typeNarrowed": false,
2083
- "crownJewelTier": "low-value",
2084
- "mitigationVerdict": "unreachable-in-prod"
2085
- },
2086
- "scanner": {
2087
- "rulesetVersion": null,
2088
- "packHash": null,
2089
- "modelId": null
2090
- }
2091
- },
2092
- "adversaryTranscript": null,
2093
- "predictedBountyUsd": {
2094
- "low": 10,
2095
- "likely": 40,
2096
- "high": 120,
2097
- "program": "web2"
2098
- },
2099
- "bountyConfidence": "high",
2100
- "attackPlaybook": null
2101
- },
2102
- {
2103
- "id": "struct:type-stubs.js:245:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
2104
- "kind": "sast",
2105
- "severity": "medium",
2106
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
2107
- "cwe": "CWE-400",
2108
- "owaspLlm": null,
2109
- "stride": "Denial of Service",
2110
- "file": "type-stubs.js",
2111
- "line": 245,
2112
- "snippet": "try { body = fs.readFileSync(f.path, 'utf8'); } catch { continue; }",
2113
- "fix": null,
2114
- "reachable": false,
2115
- "triage": 22,
2116
- "dataClasses": [],
2117
- "chain": null,
2118
- "confidence": 0.212,
2119
- "toxicity": 28,
2120
- "toxicityFactors": [
2121
- "http-facing"
2122
- ],
2123
- "toxicityLabel": "Medium",
2124
- "sources": null,
2125
- "epssScore": null,
2126
- "epssPercentile": null,
2127
- "epssCve": null,
2128
- "exploitedNow": false,
2129
- "tags": null,
2130
- "blastRadius": {
2131
- "scope": "all-users",
2132
- "dataAtRisk": [
2133
- "config"
2134
- ],
2135
- "userCount": 50,
2136
- "industry": "generic",
2137
- "jurisdictions": [],
2138
- "controlsApplied": [],
2139
- "dollarBest": 23250,
2140
- "dollarLikely": 136250,
2141
- "dollarWorst": 775000,
2142
- "dollarLow": 23250,
2143
- "dollarHigh": 775000,
2144
- "components": {
2145
- "incidentResponse": {
2146
- "low": 8000,
2147
- "likely": 50000,
2148
- "high": 250000
2149
- },
2150
- "legal": {
2151
- "low": 10000,
2152
- "likely": 75000,
2153
- "high": 500000
2154
- },
2155
- "crisisPR": {
2156
- "low": 0,
2157
- "likely": 0,
2158
- "high": 0
2159
- },
2160
- "notification": {
2161
- "low": 5000,
2162
- "likely": 10000,
2163
- "high": 15000
2164
- },
2165
- "creditMonitoring": {
2166
- "low": 0,
2167
- "likely": 0,
2168
- "high": 0
2169
- },
2170
- "regulatoryFines": {
2171
- "low": 0,
2172
- "likely": 0,
2173
- "high": 0
2174
- },
2175
- "directDamage": {
2176
- "low": 250,
2177
- "likely": 1250,
2178
- "high": 10000
2179
- },
2180
- "classAction": {
2181
- "low": 0,
2182
- "likely": 0,
2183
- "high": 0
2184
- },
2185
- "lostBusiness": {
2186
- "low": 0,
2187
- "likely": 0,
2188
- "high": 0
2189
- }
2190
- },
2191
- "dominantDriver": "legal counsel",
2192
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
2193
- "confidence": "low",
2194
- "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."
2195
- },
2196
- "stableId": "d7f878f4239f7f2f",
2197
- "confidenceTier": "very-low",
2198
- "exploitability": 0.2,
2199
- "exploitabilityTier": "low",
2200
- "exploitabilityFactors": [
2201
- "sev:medium",
2202
- "unreachable"
2203
- ],
2204
- "clusterSize": null,
2205
- "unreachable": false,
2206
- "validator_verdict": "unvalidated",
2207
- "llm_confidence": null,
2208
- "unvalidated": true,
2209
- "cross_language": false,
2210
- "family": "dos-sync-io",
2211
- "_unsigned": false,
2212
- "_passThroughSigning": false,
2213
- "signatureStatus": "verified",
2214
- "regression_test": null,
2215
- "poc": null,
2216
- "calibrated_confidence": null,
2217
- "calibrated_confidence_ci": null,
2218
- "calibrated_n": 0,
2219
- "calibration_reason": "no-history",
2220
- "verifier_verdict": "cannot-verify",
2221
- "verifier_reason": "no-poc-no-sanitizer-rule",
2222
- "verifier_runner": null,
2223
- "narration": null,
2224
- "mitigationVerdict": "unreachable-in-prod",
2225
- "mitigationsApplied": [],
2226
- "mitigatedByWaf": false,
2227
- "wafRuleId": null,
2228
- "mitigatedByAuth": false,
2229
- "authMechanism": null,
2230
- "mitigatedByNetwork": false,
2231
- "networkExposure": null,
2232
- "featureFlag": null,
2233
- "featureFlagState": null,
2234
- "featureFlagRollout": null,
2235
- "exposedInProd": false,
2236
- "unreachableInProd": true,
2237
- "coldPath": false,
2238
- "hotPath": false,
2239
- "prodRequestCount": null,
2240
- "crownJewelScore": 0.15,
2241
- "crownJewelTier": "low-value",
2242
- "crownJewelFactors": [
2243
- "shell-execution"
2244
- ],
2245
- "cloneClusterId": "01bed4bbdd04761a",
2246
- "cloneClusterSize": 1,
2247
- "provenance": "human-likely",
2248
- "provenanceScore": 0.12,
2249
- "typeNarrowed": null,
2250
- "strideCategory": "denialOfService",
2251
- "personaScores": {
2252
- "script-kiddie": {
2253
- "score": 0.4,
2254
- "tier": "medium",
2255
- "factors": [
2256
- "sev:medium"
2257
- ]
2258
- },
2259
- "opportunistic-criminal": {
2260
- "score": 0.4,
2261
- "tier": "medium",
2262
- "factors": [
2263
- "sev:medium"
2264
- ]
2265
- },
2266
- "apt-nation-state": {
2267
- "score": 0.4,
2268
- "tier": "medium",
2269
- "factors": [
2270
- "sev:medium"
2271
- ]
2272
- },
2273
- "supply-chain-attacker": {
2274
- "score": 0.4,
2275
- "tier": "medium",
2276
- "factors": [
2277
- "sev:medium"
2278
- ]
2279
- },
2280
- "malicious-insider": {
2281
- "score": 0.4,
2282
- "tier": "medium",
2283
- "factors": [
2284
- "sev:medium"
2285
- ]
2286
- }
2287
- },
2288
- "personaTopTwo": [
2289
- "script-kiddie",
2290
- "opportunistic-criminal"
2291
- ],
2292
- "personaMaxName": "script-kiddie",
2293
- "personaMaxScore": 0.4,
2294
- "reverseExposure": null,
2295
- "specMined": null,
2296
- "whyFired": {
2297
- "detector": "sast/dos-sync-io",
2298
- "ruleId": "CWE-400",
2299
- "parser": "STRUCTURAL",
2300
- "evidence": {
2301
- "sinkSnippet": "try { body = fs.readFileSync(f.path, 'utf8'); } catch { continue; }",
2302
- "sourceSnippet": "try { body = fs.readFileSync(f.path, 'utf8'); } catch { continue; }",
2303
- "pathSteps": [],
2304
- "sanitizers": [],
2305
- "guards": []
2306
- },
2307
- "considered": {
2308
- "suppressionsApplied": [],
2309
- "suppressionsSkipped": [],
2310
- "reachabilityFilter": "unaffected",
2311
- "clusterCollapsed": false,
2312
- "typeNarrowed": false,
2313
- "crownJewelTier": "low-value",
2314
- "mitigationVerdict": "unreachable-in-prod"
2315
- },
2316
- "scanner": {
2317
- "rulesetVersion": null,
2318
- "packHash": null,
2319
- "modelId": null
2320
- }
2321
- },
2322
- "adversaryTranscript": null,
2323
- "predictedBountyUsd": {
2324
- "low": 10,
2325
- "likely": 40,
2326
- "high": 120,
2327
- "program": "web2"
2328
- },
2329
- "bountyConfidence": "high",
2330
- "attackPlaybook": null
2331
- },
2332
- {
2333
- "id": "struct:parser-py-cst.js:91:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
2334
- "kind": "sast",
2335
- "severity": "medium",
2336
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
2337
- "cwe": "CWE-400",
2338
- "owaspLlm": null,
2339
- "stride": "Denial of Service",
2340
- "file": "parser-py-cst.js",
2341
- "line": 91,
2342
- "snippet": "if (!fs.existsSync(HELPER_PATH)) return null;",
2343
- "fix": null,
2344
- "reachable": false,
2345
- "triage": 18,
2346
- "dataClasses": [],
2347
- "chain": null,
2348
- "confidence": 0.161,
2349
- "toxicity": 28,
2350
- "toxicityFactors": [
2351
- "http-facing"
2352
- ],
2353
- "toxicityLabel": "Medium",
2354
- "sources": null,
2355
- "epssScore": null,
2356
- "epssPercentile": null,
2357
- "epssCve": null,
2358
- "exploitedNow": false,
2359
- "tags": null,
2360
- "blastRadius": {
2361
- "scope": "all-users",
2362
- "dataAtRisk": [
2363
- "config"
2364
- ],
2365
- "userCount": 50,
2366
- "industry": "generic",
2367
- "jurisdictions": [],
2368
- "controlsApplied": [],
2369
- "dollarBest": 23250,
2370
- "dollarLikely": 136250,
2371
- "dollarWorst": 775000,
2372
- "dollarLow": 23250,
2373
- "dollarHigh": 775000,
2374
- "components": {
2375
- "incidentResponse": {
2376
- "low": 8000,
2377
- "likely": 50000,
2378
- "high": 250000
2379
- },
2380
- "legal": {
2381
- "low": 10000,
2382
- "likely": 75000,
2383
- "high": 500000
2384
- },
2385
- "crisisPR": {
2386
- "low": 0,
2387
- "likely": 0,
2388
- "high": 0
2389
- },
2390
- "notification": {
2391
- "low": 5000,
2392
- "likely": 10000,
2393
- "high": 15000
2394
- },
2395
- "creditMonitoring": {
2396
- "low": 0,
2397
- "likely": 0,
2398
- "high": 0
2399
- },
2400
- "regulatoryFines": {
2401
- "low": 0,
2402
- "likely": 0,
2403
- "high": 0
2404
- },
2405
- "directDamage": {
2406
- "low": 250,
2407
- "likely": 1250,
2408
- "high": 10000
2409
- },
2410
- "classAction": {
2411
- "low": 0,
2412
- "likely": 0,
2413
- "high": 0
2414
- },
2415
- "lostBusiness": {
2416
- "low": 0,
2417
- "likely": 0,
2418
- "high": 0
2419
- }
2420
- },
2421
- "dominantDriver": "legal counsel",
2422
- "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
2423
- "confidence": "low",
2424
- "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."
2425
- },
2426
- "stableId": "ca57234f46aecc6a",
2427
- "confidenceTier": "very-low",
2428
- "exploitability": 0.05,
2429
- "exploitabilityTier": "low",
2430
- "exploitabilityFactors": [
2431
- "sev:medium",
2432
- "unreachable",
2433
- "guards:1"
2434
- ],
2435
- "clusterSize": null,
2436
- "unreachable": false,
2437
- "validator_verdict": "unvalidated",
2438
- "llm_confidence": null,
2439
- "unvalidated": true,
2440
- "cross_language": false,
2441
- "family": "dos-sync-io",
2442
- "_unsigned": false,
2443
- "_passThroughSigning": false,
2444
- "signatureStatus": "verified",
2445
- "regression_test": null,
2446
- "poc": null,
2447
- "calibrated_confidence": null,
2448
- "calibrated_confidence_ci": null,
2449
- "calibrated_n": 0,
2450
- "calibration_reason": "no-history",
2451
- "verifier_verdict": "cannot-verify",
2452
- "verifier_reason": "no-poc-no-sanitizer-rule",
2453
- "verifier_runner": null,
2454
- "narration": null,
2455
- "mitigationVerdict": "unreachable-in-prod",
2456
- "mitigationsApplied": [],
2457
- "mitigatedByWaf": false,
2458
- "wafRuleId": null,
2459
- "mitigatedByAuth": false,
2460
- "authMechanism": null,
2461
- "mitigatedByNetwork": false,
2462
- "networkExposure": null,
2463
- "featureFlag": null,
2464
- "featureFlagState": null,
2465
- "featureFlagRollout": null,
2466
- "exposedInProd": false,
2467
- "unreachableInProd": true,
2468
- "coldPath": false,
2469
- "hotPath": false,
2470
- "prodRequestCount": null,
2471
- "crownJewelScore": 0.15,
2472
- "crownJewelTier": "low-value",
2473
- "crownJewelFactors": [
2474
- "shell-execution"
2475
- ],
2476
- "cloneClusterId": "66b8a8c25816e7f9",
2477
- "cloneClusterSize": 2,
2478
- "provenance": "mixed",
2479
- "provenanceScore": 0.4,
2480
- "typeNarrowed": null,
2481
- "strideCategory": "denialOfService",
2482
- "personaScores": {
2483
- "script-kiddie": {
2484
- "score": 0.2,
2485
- "tier": "low",
2486
- "factors": [
2487
- "sev:medium",
2488
- "auth-gated:1"
2489
- ]
2490
- },
2491
- "opportunistic-criminal": {
2492
- "score": 0.4,
2493
- "tier": "medium",
2494
- "factors": [
2495
- "sev:medium"
2496
- ]
2497
- },
2498
- "apt-nation-state": {
2499
- "score": 0.35,
2500
- "tier": "medium",
2501
- "factors": [
2502
- "sev:medium",
2503
- "minor-auth-cost"
2504
- ]
2505
- },
2506
- "supply-chain-attacker": {
2507
- "score": 0.4,
2508
- "tier": "medium",
2509
- "factors": [
2510
- "sev:medium"
2511
- ]
2512
- },
2513
- "malicious-insider": {
2514
- "score": 0.3,
2515
- "tier": "low",
2516
- "factors": [
2517
- "sev:medium",
2518
- "insider-bypasses-edge"
2519
- ]
2520
- }
2521
- },
2522
- "personaTopTwo": [
2523
- "opportunistic-criminal",
2524
- "supply-chain-attacker"
2525
- ],
2526
- "personaMaxName": "opportunistic-criminal",
2527
- "personaMaxScore": 0.4,
2528
- "reverseExposure": null,
2529
- "specMined": null,
2530
- "whyFired": {
2531
- "detector": "sast/dos-sync-io",
2532
- "ruleId": "CWE-400",
2533
- "parser": "STRUCTURAL",
2534
- "evidence": {
2535
- "sinkSnippet": "if (!fs.existsSync(HELPER_PATH)) return null;",
2536
- "sourceSnippet": "if (!fs.existsSync(HELPER_PATH)) return null;",
2537
- "pathSteps": [],
2538
- "sanitizers": [],
2539
- "guards": [
2540
- "type-check"
2541
- ]
2542
- },
2543
- "considered": {
2544
- "suppressionsApplied": [],
2545
- "suppressionsSkipped": [],
2546
- "reachabilityFilter": "unaffected",
2547
- "clusterCollapsed": false,
2548
- "typeNarrowed": false,
2549
- "crownJewelTier": "low-value",
2550
- "mitigationVerdict": "unreachable-in-prod"
2551
- },
2552
- "scanner": {
2553
- "rulesetVersion": null,
2554
- "packHash": null,
2555
- "modelId": null
2556
- }
2557
- },
2558
- "adversaryTranscript": null,
2559
- "predictedBountyUsd": {
2560
- "low": 10,
2561
- "likely": 40,
2562
- "high": 120,
2563
- "program": "web2"
2564
- },
2565
- "bountyConfidence": "high",
2566
- "attackPlaybook": null
2567
- },
2568
- {
2569
- "id": "toctou-fs:type-stubs.js:48",
2570
- "kind": "sast",
2571
- "severity": "medium",
2572
- "vuln": "TOCTOU: file existence/permission check before open",
2573
- "cwe": "CWE-367",
2574
- "owaspLlm": null,
2575
- "stride": "Tampering",
2576
- "file": "type-stubs.js",
2577
- "line": 48,
2578
- "snippet": "try { inputs.push(p + ':' + fs.statSync(fp).mtimeMs); } catch {}",
2579
- "fix": null,
2580
- "reachable": false,
2581
- "triage": 22,
2582
- "dataClasses": [],
2583
- "chain": null,
2584
- "confidence": 0.7,
2585
- "toxicity": 8,
2586
- "toxicityFactors": [],
2587
- "toxicityLabel": "Low",
2588
- "sources": null,
2589
- "epssScore": null,
2590
- "epssPercentile": null,
2591
- "epssCve": null,
2592
- "exploitedNow": false,
2593
- "tags": null,
2594
- "blastRadius": {
2595
- "scope": "all-users",
2596
- "dataAtRisk": [
2597
- "config"
2598
- ],
2599
- "userCount": 50,
2600
- "industry": "generic",
2601
- "jurisdictions": [],
2602
- "controlsApplied": [],
2603
- "dollarBest": 23250,
2604
- "dollarLikely": 136250,
2605
- "dollarWorst": 775000,
2606
- "dollarLow": 23250,
2607
- "dollarHigh": 775000,
2608
- "components": {
2609
- "incidentResponse": {
2610
- "low": 8000,
2611
- "likely": 50000,
2612
- "high": 250000
2613
- },
2614
- "legal": {
2615
- "low": 10000,
2616
- "likely": 75000,
2617
- "high": 500000
2618
- },
2619
- "crisisPR": {
2620
- "low": 0,
2621
- "likely": 0,
2622
- "high": 0
2623
- },
2624
- "notification": {
2625
- "low": 5000,
2626
- "likely": 10000,
2627
- "high": 15000
2628
- },
2629
- "creditMonitoring": {
2630
- "low": 0,
2631
- "likely": 0,
2632
- "high": 0
2633
- },
2634
- "regulatoryFines": {
2635
- "low": 0,
2636
- "likely": 0,
2637
- "high": 0
2638
- },
2639
- "directDamage": {
2640
- "low": 250,
2641
- "likely": 1250,
2642
- "high": 10000
2643
- },
2644
- "classAction": {
2645
- "low": 0,
2646
- "likely": 0,
2647
- "high": 0
2648
- },
2649
- "lostBusiness": {
2650
- "low": 0,
2651
- "likely": 0,
2652
- "high": 0
2653
- }
2654
- },
2655
- "dominantDriver": "legal counsel",
2656
- "comparable": "Generic finding — likely cost driven by user count + jurisdiction stack",
2657
- "confidence": "low",
2658
- "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."
2659
- },
2660
- "stableId": "d72348aa62acffcb",
2661
- "confidenceTier": "medium",
2662
- "exploitability": 0.2,
2663
- "exploitabilityTier": "low",
2664
- "exploitabilityFactors": [
2665
- "sev:medium",
2666
- "unreachable"
2667
- ],
2668
- "clusterSize": null,
2669
- "unreachable": false,
2670
- "validator_verdict": "unvalidated",
2671
- "llm_confidence": null,
2672
- "unvalidated": true,
2673
- "cross_language": false,
2674
- "family": "toctou-file-existence-permission-check-b",
2675
- "_unsigned": false,
2676
- "_passThroughSigning": false,
2677
- "signatureStatus": "verified",
2678
- "regression_test": null,
2679
- "poc": null,
2680
- "calibrated_confidence": null,
2681
- "calibrated_confidence_ci": null,
2682
- "calibrated_n": 0,
2683
- "calibration_reason": "no-history",
2684
- "verifier_verdict": "cannot-verify",
2685
- "verifier_reason": "no-poc-no-sanitizer-rule",
2686
- "verifier_runner": null,
2687
- "narration": null,
2688
- "mitigationVerdict": "unreachable-in-prod",
2689
- "mitigationsApplied": [],
2690
- "mitigatedByWaf": false,
2691
- "wafRuleId": null,
2692
- "mitigatedByAuth": false,
2693
- "authMechanism": null,
2694
- "mitigatedByNetwork": false,
2695
- "networkExposure": null,
2696
- "featureFlag": null,
2697
- "featureFlagState": null,
2698
- "featureFlagRollout": null,
2699
- "exposedInProd": false,
2700
- "unreachableInProd": true,
2701
- "coldPath": false,
2702
- "hotPath": false,
2703
- "prodRequestCount": null,
2704
- "crownJewelScore": 0.15,
2705
- "crownJewelTier": "low-value",
2706
- "crownJewelFactors": [
2707
- "shell-execution"
2708
- ],
2709
- "cloneClusterId": "1ca765ccc2c8227c",
2710
- "cloneClusterSize": 2,
2711
- "provenance": "human-likely",
2712
- "provenanceScore": 0.12,
2713
- "typeNarrowed": null,
2714
- "strideCategory": "tampering",
2715
- "personaScores": {
2716
- "script-kiddie": {
2717
- "score": 0.4,
2718
- "tier": "medium",
2719
- "factors": [
2720
- "sev:medium"
2721
- ]
2722
- },
2723
- "opportunistic-criminal": {
2724
- "score": 0.4,
2725
- "tier": "medium",
2726
- "factors": [
2727
- "sev:medium"
2728
- ]
2729
- },
2730
- "apt-nation-state": {
2731
- "score": 0.4,
2732
- "tier": "medium",
2733
- "factors": [
2734
- "sev:medium"
2735
- ]
2736
- },
2737
- "supply-chain-attacker": {
2738
- "score": 0.4,
2739
- "tier": "medium",
2740
- "factors": [
2741
- "sev:medium"
2742
- ]
2743
- },
2744
- "malicious-insider": {
2745
- "score": 0.4,
2746
- "tier": "medium",
2747
- "factors": [
2748
- "sev:medium"
2749
- ]
2750
- }
2751
- },
2752
- "personaTopTwo": [
2753
- "script-kiddie",
2754
- "opportunistic-criminal"
2755
- ],
2756
- "personaMaxName": "script-kiddie",
2757
- "personaMaxScore": 0.4,
2758
- "reverseExposure": null,
2759
- "specMined": null,
2760
- "whyFired": {
2761
- "detector": "sast/toctou-file-existence-permission-check-b",
2762
- "ruleId": "CWE-367",
2763
- "parser": "TOCTOU",
2764
- "evidence": {
2765
- "sinkSnippet": "try { inputs.push(p + ':' + fs.statSync(fp).mtimeMs); } catch {}",
2766
- "sourceSnippet": null,
2767
- "pathSteps": [],
2768
- "sanitizers": [],
2769
- "guards": []
2770
- },
2771
- "considered": {
2772
- "suppressionsApplied": [],
2773
- "suppressionsSkipped": [],
2774
- "reachabilityFilter": "unaffected",
2775
- "clusterCollapsed": false,
2776
- "typeNarrowed": false,
2777
- "crownJewelTier": "low-value",
2778
- "mitigationVerdict": "unreachable-in-prod"
2779
- },
2780
- "scanner": {
2781
- "rulesetVersion": null,
2782
- "packHash": null,
2783
- "modelId": null
2784
- }
2785
- },
2786
- "adversaryTranscript": null,
2787
- "predictedBountyUsd": null,
2788
- "bountyConfidence": null,
2789
- "attackPlaybook": null
2790
- },
2791
- {
2792
- "id": "logic:type-stubs.js:57:TOCTOU:_existsSync_followed_by_file_op",
2793
- "kind": "logic",
2794
- "severity": "medium",
2795
- "vuln": "TOCTOU: existsSync followed by file op",
2796
- "cwe": "CWE-367",
2797
- "stride": "Tampering",
2798
- "file": "type-stubs.js",
2799
- "line": 57,
2800
- "snippet": "if (!fs.existsSync(fp)) return null;",
2801
- "fix": {
2802
- "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.",
2803
- "code": ""
2804
- },
2805
- "blastRadius": {
2806
- "scope": "all-users",
2807
- "dataAtRisk": [
2808
- "config"
2809
- ],
2810
- "userCount": 50,
2811
- "industry": "generic",
2812
- "jurisdictions": [],
2813
- "controlsApplied": [],
2814
- "dollarBest": 23250,
2815
- "dollarLikely": 136250,
2816
- "dollarWorst": 775000,
2817
- "dollarLow": 23250,
2818
- "dollarHigh": 775000,
2819
- "components": {
2820
- "incidentResponse": {
2821
- "low": 8000,
2822
- "likely": 50000,
2823
- "high": 250000
2824
- },
2825
- "legal": {
2826
- "low": 10000,
2827
- "likely": 75000,
2828
- "high": 500000
2829
- },
2830
- "crisisPR": {
2831
- "low": 0,
2832
- "likely": 0,
2833
- "high": 0
2834
- },
2835
- "notification": {
2836
- "low": 5000,
2837
- "likely": 10000,
2838
- "high": 15000
2839
- },
2840
- "creditMonitoring": {
2841
- "low": 0,
2842
- "likely": 0,
2843
- "high": 0
2844
- },
2845
- "regulatoryFines": {
2846
- "low": 0,
2847
- "likely": 0,
2848
- "high": 0
2849
- },
2850
- "directDamage": {
2851
- "low": 250,
2852
- "likely": 1250,
2853
- "high": 10000
2854
- },
2855
- "classAction": {
2856
- "low": 0,
2857
- "likely": 0,
2858
- "high": 0
2859
- },
2860
- "lostBusiness": {
2861
- "low": 0,
2862
- "likely": 0,
2863
- "high": 0
2864
- }
2865
- },
2866
- "dominantDriver": "legal counsel",
2867
- "comparable": "Generic finding — likely cost driven by user count + jurisdiction stack",
2868
- "confidence": "low",
2869
- "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."
2870
- }
2871
- }
2872
- ],
2873
- "bundles": [],
2874
- "routes": [],
2875
- "components": [],
2876
- "suppressedCount": 6,
2877
- "blastRadiusSignals": {
2878
- "industry": "generic",
2879
- "industryConfidence": "low",
2880
- "jurisdictions": [],
2881
- "controls": [],
2882
- "estimatedUsers": 50,
2883
- "revenueIndicator": "pre-revenue",
2884
- "hasStripe": false,
2885
- "hasAuth": false,
2886
- "hasUserTable": false,
2887
- "hasPII": false,
2888
- "hasPHI": false,
2889
- "hasS3": false
2890
- },
2891
- "_v3": {
2892
- "counterfactual": {
2893
- "spofControls": [],
2894
- "controlsDetected": 240
2895
- },
2896
- "threatModel": {
2897
- "summary": {
2898
- "assetCount": 0,
2899
- "boundaryCount": 2,
2900
- "strideCounts": {
2901
- "spoofing": 0,
2902
- "tampering": 1,
2903
- "repudiation": 0,
2904
- "informationDisclosure": 0,
2905
- "denialOfService": 9,
2906
- "elevationOfPrivilege": 0
2907
- }
2908
- },
2909
- "assets": [],
2910
- "trustBoundaries": [
2911
- {
2912
- "type": "db-edge",
2913
- "file": "parser-py-cst.js",
2914
- "line": 13,
2915
- "label": null
2916
- },
2917
- {
2918
- "type": "db-edge",
2919
- "file": "parser-py.js",
2920
- "line": 72,
2921
- "label": null
2922
- }
2923
- ],
2924
- "stride": {
2925
- "spoofing": [],
2926
- "tampering": [
2927
- {
2928
- "vuln": "TOCTOU: file existence/permission check before open",
2929
- "file": "type-stubs.js",
2930
- "line": 48,
2931
- "severity": "medium"
2932
- }
2933
- ],
2934
- "repudiation": [],
2935
- "informationDisclosure": [],
2936
- "denialOfService": [
2937
- {
2938
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
2939
- "file": "type-stubs.js",
2940
- "severity": "medium"
2941
- },
2942
- {
2943
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
2944
- "file": "type-stubs.js",
2945
- "severity": "medium"
2946
- },
2947
- {
2948
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
2949
- "file": "type-stubs.js",
2950
- "severity": "medium"
2951
- },
2952
- {
2953
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
2954
- "file": "type-stubs.js",
2955
- "severity": "medium"
2956
- },
2957
- {
2958
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
2959
- "file": "type-stubs.js",
2960
- "severity": "medium"
2961
- },
2962
- {
2963
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
2964
- "file": "type-stubs.js",
2965
- "severity": "medium"
2966
- },
2967
- {
2968
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
2969
- "file": "type-stubs.js",
2970
- "severity": "medium"
2971
- },
2972
- {
2973
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
2974
- "file": "type-stubs.js",
2975
- "severity": "medium"
2976
- },
2977
- {
2978
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
2979
- "file": "parser-py-cst.js",
2980
- "severity": "medium"
2981
- }
2982
- ],
2983
- "elevationOfPrivilege": []
2984
- }
2985
- },
2986
- "trustBoundaryDiagram": {
2987
- "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;",
2988
- "nodes": [
2989
- {
2990
- "id": "INTERNET",
2991
- "kind": "external",
2992
- "label": "Internet"
2993
- },
2994
- {
2995
- "id": "APP",
2996
- "kind": "app",
2997
- "label": "Application"
2998
- },
2999
- {
3000
- "kind": "db",
3001
- "id": "db_parser_py_cst_js_13",
3002
- "label": "db@parser-py-cst.js:13"
3003
- },
3004
- {
3005
- "kind": "db",
3006
- "id": "db_parser_py_js_72",
3007
- "label": "db@parser-py.js:72"
3008
- }
3009
- ],
3010
- "edges": [
3011
- {
3012
- "from": "APP",
3013
- "to": "db_parser_py_cst_js_13",
3014
- "kind": "db"
3015
- },
3016
- {
3017
- "from": "APP",
3018
- "to": "db_parser_py_js_72",
3019
- "kind": "db"
3020
- }
3021
- ],
3022
- "decorations": [
3023
- {
3024
- "nodeId": "db_parser_py_cst_js_13",
3025
- "severity": "medium",
3026
- "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
3027
- "file": "parser-py-cst.js"
3028
- }
3029
- ]
3030
- },
3031
- "calibrationDrift": {
3032
- "alarms": [],
3033
- "note": "no-feedback-data"
3034
- }
3035
- }
3036
- }