@clear-capabilities/agentic-security-scanner 0.78.0 → 0.80.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) 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/333.index.js +283 -0
  9. package/dist/384.index.js +1 -1
  10. package/dist/476.index.js +5 -5
  11. package/dist/637.index.js +1 -1
  12. package/dist/700.index.js +138 -0
  13. package/dist/718.index.js +53 -0
  14. package/dist/838.index.js +1 -1
  15. package/dist/985.index.js +95 -1
  16. package/dist/agentic-security.mjs +83 -83
  17. package/dist/agentic-security.mjs.sha256 +1 -1
  18. package/package.json +6 -4
  19. package/src/.agentic-security/findings.json +29799 -7803
  20. package/src/.agentic-security/last-scan.json +29799 -7803
  21. package/src/.agentic-security/last-scan.json.sig +1 -1
  22. package/src/.agentic-security/scan-history.json +5119 -2611
  23. package/src/.agentic-security/streak.json +6 -6
  24. package/src/dataflow/.agentic-security/findings.json +2879 -308
  25. package/src/dataflow/.agentic-security/last-scan.json +2879 -308
  26. package/src/dataflow/.agentic-security/last-scan.json.sig +1 -1
  27. package/src/dataflow/.agentic-security/scan-history.json +68 -520
  28. package/src/dataflow/.agentic-security/streak.json +6 -7
  29. package/src/dataflow/cross-service-taint.js +201 -0
  30. package/src/dataflow/engine.js +52 -8
  31. package/src/dataflow/formal-verify.js +204 -0
  32. package/src/dataflow/ifds-precise.js +222 -0
  33. package/src/dataflow/k2-summary-cache.js +153 -0
  34. package/src/dataflow/lib-taint-summaries.js +198 -0
  35. package/src/dataflow/privacy-taint.js +205 -0
  36. package/src/dataflow/smt-feasibility.js +189 -0
  37. package/src/engine.js +890 -132
  38. package/src/integrations/index.js +2 -1
  39. package/src/ir/.agentic-security/findings.json +240 -6
  40. package/src/ir/.agentic-security/last-scan.json +240 -6
  41. package/src/ir/.agentic-security/last-scan.json.sig +1 -1
  42. package/src/ir/.agentic-security/scan-history.json +16 -594
  43. package/src/ir/.agentic-security/streak.json +8 -9
  44. package/src/ir/callgraph.js +27 -7
  45. package/src/ir/cpp-preprocessor.js +142 -0
  46. package/src/ir/csharp-ir.js +604 -0
  47. package/src/ir/universal-ir.js +403 -0
  48. package/src/llm-validator/index.js +7 -5
  49. package/src/mcp/.agentic-security/findings.json +8632 -0
  50. package/src/mcp/.agentic-security/last-scan.json +8632 -0
  51. package/src/mcp/.agentic-security/last-scan.json.sig +1 -0
  52. package/src/mcp/.agentic-security/scan-history.json +143 -0
  53. package/src/mcp/.agentic-security/streak.json +20 -0
  54. package/src/mcp/audit.js +5 -0
  55. package/src/mcp/tools.js +90 -1
  56. package/src/posture/.agentic-security/findings.json +16809 -4367
  57. package/src/posture/.agentic-security/last-scan.json +16809 -4367
  58. package/src/posture/.agentic-security/last-scan.json.sig +1 -1
  59. package/src/posture/.agentic-security/scan-history.json +6689 -177
  60. package/src/posture/.agentic-security/streak.json +8 -7
  61. package/src/posture/api-contract.js +193 -0
  62. package/src/posture/attack-taxonomy.js +227 -0
  63. package/src/posture/calibration-drift.js +2 -1
  64. package/src/posture/calibration.js +3 -2
  65. package/src/posture/compliance-policy.js +218 -0
  66. package/src/posture/composite-risk.js +122 -0
  67. package/src/posture/csharp-analysis.js +330 -0
  68. package/src/posture/exploit-bundle.js +210 -0
  69. package/src/posture/federated-learning.js +172 -0
  70. package/src/posture/fix-history.js +8 -2
  71. package/src/posture/license-attributions.js +94 -0
  72. package/src/posture/license-graph.js +238 -0
  73. package/src/posture/pqc-migration-plan.js +158 -0
  74. package/src/posture/profile.js +4 -5
  75. package/src/posture/reachability-filter.js +33 -2
  76. package/src/posture/realtime-cve-monitor.js +214 -0
  77. package/src/posture/rule-overrides.js +2 -3
  78. package/src/posture/rule-pack-signing.js +2 -3
  79. package/src/posture/rule-synthesis.js +5 -6
  80. package/src/posture/runtime-correlation.js +174 -0
  81. package/src/posture/sbom-diff.js +171 -0
  82. package/src/posture/sca-policy.js +235 -0
  83. package/src/posture/sca-upgrade.js +259 -0
  84. package/src/posture/security-trend.js +4 -7
  85. package/src/posture/state-dir.js +124 -0
  86. package/src/posture/streak.js +3 -0
  87. package/src/posture/suppressions.js +5 -8
  88. package/src/posture/threat-model-auto.js +268 -0
  89. package/src/posture/triage-learning.js +170 -0
  90. package/src/posture/triage.js +29 -6
  91. package/src/posture/validator-metrics.js +3 -6
  92. package/src/sast/.agentic-security/findings.json +996 -32
  93. package/src/sast/.agentic-security/last-scan.json +996 -32
  94. package/src/sast/.agentic-security/last-scan.json.sig +1 -1
  95. package/src/sast/.agentic-security/scan-history.json +565 -32
  96. package/src/sast/.agentic-security/streak.json +10 -8
  97. package/src/sast/_secret-entropy.js +145 -0
  98. package/src/sast/cloud-iam.js +312 -0
  99. package/src/sast/cpp.js +138 -4
  100. package/src/sast/crypto-protocol.js +388 -0
  101. package/src/sast/csharp-tokenizer.js +392 -0
  102. package/src/sast/csharp.js +924 -138
  103. package/src/sast/dapp-frontend.js +200 -0
  104. package/src/sast/db-taint.js +24 -0
  105. package/src/sast/k8s-admission.js +271 -0
  106. package/src/sast/llm-app.js +272 -0
  107. package/src/sast/ml-supply-chain.js +259 -0
  108. package/src/sast/mobile.js +224 -0
  109. package/src/sast/post-quantum-crypto.js +348 -0
  110. package/src/sast/rust.js +26 -0
  111. package/src/sast/web3-advanced.js +375 -0
  112. package/src/sca/.agentic-security/findings.json +6044 -171
  113. package/src/sca/.agentic-security/last-scan.json +6044 -171
  114. package/src/sca/.agentic-security/last-scan.json.sig +1 -1
  115. package/src/sca/.agentic-security/scan-history.json +83 -6
  116. package/src/sca/.agentic-security/streak.json +9 -9
  117. package/src/sca/CLAUDE.md +161 -0
  118. package/src/sca/binary-metadata.js +146 -0
  119. package/src/sca/py-package-functions.js +118 -0
  120. package/src/sca/sigstore-verify.js +215 -0
  121. package/src/sca/vendor-detect.js +53 -0
  122. package/src/report/.agentic-security/findings.json +0 -80
  123. package/src/report/.agentic-security/last-scan.json +0 -80
  124. package/src/report/.agentic-security/last-scan.json.sig +0 -1
  125. package/src/report/.agentic-security/scan-history.json +0 -35
  126. package/src/report/.agentic-security/streak.json +0 -22
@@ -1,9 +1,9 @@
1
1
  {
2
- "scanId": "ea560b58-b8fa-4f5e-9e91-bdcd30277723",
3
- "startedAt": "2026-05-27T09:43:27.404Z",
4
- "durationMs": 2801,
2
+ "scanId": "de568f01-badb-4288-835d-135419be3ef8",
3
+ "startedAt": "2026-05-29T17:04:05.061Z",
4
+ "durationMs": 3114,
5
5
  "scanned": {
6
- "files": 79,
6
+ "files": 90,
7
7
  "lines": 0
8
8
  },
9
9
  "findings": [
@@ -1389,7 +1389,8 @@
1389
1389
  "exploitabilityTier": "low",
1390
1390
  "exploitabilityFactors": [
1391
1391
  "sev:low",
1392
- "unreachable"
1392
+ "unreachable",
1393
+ "waf"
1393
1394
  ],
1394
1395
  "clusterSize": null,
1395
1396
  "unreachable": true,
@@ -1623,7 +1624,8 @@
1623
1624
  "exploitabilityTier": "low",
1624
1625
  "exploitabilityFactors": [
1625
1626
  "sev:low",
1626
- "unreachable"
1627
+ "unreachable",
1628
+ "waf"
1627
1629
  ],
1628
1630
  "clusterSize": null,
1629
1631
  "unreachable": true,
@@ -1847,7 +1849,8 @@
1847
1849
  "exploitabilityTier": "low",
1848
1850
  "exploitabilityFactors": [
1849
1851
  "sev:low",
1850
- "unreachable"
1852
+ "unreachable",
1853
+ "waf"
1851
1854
  ],
1852
1855
  "clusterSize": null,
1853
1856
  "unreachable": true,
@@ -2071,7 +2074,8 @@
2071
2074
  "exploitabilityTier": "low",
2072
2075
  "exploitabilityFactors": [
2073
2076
  "sev:low",
2074
- "unreachable"
2077
+ "unreachable",
2078
+ "waf"
2075
2079
  ],
2076
2080
  "clusterSize": null,
2077
2081
  "unreachable": true,
@@ -2197,6 +2201,710 @@
2197
2201
  "bountyConfidence": null,
2198
2202
  "attackPlaybook": null
2199
2203
  },
2204
+ {
2205
+ "id": "authz:crypto-protocol.js:332:AuthZ__jwt_verify_called_without_algorithms_allow_list",
2206
+ "kind": "authz",
2207
+ "severity": "low",
2208
+ "vuln": "AuthZ: jwt.verify called without algorithms allow-list",
2209
+ "cwe": "CWE-347",
2210
+ "owaspLlm": null,
2211
+ "stride": "Elevation of Privilege",
2212
+ "file": "crypto-protocol.js",
2213
+ "line": 332,
2214
+ "snippet": "// jwt.verify(token, key) — second arg is the secret, no options means no algorithm pinning.",
2215
+ "fix": {
2216
+ "description": "Pass `{ algorithms: [\"RS256\"] }` (or HS256) explicitly to `jwt.verify`. Without it, an attacker can forge a token using an unexpected algorithm (alg:none, or HS256-signed with the public key for an RS256 issuer).",
2217
+ "code": ""
2218
+ },
2219
+ "reachable": false,
2220
+ "triage": 39,
2221
+ "dataClasses": [],
2222
+ "chain": null,
2223
+ "confidence": 0.85,
2224
+ "toxicity": 3,
2225
+ "toxicityFactors": [],
2226
+ "toxicityLabel": "Low",
2227
+ "sources": null,
2228
+ "epssScore": null,
2229
+ "epssPercentile": null,
2230
+ "epssCve": null,
2231
+ "exploitedNow": false,
2232
+ "tags": null,
2233
+ "blastRadius": {
2234
+ "scope": "all-users",
2235
+ "dataAtRisk": [
2236
+ "auth-tokens"
2237
+ ],
2238
+ "userCount": 50,
2239
+ "industry": "generic",
2240
+ "jurisdictions": [],
2241
+ "controlsApplied": [],
2242
+ "dollarBest": 24500,
2243
+ "dollarLikely": 139500,
2244
+ "dollarWorst": 780000,
2245
+ "dollarLow": 24500,
2246
+ "dollarHigh": 780000,
2247
+ "components": {
2248
+ "incidentResponse": {
2249
+ "low": 8000,
2250
+ "likely": 50000,
2251
+ "high": 250000
2252
+ },
2253
+ "legal": {
2254
+ "low": 10000,
2255
+ "likely": 75000,
2256
+ "high": 500000
2257
+ },
2258
+ "crisisPR": {
2259
+ "low": 0,
2260
+ "likely": 0,
2261
+ "high": 0
2262
+ },
2263
+ "notification": {
2264
+ "low": 5000,
2265
+ "likely": 10000,
2266
+ "high": 15000
2267
+ },
2268
+ "creditMonitoring": {
2269
+ "low": 0,
2270
+ "likely": 0,
2271
+ "high": 0
2272
+ },
2273
+ "regulatoryFines": {
2274
+ "low": 0,
2275
+ "likely": 0,
2276
+ "high": 0
2277
+ },
2278
+ "directDamage": {
2279
+ "low": 1500,
2280
+ "likely": 4500,
2281
+ "high": 15000
2282
+ },
2283
+ "classAction": {
2284
+ "low": 0,
2285
+ "likely": 0,
2286
+ "high": 0
2287
+ },
2288
+ "lostBusiness": {
2289
+ "low": 0,
2290
+ "likely": 0,
2291
+ "high": 0
2292
+ }
2293
+ },
2294
+ "dominantDriver": "legal counsel",
2295
+ "comparable": "JWT forging incidents — auth bypass typically chains to full account takeover",
2296
+ "confidence": "low",
2297
+ "narrative": "AuthZ: jwt.verify called without algorithms allow-list on `crypto-protocol.js:332` could expose session tokens for ~50 users. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $25k · likely $140k · worst $780k. Dominant driver: legal counsel. Comparable: JWT forging incidents — auth bypass typically chains to full account takeover."
2298
+ },
2299
+ "stableId": "c48ab031d258e9c6",
2300
+ "confidenceTier": "high",
2301
+ "exploitability": 0,
2302
+ "exploitabilityTier": "low",
2303
+ "exploitabilityFactors": [
2304
+ "sev:low",
2305
+ "unreachable",
2306
+ "waf"
2307
+ ],
2308
+ "clusterSize": null,
2309
+ "unreachable": true,
2310
+ "validator_verdict": "unvalidated",
2311
+ "llm_confidence": null,
2312
+ "unvalidated": true,
2313
+ "cross_language": false,
2314
+ "family": "idor",
2315
+ "parser": "REGEX",
2316
+ "_unsigned": false,
2317
+ "_passThroughSigning": false,
2318
+ "signatureStatus": "verified",
2319
+ "regression_test": null,
2320
+ "poc": null,
2321
+ "calibrated_confidence": null,
2322
+ "calibrated_confidence_ci": null,
2323
+ "calibrated_n": 14,
2324
+ "calibration_reason": "insufficient-samples",
2325
+ "verifier_verdict": "cannot-verify",
2326
+ "verifier_reason": "no-poc-no-sanitizer-rule",
2327
+ "verifier_runner": null,
2328
+ "narration": null,
2329
+ "mitigationVerdict": "unreachable-in-prod",
2330
+ "mitigationsApplied": [],
2331
+ "mitigatedByWaf": false,
2332
+ "wafRuleId": null,
2333
+ "mitigatedByAuth": false,
2334
+ "authMechanism": null,
2335
+ "mitigatedByNetwork": false,
2336
+ "networkExposure": null,
2337
+ "featureFlag": null,
2338
+ "featureFlagState": null,
2339
+ "featureFlagRollout": null,
2340
+ "exposedInProd": false,
2341
+ "unreachableInProd": true,
2342
+ "coldPath": false,
2343
+ "hotPath": false,
2344
+ "prodRequestCount": null,
2345
+ "crownJewelScore": 0.4,
2346
+ "crownJewelTier": "high-value",
2347
+ "crownJewelFactors": [
2348
+ "crypto-keys",
2349
+ "shell-execution"
2350
+ ],
2351
+ "cloneClusterId": null,
2352
+ "cloneClusterSize": 1,
2353
+ "provenance": "human-likely",
2354
+ "provenanceScore": 0.28,
2355
+ "typeNarrowed": null,
2356
+ "strideCategory": "spoofing",
2357
+ "personaScores": {
2358
+ "script-kiddie": {
2359
+ "score": 0.2,
2360
+ "tier": "low",
2361
+ "factors": [
2362
+ "sev:low"
2363
+ ]
2364
+ },
2365
+ "opportunistic-criminal": {
2366
+ "score": 0.65,
2367
+ "tier": "high",
2368
+ "factors": [
2369
+ "sev:low",
2370
+ "bias:idor+0.25",
2371
+ "crown-jewel-adj"
2372
+ ]
2373
+ },
2374
+ "apt-nation-state": {
2375
+ "score": 0.2,
2376
+ "tier": "low",
2377
+ "factors": [
2378
+ "sev:low"
2379
+ ]
2380
+ },
2381
+ "supply-chain-attacker": {
2382
+ "score": 0.2,
2383
+ "tier": "low",
2384
+ "factors": [
2385
+ "sev:low"
2386
+ ]
2387
+ },
2388
+ "malicious-insider": {
2389
+ "score": 0.7,
2390
+ "tier": "high",
2391
+ "factors": [
2392
+ "sev:low",
2393
+ "bias:idor+0.30",
2394
+ "authz-bypass-favored"
2395
+ ]
2396
+ }
2397
+ },
2398
+ "personaTopTwo": [
2399
+ "malicious-insider",
2400
+ "opportunistic-criminal"
2401
+ ],
2402
+ "personaMaxName": "malicious-insider",
2403
+ "personaMaxScore": 0.7,
2404
+ "reverseExposure": null,
2405
+ "specMined": null,
2406
+ "whyFired": {
2407
+ "detector": "sast/idor",
2408
+ "ruleId": "CWE-347",
2409
+ "parser": "REGEX",
2410
+ "evidence": {
2411
+ "sinkSnippet": "// jwt.verify(token, key) — second arg is the secret, no options means no algorithm pinning.",
2412
+ "sourceSnippet": null,
2413
+ "pathSteps": [],
2414
+ "sanitizers": [],
2415
+ "guards": []
2416
+ },
2417
+ "considered": {
2418
+ "suppressionsApplied": [],
2419
+ "suppressionsSkipped": [],
2420
+ "reachabilityFilter": "demoted",
2421
+ "clusterCollapsed": false,
2422
+ "typeNarrowed": false,
2423
+ "crownJewelTier": "high-value",
2424
+ "mitigationVerdict": "unreachable-in-prod"
2425
+ },
2426
+ "scanner": {
2427
+ "rulesetVersion": null,
2428
+ "packHash": null,
2429
+ "modelId": null
2430
+ }
2431
+ },
2432
+ "adversaryTranscript": null,
2433
+ "predictedBountyUsd": {
2434
+ "low": 0,
2435
+ "likely": 30,
2436
+ "high": 100,
2437
+ "program": "web2"
2438
+ },
2439
+ "bountyConfidence": "medium",
2440
+ "attackPlaybook": null
2441
+ },
2442
+ {
2443
+ "id": "authz:crypto-protocol.js:333:AuthZ__jwt_verify_called_without_algorithms_allow_list",
2444
+ "kind": "authz",
2445
+ "severity": "low",
2446
+ "vuln": "AuthZ: jwt.verify called without algorithms allow-list",
2447
+ "cwe": "CWE-347",
2448
+ "owaspLlm": null,
2449
+ "stride": "Elevation of Privilege",
2450
+ "file": "crypto-protocol.js",
2451
+ "line": 333,
2452
+ "snippet": "// node jsonwebtoken: jwt.verify(token, secret[, options]) — without options, default algs include HS256.",
2453
+ "fix": {
2454
+ "description": "Pass `{ algorithms: [\"RS256\"] }` (or HS256) explicitly to `jwt.verify`. Without it, an attacker can forge a token using an unexpected algorithm (alg:none, or HS256-signed with the public key for an RS256 issuer).",
2455
+ "code": ""
2456
+ },
2457
+ "reachable": false,
2458
+ "triage": 39,
2459
+ "dataClasses": [],
2460
+ "chain": null,
2461
+ "confidence": 0.85,
2462
+ "toxicity": 3,
2463
+ "toxicityFactors": [],
2464
+ "toxicityLabel": "Low",
2465
+ "sources": null,
2466
+ "epssScore": null,
2467
+ "epssPercentile": null,
2468
+ "epssCve": null,
2469
+ "exploitedNow": false,
2470
+ "tags": null,
2471
+ "blastRadius": {
2472
+ "scope": "all-users",
2473
+ "dataAtRisk": [
2474
+ "auth-tokens"
2475
+ ],
2476
+ "userCount": 50,
2477
+ "industry": "generic",
2478
+ "jurisdictions": [],
2479
+ "controlsApplied": [],
2480
+ "dollarBest": 24500,
2481
+ "dollarLikely": 139500,
2482
+ "dollarWorst": 780000,
2483
+ "dollarLow": 24500,
2484
+ "dollarHigh": 780000,
2485
+ "components": {
2486
+ "incidentResponse": {
2487
+ "low": 8000,
2488
+ "likely": 50000,
2489
+ "high": 250000
2490
+ },
2491
+ "legal": {
2492
+ "low": 10000,
2493
+ "likely": 75000,
2494
+ "high": 500000
2495
+ },
2496
+ "crisisPR": {
2497
+ "low": 0,
2498
+ "likely": 0,
2499
+ "high": 0
2500
+ },
2501
+ "notification": {
2502
+ "low": 5000,
2503
+ "likely": 10000,
2504
+ "high": 15000
2505
+ },
2506
+ "creditMonitoring": {
2507
+ "low": 0,
2508
+ "likely": 0,
2509
+ "high": 0
2510
+ },
2511
+ "regulatoryFines": {
2512
+ "low": 0,
2513
+ "likely": 0,
2514
+ "high": 0
2515
+ },
2516
+ "directDamage": {
2517
+ "low": 1500,
2518
+ "likely": 4500,
2519
+ "high": 15000
2520
+ },
2521
+ "classAction": {
2522
+ "low": 0,
2523
+ "likely": 0,
2524
+ "high": 0
2525
+ },
2526
+ "lostBusiness": {
2527
+ "low": 0,
2528
+ "likely": 0,
2529
+ "high": 0
2530
+ }
2531
+ },
2532
+ "dominantDriver": "legal counsel",
2533
+ "comparable": "JWT forging incidents — auth bypass typically chains to full account takeover",
2534
+ "confidence": "low",
2535
+ "narrative": "AuthZ: jwt.verify called without algorithms allow-list on `crypto-protocol.js:333` could expose session tokens for ~50 users. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $25k · likely $140k · worst $780k. Dominant driver: legal counsel. Comparable: JWT forging incidents — auth bypass typically chains to full account takeover."
2536
+ },
2537
+ "stableId": "a5194d146d06f0d3",
2538
+ "confidenceTier": "high",
2539
+ "exploitability": 0,
2540
+ "exploitabilityTier": "low",
2541
+ "exploitabilityFactors": [
2542
+ "sev:low",
2543
+ "unreachable",
2544
+ "waf"
2545
+ ],
2546
+ "clusterSize": null,
2547
+ "unreachable": true,
2548
+ "validator_verdict": "unvalidated",
2549
+ "llm_confidence": null,
2550
+ "unvalidated": true,
2551
+ "cross_language": false,
2552
+ "family": "idor",
2553
+ "parser": "REGEX",
2554
+ "_unsigned": false,
2555
+ "_passThroughSigning": false,
2556
+ "signatureStatus": "verified",
2557
+ "regression_test": null,
2558
+ "poc": null,
2559
+ "calibrated_confidence": null,
2560
+ "calibrated_confidence_ci": null,
2561
+ "calibrated_n": 14,
2562
+ "calibration_reason": "insufficient-samples",
2563
+ "verifier_verdict": "cannot-verify",
2564
+ "verifier_reason": "no-poc-no-sanitizer-rule",
2565
+ "verifier_runner": null,
2566
+ "narration": null,
2567
+ "mitigationVerdict": "unreachable-in-prod",
2568
+ "mitigationsApplied": [],
2569
+ "mitigatedByWaf": false,
2570
+ "wafRuleId": null,
2571
+ "mitigatedByAuth": false,
2572
+ "authMechanism": null,
2573
+ "mitigatedByNetwork": false,
2574
+ "networkExposure": null,
2575
+ "featureFlag": null,
2576
+ "featureFlagState": null,
2577
+ "featureFlagRollout": null,
2578
+ "exposedInProd": false,
2579
+ "unreachableInProd": true,
2580
+ "coldPath": false,
2581
+ "hotPath": false,
2582
+ "prodRequestCount": null,
2583
+ "crownJewelScore": 0.4,
2584
+ "crownJewelTier": "high-value",
2585
+ "crownJewelFactors": [
2586
+ "crypto-keys",
2587
+ "shell-execution"
2588
+ ],
2589
+ "cloneClusterId": null,
2590
+ "cloneClusterSize": 1,
2591
+ "provenance": "human-likely",
2592
+ "provenanceScore": 0.28,
2593
+ "typeNarrowed": null,
2594
+ "strideCategory": "spoofing",
2595
+ "personaScores": {
2596
+ "script-kiddie": {
2597
+ "score": 0.2,
2598
+ "tier": "low",
2599
+ "factors": [
2600
+ "sev:low"
2601
+ ]
2602
+ },
2603
+ "opportunistic-criminal": {
2604
+ "score": 0.65,
2605
+ "tier": "high",
2606
+ "factors": [
2607
+ "sev:low",
2608
+ "bias:idor+0.25",
2609
+ "crown-jewel-adj"
2610
+ ]
2611
+ },
2612
+ "apt-nation-state": {
2613
+ "score": 0.2,
2614
+ "tier": "low",
2615
+ "factors": [
2616
+ "sev:low"
2617
+ ]
2618
+ },
2619
+ "supply-chain-attacker": {
2620
+ "score": 0.2,
2621
+ "tier": "low",
2622
+ "factors": [
2623
+ "sev:low"
2624
+ ]
2625
+ },
2626
+ "malicious-insider": {
2627
+ "score": 0.7,
2628
+ "tier": "high",
2629
+ "factors": [
2630
+ "sev:low",
2631
+ "bias:idor+0.30",
2632
+ "authz-bypass-favored"
2633
+ ]
2634
+ }
2635
+ },
2636
+ "personaTopTwo": [
2637
+ "malicious-insider",
2638
+ "opportunistic-criminal"
2639
+ ],
2640
+ "personaMaxName": "malicious-insider",
2641
+ "personaMaxScore": 0.7,
2642
+ "reverseExposure": null,
2643
+ "specMined": null,
2644
+ "whyFired": {
2645
+ "detector": "sast/idor",
2646
+ "ruleId": "CWE-347",
2647
+ "parser": "REGEX",
2648
+ "evidence": {
2649
+ "sinkSnippet": "// node jsonwebtoken: jwt.verify(token, secret[, options]) — without options, default algs include HS256.",
2650
+ "sourceSnippet": null,
2651
+ "pathSteps": [],
2652
+ "sanitizers": [],
2653
+ "guards": []
2654
+ },
2655
+ "considered": {
2656
+ "suppressionsApplied": [],
2657
+ "suppressionsSkipped": [],
2658
+ "reachabilityFilter": "demoted",
2659
+ "clusterCollapsed": false,
2660
+ "typeNarrowed": false,
2661
+ "crownJewelTier": "high-value",
2662
+ "mitigationVerdict": "unreachable-in-prod"
2663
+ },
2664
+ "scanner": {
2665
+ "rulesetVersion": null,
2666
+ "packHash": null,
2667
+ "modelId": null
2668
+ }
2669
+ },
2670
+ "adversaryTranscript": null,
2671
+ "predictedBountyUsd": {
2672
+ "low": 0,
2673
+ "likely": 30,
2674
+ "high": 100,
2675
+ "program": "web2"
2676
+ },
2677
+ "bountyConfidence": "medium",
2678
+ "attackPlaybook": null
2679
+ },
2680
+ {
2681
+ "id": "prompt-tpl:k8s-admission.js:139:Prompt_Template__user_input_interpolated_into_prompt_string_",
2682
+ "kind": "sast",
2683
+ "severity": "low",
2684
+ "vuln": "Prompt Template: user input interpolated into prompt string without isolation",
2685
+ "cwe": "CWE-1336",
2686
+ "owaspLlm": null,
2687
+ "stride": "Spoofing",
2688
+ "file": "k8s-admission.js",
2689
+ "line": 139,
2690
+ "snippet": "`${kind} binds a role to system:anonymous / system:unauthenticated`,",
2691
+ "fix": {
2692
+ "description": "Prefer the messages array form: `messages=[{\"role\":\"system\",\"content\":SYS},{\"role\":\"user\",\"content\":user_input}]`. Or wrap interpolations with isolation markers and instruct the model to treat content inside them as data only.",
2693
+ "code": ""
2694
+ },
2695
+ "reachable": false,
2696
+ "triage": 39,
2697
+ "dataClasses": [],
2698
+ "chain": null,
2699
+ "confidence": 0.204,
2700
+ "toxicity": 3,
2701
+ "toxicityFactors": [],
2702
+ "toxicityLabel": "Low",
2703
+ "sources": null,
2704
+ "epssScore": null,
2705
+ "epssPercentile": null,
2706
+ "epssCve": null,
2707
+ "exploitedNow": false,
2708
+ "tags": null,
2709
+ "blastRadius": {
2710
+ "scope": "all-users",
2711
+ "dataAtRisk": [
2712
+ "config"
2713
+ ],
2714
+ "userCount": 50,
2715
+ "industry": "generic",
2716
+ "jurisdictions": [],
2717
+ "controlsApplied": [],
2718
+ "dollarBest": 23250,
2719
+ "dollarLikely": 136250,
2720
+ "dollarWorst": 775000,
2721
+ "dollarLow": 23250,
2722
+ "dollarHigh": 775000,
2723
+ "components": {
2724
+ "incidentResponse": {
2725
+ "low": 8000,
2726
+ "likely": 50000,
2727
+ "high": 250000
2728
+ },
2729
+ "legal": {
2730
+ "low": 10000,
2731
+ "likely": 75000,
2732
+ "high": 500000
2733
+ },
2734
+ "crisisPR": {
2735
+ "low": 0,
2736
+ "likely": 0,
2737
+ "high": 0
2738
+ },
2739
+ "notification": {
2740
+ "low": 5000,
2741
+ "likely": 10000,
2742
+ "high": 15000
2743
+ },
2744
+ "creditMonitoring": {
2745
+ "low": 0,
2746
+ "likely": 0,
2747
+ "high": 0
2748
+ },
2749
+ "regulatoryFines": {
2750
+ "low": 0,
2751
+ "likely": 0,
2752
+ "high": 0
2753
+ },
2754
+ "directDamage": {
2755
+ "low": 250,
2756
+ "likely": 1250,
2757
+ "high": 10000
2758
+ },
2759
+ "classAction": {
2760
+ "low": 0,
2761
+ "likely": 0,
2762
+ "high": 0
2763
+ },
2764
+ "lostBusiness": {
2765
+ "low": 0,
2766
+ "likely": 0,
2767
+ "high": 0
2768
+ }
2769
+ },
2770
+ "dominantDriver": "legal counsel",
2771
+ "comparable": "Server-side template injection (Pug/Jinja2/Twig) → routine path to RCE",
2772
+ "confidence": "low",
2773
+ "narrative": "Prompt Template: user input interpolated into prompt string without isolation on `k8s-admission.js:139` 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: Server-side template injection (Pug/Jinja2/Twig) → routine path to RCE."
2774
+ },
2775
+ "stableId": "df30723aa047f227",
2776
+ "confidenceTier": "very-low",
2777
+ "exploitability": 0,
2778
+ "exploitabilityTier": "low",
2779
+ "exploitabilityFactors": [
2780
+ "sev:low",
2781
+ "unreachable",
2782
+ "waf"
2783
+ ],
2784
+ "clusterSize": 2,
2785
+ "unreachable": true,
2786
+ "validator_verdict": "unvalidated",
2787
+ "llm_confidence": null,
2788
+ "unvalidated": true,
2789
+ "cross_language": false,
2790
+ "family": "prompt-template-user-input-interpolated-",
2791
+ "parser": "REGEX",
2792
+ "_unsigned": false,
2793
+ "_passThroughSigning": false,
2794
+ "signatureStatus": "verified",
2795
+ "regression_test": null,
2796
+ "poc": null,
2797
+ "calibrated_confidence": null,
2798
+ "calibrated_confidence_ci": null,
2799
+ "calibrated_n": 0,
2800
+ "calibration_reason": "no-history",
2801
+ "verifier_verdict": "cannot-verify",
2802
+ "verifier_reason": "no-poc-no-sanitizer-rule",
2803
+ "verifier_runner": null,
2804
+ "narration": null,
2805
+ "mitigationVerdict": "unreachable-in-prod",
2806
+ "mitigationsApplied": [],
2807
+ "mitigatedByWaf": false,
2808
+ "wafRuleId": null,
2809
+ "mitigatedByAuth": false,
2810
+ "authMechanism": null,
2811
+ "mitigatedByNetwork": false,
2812
+ "networkExposure": null,
2813
+ "featureFlag": null,
2814
+ "featureFlagState": null,
2815
+ "featureFlagRollout": null,
2816
+ "exposedInProd": false,
2817
+ "unreachableInProd": true,
2818
+ "coldPath": false,
2819
+ "hotPath": false,
2820
+ "prodRequestCount": null,
2821
+ "crownJewelScore": 0.15,
2822
+ "crownJewelTier": "low-value",
2823
+ "crownJewelFactors": [
2824
+ "shell-execution"
2825
+ ],
2826
+ "cloneClusterId": null,
2827
+ "cloneClusterSize": 1,
2828
+ "provenance": "human-likely",
2829
+ "provenanceScore": 0.12,
2830
+ "typeNarrowed": null,
2831
+ "strideCategory": null,
2832
+ "personaScores": {
2833
+ "script-kiddie": {
2834
+ "score": 0.2,
2835
+ "tier": "low",
2836
+ "factors": [
2837
+ "sev:low"
2838
+ ]
2839
+ },
2840
+ "opportunistic-criminal": {
2841
+ "score": 0.2,
2842
+ "tier": "low",
2843
+ "factors": [
2844
+ "sev:low"
2845
+ ]
2846
+ },
2847
+ "apt-nation-state": {
2848
+ "score": 0.2,
2849
+ "tier": "low",
2850
+ "factors": [
2851
+ "sev:low"
2852
+ ]
2853
+ },
2854
+ "supply-chain-attacker": {
2855
+ "score": 0.2,
2856
+ "tier": "low",
2857
+ "factors": [
2858
+ "sev:low"
2859
+ ]
2860
+ },
2861
+ "malicious-insider": {
2862
+ "score": 0.2,
2863
+ "tier": "low",
2864
+ "factors": [
2865
+ "sev:low"
2866
+ ]
2867
+ }
2868
+ },
2869
+ "personaTopTwo": [
2870
+ "script-kiddie",
2871
+ "opportunistic-criminal"
2872
+ ],
2873
+ "personaMaxName": "script-kiddie",
2874
+ "personaMaxScore": 0.2,
2875
+ "reverseExposure": null,
2876
+ "specMined": null,
2877
+ "whyFired": {
2878
+ "detector": "sast/prompt-template-user-input-interpolated-",
2879
+ "ruleId": "CWE-1336",
2880
+ "parser": "REGEX",
2881
+ "evidence": {
2882
+ "sinkSnippet": "`${kind} binds a role to system:anonymous / system:unauthenticated`,",
2883
+ "sourceSnippet": null,
2884
+ "pathSteps": [],
2885
+ "sanitizers": [],
2886
+ "guards": []
2887
+ },
2888
+ "considered": {
2889
+ "suppressionsApplied": [],
2890
+ "suppressionsSkipped": [],
2891
+ "reachabilityFilter": "demoted",
2892
+ "clusterCollapsed": true,
2893
+ "typeNarrowed": false,
2894
+ "crownJewelTier": "low-value",
2895
+ "mitigationVerdict": "unreachable-in-prod"
2896
+ },
2897
+ "scanner": {
2898
+ "rulesetVersion": null,
2899
+ "packHash": null,
2900
+ "modelId": null
2901
+ }
2902
+ },
2903
+ "adversaryTranscript": null,
2904
+ "predictedBountyUsd": null,
2905
+ "bountyConfidence": null,
2906
+ "attackPlaybook": null
2907
+ },
2200
2908
  {
2201
2909
  "id": "llm-owasp:llm-owasp.js:180:llm01-dynamic-system:concat",
2202
2910
  "kind": "sast",
@@ -2298,7 +3006,8 @@
2298
3006
  "exploitabilityTier": "low",
2299
3007
  "exploitabilityFactors": [
2300
3008
  "sev:low",
2301
- "unreachable"
3009
+ "unreachable",
3010
+ "waf"
2302
3011
  ],
2303
3012
  "clusterSize": null,
2304
3013
  "unreachable": true,
@@ -2525,7 +3234,8 @@
2525
3234
  "exploitabilityTier": "low",
2526
3235
  "exploitabilityFactors": [
2527
3236
  "sev:low",
2528
- "unreachable"
3237
+ "unreachable",
3238
+ "waf"
2529
3239
  ],
2530
3240
  "clusterSize": null,
2531
3241
  "unreachable": true,
@@ -2752,7 +3462,8 @@
2752
3462
  "exploitabilityTier": "low",
2753
3463
  "exploitabilityFactors": [
2754
3464
  "sev:low",
2755
- "unreachable"
3465
+ "unreachable",
3466
+ "waf"
2756
3467
  ],
2757
3468
  "clusterSize": null,
2758
3469
  "unreachable": true,
@@ -2979,7 +3690,8 @@
2979
3690
  "exploitabilityTier": "low",
2980
3691
  "exploitabilityFactors": [
2981
3692
  "sev:low",
2982
- "unreachable"
3693
+ "unreachable",
3694
+ "waf"
2983
3695
  ],
2984
3696
  "clusterSize": null,
2985
3697
  "unreachable": true,
@@ -3203,7 +3915,8 @@
3203
3915
  "exploitabilityTier": "low",
3204
3916
  "exploitabilityFactors": [
3205
3917
  "sev:low",
3206
- "unreachable"
3918
+ "unreachable",
3919
+ "waf"
3207
3920
  ],
3208
3921
  "clusterSize": null,
3209
3922
  "unreachable": true,
@@ -3448,7 +4161,8 @@
3448
4161
  "exploitabilityTier": "low",
3449
4162
  "exploitabilityFactors": [
3450
4163
  "sev:low",
3451
- "unreachable"
4164
+ "unreachable",
4165
+ "waf"
3452
4166
  ],
3453
4167
  "clusterSize": null,
3454
4168
  "unreachable": true,
@@ -3597,6 +4311,231 @@
3597
4311
  "bountyConfidence": "high",
3598
4312
  "attackPlaybook": null
3599
4313
  },
4314
+ {
4315
+ "id": "llm-redteam:noPromptInjectionDefense:llm-app.js:104",
4316
+ "kind": "sast",
4317
+ "severity": "low",
4318
+ "vuln": "System prompt missing explicit anti-injection guidance — model may follow user-supplied \"ignore previous\" attacks",
4319
+ "cwe": "CWE-77",
4320
+ "owaspLlm": null,
4321
+ "stride": null,
4322
+ "file": "llm-app.js",
4323
+ "line": 104,
4324
+ "snippet": "'Pass system prompt and user message as separate role-tagged messages: `chat.create({messages: [{role:\"system\", content:S}, {role:\"user\", content:U}]})`. Concatenation merges the two trust levels into",
4325
+ "fix": null,
4326
+ "reachable": false,
4327
+ "triage": 22,
4328
+ "dataClasses": [],
4329
+ "chain": null,
4330
+ "confidence": 0.157,
4331
+ "toxicity": 3,
4332
+ "toxicityFactors": [],
4333
+ "toxicityLabel": "Low",
4334
+ "sources": null,
4335
+ "epssScore": null,
4336
+ "epssPercentile": null,
4337
+ "epssCve": null,
4338
+ "exploitedNow": false,
4339
+ "tags": null,
4340
+ "blastRadius": {
4341
+ "scope": "all-users",
4342
+ "dataAtRisk": [
4343
+ "config"
4344
+ ],
4345
+ "userCount": 50,
4346
+ "industry": "generic",
4347
+ "jurisdictions": [],
4348
+ "controlsApplied": [],
4349
+ "dollarBest": 23250,
4350
+ "dollarLikely": 136250,
4351
+ "dollarWorst": 775000,
4352
+ "dollarLow": 23250,
4353
+ "dollarHigh": 775000,
4354
+ "components": {
4355
+ "incidentResponse": {
4356
+ "low": 8000,
4357
+ "likely": 50000,
4358
+ "high": 250000
4359
+ },
4360
+ "legal": {
4361
+ "low": 10000,
4362
+ "likely": 75000,
4363
+ "high": 500000
4364
+ },
4365
+ "crisisPR": {
4366
+ "low": 0,
4367
+ "likely": 0,
4368
+ "high": 0
4369
+ },
4370
+ "notification": {
4371
+ "low": 5000,
4372
+ "likely": 10000,
4373
+ "high": 15000
4374
+ },
4375
+ "creditMonitoring": {
4376
+ "low": 0,
4377
+ "likely": 0,
4378
+ "high": 0
4379
+ },
4380
+ "regulatoryFines": {
4381
+ "low": 0,
4382
+ "likely": 0,
4383
+ "high": 0
4384
+ },
4385
+ "directDamage": {
4386
+ "low": 250,
4387
+ "likely": 1250,
4388
+ "high": 10000
4389
+ },
4390
+ "classAction": {
4391
+ "low": 0,
4392
+ "likely": 0,
4393
+ "high": 0
4394
+ },
4395
+ "lostBusiness": {
4396
+ "low": 0,
4397
+ "likely": 0,
4398
+ "high": 0
4399
+ }
4400
+ },
4401
+ "dominantDriver": "legal counsel",
4402
+ "comparable": "Generic finding — likely cost driven by user count + jurisdiction stack",
4403
+ "confidence": "low",
4404
+ "narrative": "System prompt missing explicit anti-injection guidance — model may follow user-supplied \"ignore previous\" attacks on `llm-app.js:104` 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."
4405
+ },
4406
+ "stableId": "e7f84e7a70ed227a",
4407
+ "confidenceTier": "very-low",
4408
+ "exploitability": 0,
4409
+ "exploitabilityTier": "low",
4410
+ "exploitabilityFactors": [
4411
+ "sev:low",
4412
+ "unreachable",
4413
+ "waf"
4414
+ ],
4415
+ "clusterSize": null,
4416
+ "unreachable": true,
4417
+ "validator_verdict": "unvalidated",
4418
+ "llm_confidence": null,
4419
+ "unvalidated": true,
4420
+ "cross_language": false,
4421
+ "family": "system-prompt-missing-explicit-anti-inje",
4422
+ "parser": "REGEX",
4423
+ "_unsigned": false,
4424
+ "_passThroughSigning": false,
4425
+ "signatureStatus": "verified",
4426
+ "regression_test": null,
4427
+ "poc": null,
4428
+ "calibrated_confidence": null,
4429
+ "calibrated_confidence_ci": null,
4430
+ "calibrated_n": 0,
4431
+ "calibration_reason": "no-history",
4432
+ "verifier_verdict": "cannot-verify",
4433
+ "verifier_reason": "no-poc-no-sanitizer-rule",
4434
+ "verifier_runner": null,
4435
+ "narration": null,
4436
+ "mitigationVerdict": "unreachable-in-prod",
4437
+ "mitigationsApplied": [],
4438
+ "mitigatedByWaf": false,
4439
+ "wafRuleId": null,
4440
+ "mitigatedByAuth": false,
4441
+ "authMechanism": null,
4442
+ "mitigatedByNetwork": false,
4443
+ "networkExposure": null,
4444
+ "featureFlag": null,
4445
+ "featureFlagState": null,
4446
+ "featureFlagRollout": null,
4447
+ "exposedInProd": false,
4448
+ "unreachableInProd": true,
4449
+ "coldPath": false,
4450
+ "hotPath": false,
4451
+ "prodRequestCount": null,
4452
+ "crownJewelScore": 0.15,
4453
+ "crownJewelTier": "low-value",
4454
+ "crownJewelFactors": [
4455
+ "shell-execution"
4456
+ ],
4457
+ "cloneClusterId": "248b4a9e5115c68b",
4458
+ "cloneClusterSize": 1,
4459
+ "provenance": "human-likely",
4460
+ "provenanceScore": 0.22,
4461
+ "typeNarrowed": null,
4462
+ "strideCategory": "tampering",
4463
+ "personaScores": {
4464
+ "script-kiddie": {
4465
+ "score": 0.2,
4466
+ "tier": "low",
4467
+ "factors": [
4468
+ "sev:low"
4469
+ ]
4470
+ },
4471
+ "opportunistic-criminal": {
4472
+ "score": 0.2,
4473
+ "tier": "low",
4474
+ "factors": [
4475
+ "sev:low"
4476
+ ]
4477
+ },
4478
+ "apt-nation-state": {
4479
+ "score": 0.2,
4480
+ "tier": "low",
4481
+ "factors": [
4482
+ "sev:low"
4483
+ ]
4484
+ },
4485
+ "supply-chain-attacker": {
4486
+ "score": 0.2,
4487
+ "tier": "low",
4488
+ "factors": [
4489
+ "sev:low"
4490
+ ]
4491
+ },
4492
+ "malicious-insider": {
4493
+ "score": 0.2,
4494
+ "tier": "low",
4495
+ "factors": [
4496
+ "sev:low"
4497
+ ]
4498
+ }
4499
+ },
4500
+ "personaTopTwo": [
4501
+ "script-kiddie",
4502
+ "opportunistic-criminal"
4503
+ ],
4504
+ "personaMaxName": "script-kiddie",
4505
+ "personaMaxScore": 0.2,
4506
+ "reverseExposure": null,
4507
+ "specMined": null,
4508
+ "whyFired": {
4509
+ "detector": "sast/system-prompt-missing-explicit-anti-inje",
4510
+ "ruleId": "CWE-77",
4511
+ "parser": "REGEX",
4512
+ "evidence": {
4513
+ "sinkSnippet": "'Pass system prompt and user message as separate role-tagged messages: `chat.create({messages: [{role:\"system\", content:S}, {role:\"user\", content:U}]})`. Concatenation merges the two trust levels into",
4514
+ "sourceSnippet": null,
4515
+ "pathSteps": [],
4516
+ "sanitizers": [],
4517
+ "guards": []
4518
+ },
4519
+ "considered": {
4520
+ "suppressionsApplied": [],
4521
+ "suppressionsSkipped": [],
4522
+ "reachabilityFilter": "demoted",
4523
+ "clusterCollapsed": false,
4524
+ "typeNarrowed": false,
4525
+ "crownJewelTier": "low-value",
4526
+ "mitigationVerdict": "unreachable-in-prod"
4527
+ },
4528
+ "scanner": {
4529
+ "rulesetVersion": null,
4530
+ "packHash": null,
4531
+ "modelId": null
4532
+ }
4533
+ },
4534
+ "adversaryTranscript": null,
4535
+ "predictedBountyUsd": null,
4536
+ "bountyConfidence": null,
4537
+ "attackPlaybook": null
4538
+ },
3600
4539
  {
3601
4540
  "id": "llm-owasp:llm-owasp.js:183:llm10-no-token-budget",
3602
4541
  "kind": "sast",
@@ -3698,7 +4637,8 @@
3698
4637
  "exploitabilityTier": "low",
3699
4638
  "exploitabilityFactors": [
3700
4639
  "sev:low",
3701
- "unreachable"
4640
+ "unreachable",
4641
+ "waf"
3702
4642
  ],
3703
4643
  "clusterSize": null,
3704
4644
  "unreachable": true,
@@ -3927,7 +4867,8 @@
3927
4867
  "exploitabilityTier": "low",
3928
4868
  "exploitabilityFactors": [
3929
4869
  "sev:low",
3930
- "unreachable"
4870
+ "unreachable",
4871
+ "waf"
3931
4872
  ],
3932
4873
  "clusterSize": null,
3933
4874
  "unreachable": true,
@@ -4174,7 +5115,8 @@
4174
5115
  "exploitabilityTier": "low",
4175
5116
  "exploitabilityFactors": [
4176
5117
  "sev:low",
4177
- "unreachable"
5118
+ "unreachable",
5119
+ "waf"
4178
5120
  ],
4179
5121
  "clusterSize": null,
4180
5122
  "unreachable": true,
@@ -4421,7 +5363,8 @@
4421
5363
  "exploitabilityTier": "low",
4422
5364
  "exploitabilityFactors": [
4423
5365
  "sev:low",
4424
- "unreachable"
5366
+ "unreachable",
5367
+ "waf"
4425
5368
  ],
4426
5369
  "clusterSize": null,
4427
5370
  "unreachable": true,
@@ -4668,7 +5611,8 @@
4668
5611
  "exploitabilityTier": "low",
4669
5612
  "exploitabilityFactors": [
4670
5613
  "sev:low",
4671
- "unreachable"
5614
+ "unreachable",
5615
+ "waf"
4672
5616
  ],
4673
5617
  "clusterSize": null,
4674
5618
  "unreachable": true,
@@ -4834,7 +5778,7 @@
4834
5778
  }
4835
5779
  ],
4836
5780
  "components": [],
4837
- "suppressedCount": 25,
5781
+ "suppressedCount": 32,
4838
5782
  "blastRadiusSignals": {
4839
5783
  "industry": "generic",
4840
5784
  "industryConfidence": "low",
@@ -4852,15 +5796,15 @@
4852
5796
  "_v3": {
4853
5797
  "counterfactual": {
4854
5798
  "spofControls": [],
4855
- "controlsDetected": 1928
5799
+ "controlsDetected": 2344
4856
5800
  },
4857
5801
  "threatModel": {
4858
5802
  "summary": {
4859
- "assetCount": 13,
5803
+ "assetCount": 14,
4860
5804
  "boundaryCount": 2,
4861
5805
  "strideCounts": {
4862
- "spoofing": 1,
4863
- "tampering": 8,
5806
+ "spoofing": 3,
5807
+ "tampering": 9,
4864
5808
  "repudiation": 0,
4865
5809
  "informationDisclosure": 0,
4866
5810
  "denialOfService": 3,
@@ -4903,6 +5847,13 @@
4903
5847
  "category": "session",
4904
5848
  "exposure": "internal"
4905
5849
  },
5850
+ {
5851
+ "name": "session",
5852
+ "file": "cpp.js",
5853
+ "line": 311,
5854
+ "category": "session",
5855
+ "exposure": "internal"
5856
+ },
4906
5857
  {
4907
5858
  "name": "session",
4908
5859
  "file": "dart-flutter.js",
@@ -4981,6 +5932,18 @@
4981
5932
  "file": "authz.js",
4982
5933
  "line": 33,
4983
5934
  "severity": "low"
5935
+ },
5936
+ {
5937
+ "vuln": "AuthZ: jwt.verify called without algorithms allow-list",
5938
+ "file": "crypto-protocol.js",
5939
+ "line": 332,
5940
+ "severity": "low"
5941
+ },
5942
+ {
5943
+ "vuln": "AuthZ: jwt.verify called without algorithms allow-list",
5944
+ "file": "crypto-protocol.js",
5945
+ "line": 333,
5946
+ "severity": "low"
4984
5947
  }
4985
5948
  ],
4986
5949
  "tampering": [
@@ -5008,6 +5971,12 @@
5008
5971
  "line": 39,
5009
5972
  "severity": "low"
5010
5973
  },
5974
+ {
5975
+ "vuln": "System prompt missing explicit anti-injection guidance — model may follow user-supplied \"ignore previous\" attacks",
5976
+ "file": "llm-app.js",
5977
+ "line": 104,
5978
+ "severity": "low"
5979
+ },
5011
5980
  {
5012
5981
  "vuln": "SSRF: explicit reference to cloud instance-metadata endpoint",
5013
5982
  "file": "python-sinks.js",
@@ -5059,7 +6028,7 @@
5059
6028
  }
5060
6029
  },
5061
6030
  "trustBoundaryDiagram": {
5062
- "mermaid": "flowchart LR\n INTERNET((Internet))\n APP[\"Application\"]\n db_dart_flutter_js_62[(\"db@dart-flutter.js:62\")]\n db_llm_stored_prompt_js_16[(\"db@llm-stored-prompt.js:16\")]\n asset_secret_NEXTAUTH_SECRET[/\"secret: NEXTAUTH_SECRET\"/]\n asset_secret_OAUTH_CLIENT_SECRET[/\"secret: OAUTH_CLIENT_SECRET\"/]\n asset_session_session[/\"session: session\"/]\n asset_identity_identity[/\"identity: identity\"/]\n asset_secret_STRIPE_WEBHOOK_SECRET[/\"secret: STRIPE_WEBHOOK_SECRET\"/]\n APP -->|db| db_dart_flutter_js_62\n APP -->|db| db_llm_stored_prompt_js_16\n APP -->|asset| asset_secret_NEXTAUTH_SECRET\n APP -->|asset| asset_secret_OAUTH_CLIENT_SECRET\n APP -->|asset| asset_session_session\n APP -->|asset| asset_session_session\n APP -->|asset| asset_session_session\n APP -->|asset| asset_session_session\n APP -->|asset| asset_session_session\n APP -->|asset| asset_session_session\n APP -->|asset| asset_identity_identity\n APP -->|asset| asset_identity_identity\n APP -->|asset| asset_identity_identity\n APP -->|asset| asset_secret_STRIPE_WEBHOOK_SECRET\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;",
6031
+ "mermaid": "flowchart LR\n INTERNET((Internet))\n APP[\"Application\"]\n db_dart_flutter_js_62[(\"db@dart-flutter.js:62\")]\n db_llm_stored_prompt_js_16[(\"db@llm-stored-prompt.js:16\")]\n asset_secret_NEXTAUTH_SECRET[/\"secret: NEXTAUTH_SECRET\"/]\n asset_secret_OAUTH_CLIENT_SECRET[/\"secret: OAUTH_CLIENT_SECRET\"/]\n asset_session_session[/\"session: session\"/]\n asset_identity_identity[/\"identity: identity\"/]\n APP -->|db| db_dart_flutter_js_62\n APP -->|db| db_llm_stored_prompt_js_16\n APP -->|asset| asset_secret_NEXTAUTH_SECRET\n APP -->|asset| asset_secret_OAUTH_CLIENT_SECRET\n APP -->|asset| asset_session_session\n APP -->|asset| asset_session_session\n APP -->|asset| asset_session_session\n APP -->|asset| asset_session_session\n APP -->|asset| asset_session_session\n APP -->|asset| asset_session_session\n APP -->|asset| asset_session_session\n APP -->|asset| asset_identity_identity\n APP -->|asset| asset_identity_identity\n APP -->|asset| asset_identity_identity\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;",
5063
6032
  "nodes": [
5064
6033
  {
5065
6034
  "id": "INTERNET",
@@ -5100,11 +6069,6 @@
5100
6069
  "id": "asset_identity_identity",
5101
6070
  "kind": "asset",
5102
6071
  "label": "identity: identity"
5103
- },
5104
- {
5105
- "id": "asset_secret_STRIPE_WEBHOOK_SECRET",
5106
- "kind": "asset",
5107
- "label": "secret: STRIPE_WEBHOOK_SECRET"
5108
6072
  }
5109
6073
  ],
5110
6074
  "edges": [
@@ -5160,7 +6124,7 @@
5160
6124
  },
5161
6125
  {
5162
6126
  "from": "APP",
5163
- "to": "asset_identity_identity",
6127
+ "to": "asset_session_session",
5164
6128
  "kind": "asset"
5165
6129
  },
5166
6130
  {
@@ -5175,7 +6139,7 @@
5175
6139
  },
5176
6140
  {
5177
6141
  "from": "APP",
5178
- "to": "asset_secret_STRIPE_WEBHOOK_SECRET",
6142
+ "to": "asset_identity_identity",
5179
6143
  "kind": "asset"
5180
6144
  }
5181
6145
  ],