@clear-capabilities/agentic-security-scanner 0.76.1 → 0.78.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 (108) hide show
  1. package/bin/.agentic-security/findings.json +320 -9
  2. package/bin/.agentic-security/last-scan.json +320 -9
  3. package/bin/.agentic-security/last-scan.json.sig +1 -1
  4. package/bin/.agentic-security/scan-history.json +17 -377
  5. package/bin/.agentic-security/streak.json +11 -16
  6. package/bin/agentic-security.js +33 -2
  7. package/dist/178.index.js +1 -1
  8. package/dist/384.index.js +1 -1
  9. package/dist/637.index.js +1 -1
  10. package/dist/718.index.js +106 -0
  11. package/dist/824.index.js +126 -0
  12. package/dist/838.index.js +1 -1
  13. package/dist/agentic-security.mjs +32 -32
  14. package/dist/agentic-security.mjs.sha256 +1 -1
  15. package/package.json +7 -7
  16. package/src/.agentic-security/findings.json +5731 -3933
  17. package/src/.agentic-security/last-scan.json +5731 -3933
  18. package/src/.agentic-security/last-scan.json.sig +1 -1
  19. package/src/.agentic-security/scan-history.json +2533 -887
  20. package/src/.agentic-security/streak.json +11 -16
  21. package/src/dataflow/.agentic-security/findings.json +52 -24
  22. package/src/dataflow/.agentic-security/last-scan.json +52 -24
  23. package/src/dataflow/.agentic-security/last-scan.json.sig +1 -1
  24. package/src/dataflow/.agentic-security/scan-history.json +101 -134
  25. package/src/dataflow/.agentic-security/streak.json +8 -10
  26. package/src/dataflow/async-sequencing.js +16 -7
  27. package/src/dataflow/builtin-summaries.js +131 -0
  28. package/src/dataflow/catalog.js +107 -0
  29. package/src/dataflow/cross-repo.js +75 -1
  30. package/src/dataflow/engine.js +129 -0
  31. package/src/dataflow/implicit-flow.js +24 -6
  32. package/src/dataflow/stub-aware-filter.js +69 -11
  33. package/src/dataflow/summaries.js +28 -3
  34. package/src/engine-parallel.js +70 -0
  35. package/src/engine.js +165 -15
  36. package/src/ir/.agentic-security/findings.json +757 -16
  37. package/src/ir/.agentic-security/last-scan.json +757 -16
  38. package/src/ir/.agentic-security/last-scan.json.sig +1 -1
  39. package/src/ir/.agentic-security/scan-history.json +545 -138
  40. package/src/ir/.agentic-security/streak.json +11 -13
  41. package/src/ir/index.js +22 -1
  42. package/src/ir/parser-go.js +403 -0
  43. package/src/ir/parser-js.js +2 -0
  44. package/src/ir/parser-php.js +330 -0
  45. package/src/ir/parser-py.helper.py +137 -11
  46. package/src/ir/parser-rb.js +309 -0
  47. package/src/posture/.agentic-security/findings.json +407 -84
  48. package/src/posture/.agentic-security/last-scan.json +407 -84
  49. package/src/posture/.agentic-security/last-scan.json.sig +1 -1
  50. package/src/posture/.agentic-security/scan-history.json +16 -4923
  51. package/src/posture/.agentic-security/streak.json +10 -14
  52. package/src/posture/calibration.js +14 -0
  53. package/src/posture/triage.js +13 -0
  54. package/src/report/.agentic-security/findings.json +6 -5
  55. package/src/report/.agentic-security/last-scan.json +6 -5
  56. package/src/report/.agentic-security/last-scan.json.sig +1 -1
  57. package/src/report/.agentic-security/scan-history.json +3 -300
  58. package/src/report/.agentic-security/streak.json +7 -8
  59. package/src/report/index.js +23 -2
  60. package/src/sast/.agentic-security/findings.json +195 -56
  61. package/src/sast/.agentic-security/last-scan.json +195 -56
  62. package/src/sast/.agentic-security/last-scan.json.sig +1 -1
  63. package/src/sast/.agentic-security/scan-history.json +14 -394
  64. package/src/sast/.agentic-security/streak.json +10 -13
  65. package/src/sast/cache-poisoning.js +77 -0
  66. package/src/sast/comparison-safety.js +73 -0
  67. package/src/sast/db-taint.js +54 -0
  68. package/src/sast/graphql.js +127 -0
  69. package/src/sast/llm-stored-prompt.js +57 -0
  70. package/src/sast/mutation-xss.js +43 -0
  71. package/src/sast/nosql-injection.js +5 -0
  72. package/src/sast/null-byte-injection.js +76 -0
  73. package/src/sast/redos-nfa.js +338 -0
  74. package/src/sast/sensitive-data-logging.js +73 -0
  75. package/src/sast/weak-password-hash.js +77 -0
  76. package/src/sast/weak-randomness.js +100 -0
  77. package/src/sca/.agentic-security/findings.json +502 -11
  78. package/src/sca/.agentic-security/last-scan.json +502 -11
  79. package/src/sca/.agentic-security/last-scan.json.sig +1 -1
  80. package/src/sca/.agentic-security/scan-history.json +19 -1
  81. package/src/sca/.agentic-security/streak.json +6 -6
  82. package/src/sca/llm-function-extract.js +107 -0
  83. package/src/sca/vendor-detect.js +91 -0
  84. package/dist/218.index.js +0 -793
  85. package/dist/601.index.js +0 -1038
  86. package/dist/634.index.js +0 -1892
  87. package/src/integrations/.agentic-security/findings.json +0 -1504
  88. package/src/integrations/.agentic-security/last-scan.json +0 -1504
  89. package/src/integrations/.agentic-security/scan-history.json +0 -40
  90. package/src/integrations/.agentic-security/streak.json +0 -21
  91. package/src/llm-validator/.agentic-security/findings.json +0 -1891
  92. package/src/llm-validator/.agentic-security/last-scan.json +0 -1891
  93. package/src/llm-validator/.agentic-security/last-scan.json.sig +0 -1
  94. package/src/llm-validator/.agentic-security/scan-history.json +0 -168
  95. package/src/llm-validator/.agentic-security/streak.json +0 -20
  96. package/src/lsp/.agentic-security/findings.json +0 -28
  97. package/src/lsp/.agentic-security/last-scan.json +0 -28
  98. package/src/lsp/.agentic-security/scan-history.json +0 -79
  99. package/src/lsp/.agentic-security/streak.json +0 -22
  100. package/src/mcp/.agentic-security/findings.json +0 -8403
  101. package/src/mcp/.agentic-security/last-scan.json +0 -8403
  102. package/src/mcp/.agentic-security/last-scan.json.sig +0 -1
  103. package/src/mcp/.agentic-security/scan-history.json +0 -1182
  104. package/src/mcp/.agentic-security/streak.json +0 -22
  105. package/src/sast/bench-shape/.agentic-security/findings.json +0 -28
  106. package/src/sast/bench-shape/.agentic-security/last-scan.json +0 -28
  107. package/src/sast/bench-shape/.agentic-security/scan-history.json +0 -24
  108. package/src/sast/bench-shape/.agentic-security/streak.json +0 -22
@@ -1,9 +1,9 @@
1
1
  {
2
- "scanId": "a0503a11-81c7-4743-a7a7-d72879ba1db3",
3
- "startedAt": "2026-05-21T18:12:54.614Z",
4
- "durationMs": 117,
2
+ "scanId": "c0d36b32-79df-4614-9dd6-475907a34882",
3
+ "startedAt": "2026-05-27T13:30:13.810Z",
4
+ "durationMs": 185,
5
5
  "scanned": {
6
- "files": 4,
6
+ "files": 6,
7
7
  "lines": 0
8
8
  },
9
9
  "findings": [
@@ -465,6 +465,468 @@
465
465
  "bountyConfidence": "high",
466
466
  "attackPlaybook": null
467
467
  },
468
+ {
469
+ "id": "struct:llm-function-extract.js:24:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
470
+ "kind": "sast",
471
+ "severity": "medium",
472
+ "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
473
+ "cwe": "CWE-400",
474
+ "owaspLlm": null,
475
+ "stride": "Denial of Service",
476
+ "file": "llm-function-extract.js",
477
+ "line": 24,
478
+ "snippet": "return JSON.parse(fs.readFileSync(fp, 'utf8'));",
479
+ "fix": null,
480
+ "reachable": false,
481
+ "triage": 22,
482
+ "dataClasses": [],
483
+ "chain": null,
484
+ "confidence": 0.212,
485
+ "toxicity": 28,
486
+ "toxicityFactors": [
487
+ "http-facing"
488
+ ],
489
+ "toxicityLabel": "Medium",
490
+ "sources": null,
491
+ "epssScore": null,
492
+ "epssPercentile": null,
493
+ "epssCve": null,
494
+ "exploitedNow": false,
495
+ "tags": null,
496
+ "blastRadius": {
497
+ "scope": "all-users",
498
+ "dataAtRisk": [
499
+ "config"
500
+ ],
501
+ "userCount": 50,
502
+ "industry": "generic",
503
+ "jurisdictions": [],
504
+ "controlsApplied": [],
505
+ "dollarBest": 23250,
506
+ "dollarLikely": 136250,
507
+ "dollarWorst": 775000,
508
+ "dollarLow": 23250,
509
+ "dollarHigh": 775000,
510
+ "components": {
511
+ "incidentResponse": {
512
+ "low": 8000,
513
+ "likely": 50000,
514
+ "high": 250000
515
+ },
516
+ "legal": {
517
+ "low": 10000,
518
+ "likely": 75000,
519
+ "high": 500000
520
+ },
521
+ "crisisPR": {
522
+ "low": 0,
523
+ "likely": 0,
524
+ "high": 0
525
+ },
526
+ "notification": {
527
+ "low": 5000,
528
+ "likely": 10000,
529
+ "high": 15000
530
+ },
531
+ "creditMonitoring": {
532
+ "low": 0,
533
+ "likely": 0,
534
+ "high": 0
535
+ },
536
+ "regulatoryFines": {
537
+ "low": 0,
538
+ "likely": 0,
539
+ "high": 0
540
+ },
541
+ "directDamage": {
542
+ "low": 250,
543
+ "likely": 1250,
544
+ "high": 10000
545
+ },
546
+ "classAction": {
547
+ "low": 0,
548
+ "likely": 0,
549
+ "high": 0
550
+ },
551
+ "lostBusiness": {
552
+ "low": 0,
553
+ "likely": 0,
554
+ "high": 0
555
+ }
556
+ },
557
+ "dominantDriver": "legal counsel",
558
+ "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
559
+ "confidence": "low",
560
+ "narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `llm-function-extract.js:24` could expose configuration / internal data. Context: general SaaS / no specific regulatory exposure. Estimated cost: best $23k · likely $136k · worst $775k. Dominant driver: legal counsel. Comparable: Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage."
561
+ },
562
+ "stableId": "0c8c5b613b013dda",
563
+ "confidenceTier": "very-low",
564
+ "exploitability": 0.2,
565
+ "exploitabilityTier": "low",
566
+ "exploitabilityFactors": [
567
+ "sev:medium",
568
+ "unreachable"
569
+ ],
570
+ "clusterSize": null,
571
+ "unreachable": false,
572
+ "validator_verdict": "unvalidated",
573
+ "llm_confidence": null,
574
+ "unvalidated": true,
575
+ "cross_language": false,
576
+ "family": "dos-sync-io",
577
+ "parser": "STRUCTURAL",
578
+ "_unsigned": false,
579
+ "_passThroughSigning": false,
580
+ "signatureStatus": "verified",
581
+ "regression_test": null,
582
+ "poc": null,
583
+ "calibrated_confidence": null,
584
+ "calibrated_confidence_ci": null,
585
+ "calibrated_n": 0,
586
+ "calibration_reason": "no-history",
587
+ "verifier_verdict": "cannot-verify",
588
+ "verifier_reason": "no-poc-no-sanitizer-rule",
589
+ "verifier_runner": null,
590
+ "narration": null,
591
+ "mitigationVerdict": "unreachable-in-prod",
592
+ "mitigationsApplied": [],
593
+ "mitigatedByWaf": false,
594
+ "wafRuleId": null,
595
+ "mitigatedByAuth": false,
596
+ "authMechanism": null,
597
+ "mitigatedByNetwork": false,
598
+ "networkExposure": null,
599
+ "featureFlag": null,
600
+ "featureFlagState": null,
601
+ "featureFlagRollout": null,
602
+ "exposedInProd": false,
603
+ "unreachableInProd": true,
604
+ "coldPath": false,
605
+ "hotPath": false,
606
+ "prodRequestCount": null,
607
+ "crownJewelScore": 0.1,
608
+ "crownJewelTier": "low-value",
609
+ "crownJewelFactors": [
610
+ "reads-secret-env"
611
+ ],
612
+ "cloneClusterId": "b8a597058e30c50c",
613
+ "cloneClusterSize": 1,
614
+ "provenance": "human-likely",
615
+ "provenanceScore": 0.04,
616
+ "typeNarrowed": null,
617
+ "strideCategory": "denialOfService",
618
+ "personaScores": {
619
+ "script-kiddie": {
620
+ "score": 0.4,
621
+ "tier": "medium",
622
+ "factors": [
623
+ "sev:medium"
624
+ ]
625
+ },
626
+ "opportunistic-criminal": {
627
+ "score": 0.4,
628
+ "tier": "medium",
629
+ "factors": [
630
+ "sev:medium"
631
+ ]
632
+ },
633
+ "apt-nation-state": {
634
+ "score": 0.4,
635
+ "tier": "medium",
636
+ "factors": [
637
+ "sev:medium"
638
+ ]
639
+ },
640
+ "supply-chain-attacker": {
641
+ "score": 0.4,
642
+ "tier": "medium",
643
+ "factors": [
644
+ "sev:medium"
645
+ ]
646
+ },
647
+ "malicious-insider": {
648
+ "score": 0.4,
649
+ "tier": "medium",
650
+ "factors": [
651
+ "sev:medium"
652
+ ]
653
+ }
654
+ },
655
+ "personaTopTwo": [
656
+ "script-kiddie",
657
+ "opportunistic-criminal"
658
+ ],
659
+ "personaMaxName": "script-kiddie",
660
+ "personaMaxScore": 0.4,
661
+ "reverseExposure": null,
662
+ "specMined": null,
663
+ "whyFired": {
664
+ "detector": "sast/dos-sync-io",
665
+ "ruleId": "CWE-400",
666
+ "parser": "STRUCTURAL",
667
+ "evidence": {
668
+ "sinkSnippet": "return JSON.parse(fs.readFileSync(fp, 'utf8'));",
669
+ "sourceSnippet": "return JSON.parse(fs.readFileSync(fp, 'utf8'));",
670
+ "pathSteps": [],
671
+ "sanitizers": [],
672
+ "guards": []
673
+ },
674
+ "considered": {
675
+ "suppressionsApplied": [],
676
+ "suppressionsSkipped": [],
677
+ "reachabilityFilter": "unaffected",
678
+ "clusterCollapsed": false,
679
+ "typeNarrowed": false,
680
+ "crownJewelTier": "low-value",
681
+ "mitigationVerdict": "unreachable-in-prod"
682
+ },
683
+ "scanner": {
684
+ "rulesetVersion": null,
685
+ "packHash": null,
686
+ "modelId": null
687
+ }
688
+ },
689
+ "adversaryTranscript": null,
690
+ "predictedBountyUsd": {
691
+ "low": 10,
692
+ "likely": 40,
693
+ "high": 120,
694
+ "program": "web2"
695
+ },
696
+ "bountyConfidence": "high",
697
+ "attackPlaybook": null
698
+ },
699
+ {
700
+ "id": "struct:llm-function-extract.js:31:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
701
+ "kind": "sast",
702
+ "severity": "medium",
703
+ "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
704
+ "cwe": "CWE-400",
705
+ "owaspLlm": null,
706
+ "stride": "Denial of Service",
707
+ "file": "llm-function-extract.js",
708
+ "line": 31,
709
+ "snippet": "fs.writeFileSync(path.join(CACHE_DIR, _cacheKey(osvId) + '.json'), JSON.stringify(data));",
710
+ "fix": null,
711
+ "reachable": false,
712
+ "triage": 22,
713
+ "dataClasses": [],
714
+ "chain": null,
715
+ "confidence": 0.212,
716
+ "toxicity": 28,
717
+ "toxicityFactors": [
718
+ "http-facing"
719
+ ],
720
+ "toxicityLabel": "Medium",
721
+ "sources": null,
722
+ "epssScore": null,
723
+ "epssPercentile": null,
724
+ "epssCve": null,
725
+ "exploitedNow": false,
726
+ "tags": null,
727
+ "blastRadius": {
728
+ "scope": "all-users",
729
+ "dataAtRisk": [
730
+ "config"
731
+ ],
732
+ "userCount": 50,
733
+ "industry": "generic",
734
+ "jurisdictions": [],
735
+ "controlsApplied": [],
736
+ "dollarBest": 23250,
737
+ "dollarLikely": 136250,
738
+ "dollarWorst": 775000,
739
+ "dollarLow": 23250,
740
+ "dollarHigh": 775000,
741
+ "components": {
742
+ "incidentResponse": {
743
+ "low": 8000,
744
+ "likely": 50000,
745
+ "high": 250000
746
+ },
747
+ "legal": {
748
+ "low": 10000,
749
+ "likely": 75000,
750
+ "high": 500000
751
+ },
752
+ "crisisPR": {
753
+ "low": 0,
754
+ "likely": 0,
755
+ "high": 0
756
+ },
757
+ "notification": {
758
+ "low": 5000,
759
+ "likely": 10000,
760
+ "high": 15000
761
+ },
762
+ "creditMonitoring": {
763
+ "low": 0,
764
+ "likely": 0,
765
+ "high": 0
766
+ },
767
+ "regulatoryFines": {
768
+ "low": 0,
769
+ "likely": 0,
770
+ "high": 0
771
+ },
772
+ "directDamage": {
773
+ "low": 250,
774
+ "likely": 1250,
775
+ "high": 10000
776
+ },
777
+ "classAction": {
778
+ "low": 0,
779
+ "likely": 0,
780
+ "high": 0
781
+ },
782
+ "lostBusiness": {
783
+ "low": 0,
784
+ "likely": 0,
785
+ "high": 0
786
+ }
787
+ },
788
+ "dominantDriver": "legal counsel",
789
+ "comparable": "Air Canada 2024 LLM chatbot DoS → court-ordered refunds + reputational damage",
790
+ "confidence": "low",
791
+ "narrative": "Synchronous Blocking I/O (DoS Risk in Server Context) on `llm-function-extract.js:31` 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."
792
+ },
793
+ "stableId": "9c296e2c3069fe33",
794
+ "confidenceTier": "very-low",
795
+ "exploitability": 0.2,
796
+ "exploitabilityTier": "low",
797
+ "exploitabilityFactors": [
798
+ "sev:medium",
799
+ "unreachable"
800
+ ],
801
+ "clusterSize": null,
802
+ "unreachable": false,
803
+ "validator_verdict": "unvalidated",
804
+ "llm_confidence": null,
805
+ "unvalidated": true,
806
+ "cross_language": false,
807
+ "family": "dos-sync-io",
808
+ "parser": "STRUCTURAL",
809
+ "_unsigned": false,
810
+ "_passThroughSigning": false,
811
+ "signatureStatus": "verified",
812
+ "regression_test": null,
813
+ "poc": null,
814
+ "calibrated_confidence": null,
815
+ "calibrated_confidence_ci": null,
816
+ "calibrated_n": 0,
817
+ "calibration_reason": "no-history",
818
+ "verifier_verdict": "cannot-verify",
819
+ "verifier_reason": "no-poc-no-sanitizer-rule",
820
+ "verifier_runner": null,
821
+ "narration": null,
822
+ "mitigationVerdict": "unreachable-in-prod",
823
+ "mitigationsApplied": [],
824
+ "mitigatedByWaf": false,
825
+ "wafRuleId": null,
826
+ "mitigatedByAuth": false,
827
+ "authMechanism": null,
828
+ "mitigatedByNetwork": false,
829
+ "networkExposure": null,
830
+ "featureFlag": null,
831
+ "featureFlagState": null,
832
+ "featureFlagRollout": null,
833
+ "exposedInProd": false,
834
+ "unreachableInProd": true,
835
+ "coldPath": false,
836
+ "hotPath": false,
837
+ "prodRequestCount": null,
838
+ "crownJewelScore": 0.1,
839
+ "crownJewelTier": "low-value",
840
+ "crownJewelFactors": [
841
+ "reads-secret-env"
842
+ ],
843
+ "cloneClusterId": "f4d8f5169ad2f78e",
844
+ "cloneClusterSize": 1,
845
+ "provenance": "human-likely",
846
+ "provenanceScore": 0.04,
847
+ "typeNarrowed": null,
848
+ "strideCategory": "denialOfService",
849
+ "personaScores": {
850
+ "script-kiddie": {
851
+ "score": 0.4,
852
+ "tier": "medium",
853
+ "factors": [
854
+ "sev:medium"
855
+ ]
856
+ },
857
+ "opportunistic-criminal": {
858
+ "score": 0.4,
859
+ "tier": "medium",
860
+ "factors": [
861
+ "sev:medium"
862
+ ]
863
+ },
864
+ "apt-nation-state": {
865
+ "score": 0.4,
866
+ "tier": "medium",
867
+ "factors": [
868
+ "sev:medium"
869
+ ]
870
+ },
871
+ "supply-chain-attacker": {
872
+ "score": 0.4,
873
+ "tier": "medium",
874
+ "factors": [
875
+ "sev:medium"
876
+ ]
877
+ },
878
+ "malicious-insider": {
879
+ "score": 0.4,
880
+ "tier": "medium",
881
+ "factors": [
882
+ "sev:medium"
883
+ ]
884
+ }
885
+ },
886
+ "personaTopTwo": [
887
+ "script-kiddie",
888
+ "opportunistic-criminal"
889
+ ],
890
+ "personaMaxName": "script-kiddie",
891
+ "personaMaxScore": 0.4,
892
+ "reverseExposure": null,
893
+ "specMined": null,
894
+ "whyFired": {
895
+ "detector": "sast/dos-sync-io",
896
+ "ruleId": "CWE-400",
897
+ "parser": "STRUCTURAL",
898
+ "evidence": {
899
+ "sinkSnippet": "fs.writeFileSync(path.join(CACHE_DIR, _cacheKey(osvId) + '.json'), JSON.stringify(data));",
900
+ "sourceSnippet": "fs.writeFileSync(path.join(CACHE_DIR, _cacheKey(osvId) + '.json'), JSON.stringify(data));",
901
+ "pathSteps": [],
902
+ "sanitizers": [],
903
+ "guards": []
904
+ },
905
+ "considered": {
906
+ "suppressionsApplied": [],
907
+ "suppressionsSkipped": [],
908
+ "reachabilityFilter": "unaffected",
909
+ "clusterCollapsed": false,
910
+ "typeNarrowed": false,
911
+ "crownJewelTier": "low-value",
912
+ "mitigationVerdict": "unreachable-in-prod"
913
+ },
914
+ "scanner": {
915
+ "rulesetVersion": null,
916
+ "packHash": null,
917
+ "modelId": null
918
+ }
919
+ },
920
+ "adversaryTranscript": null,
921
+ "predictedBountyUsd": {
922
+ "low": 10,
923
+ "likely": 40,
924
+ "high": 120,
925
+ "program": "web2"
926
+ },
927
+ "bountyConfidence": "high",
928
+ "attackPlaybook": null
929
+ },
468
930
  {
469
931
  "id": "struct:sarif-ingest.js:112:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
470
932
  "kind": "sast",
@@ -1003,7 +1465,7 @@
1003
1465
  "bundles": [],
1004
1466
  "routes": [],
1005
1467
  "components": [],
1006
- "suppressedCount": 0,
1468
+ "suppressedCount": 4,
1007
1469
  "blastRadiusSignals": {
1008
1470
  "industry": "generic",
1009
1471
  "industryConfidence": "low",
@@ -1021,22 +1483,30 @@
1021
1483
  "_v3": {
1022
1484
  "counterfactual": {
1023
1485
  "spofControls": [],
1024
- "controlsDetected": 85
1486
+ "controlsDetected": 95
1025
1487
  },
1026
1488
  "threatModel": {
1027
1489
  "summary": {
1028
- "assetCount": 0,
1490
+ "assetCount": 1,
1029
1491
  "boundaryCount": 0,
1030
1492
  "strideCounts": {
1031
1493
  "spoofing": 0,
1032
1494
  "tampering": 1,
1033
1495
  "repudiation": 0,
1034
1496
  "informationDisclosure": 0,
1035
- "denialOfService": 3,
1497
+ "denialOfService": 5,
1036
1498
  "elevationOfPrivilege": 0
1037
1499
  }
1038
1500
  },
1039
- "assets": [],
1501
+ "assets": [
1502
+ {
1503
+ "name": "AGENTIC_SECURITY_LLM_API_KEY",
1504
+ "file": "llm-function-extract.js",
1505
+ "line": 41,
1506
+ "category": "secret",
1507
+ "exposure": "internal"
1508
+ }
1509
+ ],
1040
1510
  "trustBoundaries": [],
1041
1511
  "stride": {
1042
1512
  "spoofing": [],
@@ -1061,6 +1531,16 @@
1061
1531
  "file": "dep-confusion.js",
1062
1532
  "severity": "medium"
1063
1533
  },
1534
+ {
1535
+ "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
1536
+ "file": "llm-function-extract.js",
1537
+ "severity": "medium"
1538
+ },
1539
+ {
1540
+ "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
1541
+ "file": "llm-function-extract.js",
1542
+ "severity": "medium"
1543
+ },
1064
1544
  {
1065
1545
  "vuln": "Synchronous Blocking I/O (DoS Risk in Server Context)",
1066
1546
  "file": "sarif-ingest.js",
@@ -1071,7 +1551,7 @@
1071
1551
  }
1072
1552
  },
1073
1553
  "trustBoundaryDiagram": {
1074
- "mermaid": "flowchart LR\n INTERNET((Internet))\n APP[\"Application\"]\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;",
1554
+ "mermaid": "flowchart LR\n INTERNET((Internet))\n APP[\"Application\"]\n asset_secret_AGENTIC_SECURITY_LLM_API_KEY[/\"secret: AGENTIC_SECURITY_LLM_API_KEY\"/]\n APP -->|asset| asset_secret_AGENTIC_SECURITY_LLM_API_KEY\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;",
1075
1555
  "nodes": [
1076
1556
  {
1077
1557
  "id": "INTERNET",
@@ -1082,9 +1562,20 @@
1082
1562
  "id": "APP",
1083
1563
  "kind": "app",
1084
1564
  "label": "Application"
1565
+ },
1566
+ {
1567
+ "id": "asset_secret_AGENTIC_SECURITY_LLM_API_KEY",
1568
+ "kind": "asset",
1569
+ "label": "secret: AGENTIC_SECURITY_LLM_API_KEY"
1570
+ }
1571
+ ],
1572
+ "edges": [
1573
+ {
1574
+ "from": "APP",
1575
+ "to": "asset_secret_AGENTIC_SECURITY_LLM_API_KEY",
1576
+ "kind": "asset"
1085
1577
  }
1086
1578
  ],
1087
- "edges": [],
1088
1579
  "decorations": []
1089
1580
  },
1090
1581
  "calibrationDrift": {
@@ -1 +1 @@
1
- 99342b625fc05a5daa6e457c0c180e75928cf8fe5611afc10e69bba1b32c2f9d
1
+ d2a426290abf051e739d3f60eefd2f5c61a9328cd2698d7020170b483a6ce836
@@ -1,6 +1,6 @@
1
1
  [
2
2
  {
3
- "timestamp": "2026-05-21T18:12:54.729Z",
3
+ "timestamp": "2026-05-27T13:24:07.357Z",
4
4
  "label": "scan",
5
5
  "total": 4,
6
6
  "critical": 0,
@@ -14,5 +14,23 @@
14
14
  "struct:sarif-ingest.js:112:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
15
15
  "toctou-fs:dep-confusion.js:56"
16
16
  ]
17
+ },
18
+ {
19
+ "timestamp": "2026-05-27T13:30:13.994Z",
20
+ "label": "scan",
21
+ "total": 6,
22
+ "critical": 0,
23
+ "high": 0,
24
+ "medium": 6,
25
+ "low": 0,
26
+ "kev": 0,
27
+ "ids": [
28
+ "struct:dep-confusion.js:56:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
29
+ "struct:dep-confusion.js:58:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
30
+ "struct:llm-function-extract.js:24:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
31
+ "struct:llm-function-extract.js:31:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
32
+ "struct:sarif-ingest.js:112:Synchronous_Blocking_I/O_(DoS_Risk_in_Server_Context)",
33
+ "toctou-fs:dep-confusion.js:56"
34
+ ]
17
35
  }
18
36
  ]
@@ -1,14 +1,14 @@
1
1
  {
2
- "firstScanDate": "2026-05-21T18:12:54.750Z",
3
- "lastScanDate": "2026-05-21T18:12:54.750Z",
4
- "totalScans": 1,
2
+ "firstScanDate": "2026-05-27T13:24:07.375Z",
3
+ "lastScanDate": "2026-05-27T13:30:14.013Z",
4
+ "totalScans": 2,
5
5
  "daysCleanCritical": 1,
6
- "lastCleanDate": "2026-05-21",
6
+ "lastCleanDate": "2026-05-27",
7
7
  "lastCriticalDate": null,
8
8
  "hasEverHadCritical": false,
9
9
  "bestDaysCleanCritical": 1,
10
10
  "totalFindingsAtFirstScan": 5,
11
- "totalFindingsAtLastScan": 5,
11
+ "totalFindingsAtLastScan": 7,
12
12
  "totalFixesInferred": 0,
13
13
  "lastGrade": "A",
14
14
  "bestGrade": "A",
@@ -17,5 +17,5 @@
17
17
  "first-scan",
18
18
  "grade-a"
19
19
  ],
20
- "previousGrade": null
20
+ "previousGrade": "A"
21
21
  }