@blamejs/exceptd-skills 0.14.26 → 0.14.28

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.
@@ -49,6 +49,7 @@
49
49
  "ai-api",
50
50
  "ai-discovered-cve-triage",
51
51
  "cicd-pipeline-compromise",
52
+ "citation-hygiene",
52
53
  "cloud-iam-incident",
53
54
  "crypto",
54
55
  "crypto-codebase",
@@ -85,6 +85,7 @@
85
85
  "ai-api",
86
86
  "ai-discovered-cve-triage",
87
87
  "cicd-pipeline-compromise",
88
+ "citation-hygiene",
88
89
  "cloud-iam-incident",
89
90
  "containers",
90
91
  "crypto",
@@ -17746,5 +17746,496 @@
17746
17746
  ],
17747
17747
  "_auto_imported": false,
17748
17748
  "_intake_method": "manual-verified-curation"
17749
+ },
17750
+ "CVE-2025-30066": {
17751
+ "name": "tj-actions/changed-files GitHub Action Supply-Chain Compromise",
17752
+ "lesson_date": "2026-05-28",
17753
+ "attack_vector": {
17754
+ "description": "A stolen Personal Access Token repointed the action's mutable release tags (v1..v45.0.7) to a malicious commit (0e58ed8) that dumped CI/CD secrets into publicly readable GitHub Actions workflow logs. ~23,000 repositories referenced the action; any consumer pinning by tag rather than commit SHA pulled the trojaned code on its next run.",
17755
+ "privileges_required": "none — automatic for any workflow that ran the tag-pinned action during the window",
17756
+ "complexity": "low to use once tags were repointed; the access required a leaked maintainer PAT",
17757
+ "ai_factor": "No AI involvement documented in discovery or weaponization. Static base64 Python memory-dump payload."
17758
+ },
17759
+ "defense_chain": {
17760
+ "prevention": {
17761
+ "what_would_have_worked": "Pinning every GitHub Action to a full-length 40-character commit SHA rather than a mutable tag. A SHA reference cannot be silently repointed.",
17762
+ "was_this_required": false,
17763
+ "framework_requiring_it": "OWASP CICD-SEC-3 (recommended, not mandated as default)",
17764
+ "adequacy": "SHA pinning fully prevents tag-repointing, but the documented usage pattern for the action was tag pinning, so the safe configuration was opt-in."
17765
+ },
17766
+ "detection": {
17767
+ "what_would_have_worked": "Egress/behavior monitoring on CI runners (e.g. Harden-Runner) that flags unexpected network calls or secret-shaped output from a build step — the mechanism by which the compromise was first observed.",
17768
+ "was_this_required": false,
17769
+ "framework_requiring_it": null,
17770
+ "adequacy": "Effective but rarely deployed; most pipelines have no runner egress baseline."
17771
+ },
17772
+ "response": {
17773
+ "what_would_have_worked": "Rotate every secret exposed to affected workflows during 2025-03-14/15 and repin to a known-good SHA. GitHub purged the malicious commit and the action was restored at v46.",
17774
+ "was_this_required": true,
17775
+ "framework_requiring_it": "NIST 800-53 IR-4 / SR-11",
17776
+ "adequacy": "Rotation is mandatory but only as good as the org's ability to enumerate which secrets each workflow could read."
17777
+ }
17778
+ },
17779
+ "framework_coverage": {
17780
+ "SLSA-v1.0-Build-L3": {
17781
+ "covered": true,
17782
+ "adequate": false,
17783
+ "gap": "Build provenance does not bind a consumer's tag reference to a specific source revision; a repointed mutable tag substitutes the build inputs silently."
17784
+ },
17785
+ "NIST-800-218-SSDF-PW.4": {
17786
+ "covered": true,
17787
+ "adequate": false,
17788
+ "gap": "Component-reuse controls assume the upstream artifact is immutable; an action tag is mutable with no publisher-side tamper control."
17789
+ },
17790
+ "NIST-800-53-SR-11": {
17791
+ "covered": true,
17792
+ "adequate": false,
17793
+ "gap": "Component-authenticity verification assumes signed/versioned artifacts; unsigned action tags carry no integrity guarantee."
17794
+ },
17795
+ "OWASP-CICD-SEC-3": {
17796
+ "covered": true,
17797
+ "adequate": false,
17798
+ "gap": "Dependency-chain abuse: SHA pinning is the control but tag pinning is the documented default usage."
17799
+ }
17800
+ },
17801
+ "new_control_requirements": [
17802
+ {
17803
+ "id": "NEW-CTRL-111",
17804
+ "name": "ACTION-COMMIT-SHA-PINNING-ENFORCEMENT",
17805
+ "description": "Every third-party CI/CD action (GitHub Actions, GitLab CI includes, etc.) must be referenced by a full-length commit SHA, never a mutable tag or branch. Enforce via policy check in the pipeline linter; a tag/branch reference to a third-party action is a hard fail.",
17806
+ "evidence": "CVE-2025-30066 — tags v1..v45.0.7 were repointed to malicious commit 0e58ed8; only SHA-pinned consumers were unaffected.",
17807
+ "gap_closes": [
17808
+ "SLSA-v1.0-Build-L3",
17809
+ "OWASP-CICD-SEC-3",
17810
+ "NIST-800-53-SR-11"
17811
+ ]
17812
+ }
17813
+ ],
17814
+ "compliance_exposure_score": {
17815
+ "percent_audit_passing_orgs_still_exposed": 85,
17816
+ "basis": "Most pipelines pin actions by tag per the documented usage pattern, and few audit frameworks mandate SHA pinning as a hard control. Secrets leaked to public logs before any audit could react.",
17817
+ "theater_pattern": "supply_chain_first_party_only"
17818
+ },
17819
+ "ai_discovered_zeroday": false,
17820
+ "ai_discovery_source": "human_researcher",
17821
+ "ai_discovery_date": "2025-03-14",
17822
+ "ai_assist_factor": "none"
17823
+ },
17824
+ "CVE-2025-30154": {
17825
+ "name": "reviewdog/action-setup GitHub Action Supply-Chain Compromise",
17826
+ "lesson_date": "2026-05-28",
17827
+ "attack_vector": {
17828
+ "description": "reviewdog/action-setup@v1 was trojaned on 2025-03-11 to dump exposed secrets to GitHub Actions workflow logs. Because five other reviewdog actions invoke action-setup@v1 internally, consumers were affected transitively even when they SHA-pinned the outer reviewdog action. Assessed as the pivot that leaked the PAT later used in the tj-actions compromise (CVE-2025-30066).",
17829
+ "privileges_required": "none — automatic via transitive action inclusion during the window",
17830
+ "complexity": "low to use; defeated consumer-side SHA pinning of the outer action",
17831
+ "ai_factor": "No AI involvement documented."
17832
+ },
17833
+ "defense_chain": {
17834
+ "prevention": {
17835
+ "what_would_have_worked": "Transitive SHA pinning — verifying that an action's OWN internal dependencies are SHA-pinned, not just the action a consumer references directly. Preferring actions that pin their dependencies by SHA.",
17836
+ "was_this_required": false,
17837
+ "framework_requiring_it": null,
17838
+ "adequacy": "Consumer-side SHA pinning is insufficient when the pinned action references a mutable tag internally; the control must extend one tier deeper."
17839
+ },
17840
+ "detection": {
17841
+ "what_would_have_worked": "CI runner egress/behavior monitoring flagging secret-shaped output from a reviewdog step.",
17842
+ "was_this_required": false,
17843
+ "framework_requiring_it": null,
17844
+ "adequacy": "Effective but rarely deployed."
17845
+ },
17846
+ "response": {
17847
+ "what_would_have_worked": "Rotate secrets exposed during 2025-03-11 18:42-20:31 UTC; repin all reviewdog actions to known-good SHAs predating the compromise.",
17848
+ "was_this_required": true,
17849
+ "framework_requiring_it": "NIST 800-53 IR-4 / SR-11",
17850
+ "adequacy": "Mandatory; complicated by the transitive inclusion masking which workflows were actually affected."
17851
+ }
17852
+ },
17853
+ "framework_coverage": {
17854
+ "SLSA-v1.0-Build-L3": {
17855
+ "covered": true,
17856
+ "adequate": false,
17857
+ "gap": "Provenance does not cover transitively-included actions; SHA-pinning the outer action still pulled a tag-referenced malicious inner action."
17858
+ },
17859
+ "NIST-800-53-SR-3": {
17860
+ "covered": true,
17861
+ "adequate": false,
17862
+ "gap": "Supply-chain inventory captures direct dependencies; a second-tier action (action-setup pulled by action-shellcheck) escapes that inventory."
17863
+ },
17864
+ "OWASP-CICD-SEC-3": {
17865
+ "covered": true,
17866
+ "adequate": false,
17867
+ "gap": "Transitive dependency-chain abuse — consumer SHA pinning is necessary but insufficient."
17868
+ }
17869
+ },
17870
+ "new_control_requirements": [
17871
+ {
17872
+ "id": "NEW-CTRL-112",
17873
+ "name": "TRANSITIVE-ACTION-DEPENDENCY-INTEGRITY",
17874
+ "description": "CI/CD action vetting must extend to the actions a referenced action invokes internally. Prefer actions that SHA-pin their own dependencies; where a dependency is tag-referenced, treat the whole chain as unpinned regardless of how the outer action is pinned.",
17875
+ "evidence": "CVE-2025-30154 — action-setup@v1 (tag) was trojaned and reached consumers who SHA-pinned action-shellcheck/staticcheck/ast-grep/typos/composite-template.",
17876
+ "gap_closes": [
17877
+ "SLSA-v1.0-Build-L3",
17878
+ "NIST-800-53-SR-3",
17879
+ "OWASP-CICD-SEC-3"
17880
+ ]
17881
+ }
17882
+ ],
17883
+ "compliance_exposure_score": {
17884
+ "percent_audit_passing_orgs_still_exposed": 88,
17885
+ "basis": "Even organizations that adopted SHA pinning (the recommended control) were exposed because the malicious code was a transitive tag-referenced dependency of an action they had pinned correctly.",
17886
+ "theater_pattern": "supply_chain_first_party_only"
17887
+ },
17888
+ "ai_discovered_zeroday": false,
17889
+ "ai_discovery_source": "human_researcher",
17890
+ "ai_discovery_date": "2025-03-11",
17891
+ "ai_assist_factor": "none"
17892
+ },
17893
+ "CVE-2026-48027": {
17894
+ "name": "Nx Console IDE Extension Supply-Chain Compromise",
17895
+ "lesson_date": "2026-05-28",
17896
+ "attack_vector": {
17897
+ "description": "A malicious Nx Console 18.95.0 was published to the Visual Studio Marketplace (~18 min) and OpenVSX (~36 min) on 2026-05-19. On install/activation it fetched an obfuscated payload that harvested developer credentials from multiple sources on the endpoint. The compromise sits upstream of the CI pipeline — on the developer's machine, where the same secrets a pipeline protects are stored.",
17898
+ "privileges_required": "none beyond install/auto-update of the extension during the window; payload ran with the developer's local privileges",
17899
+ "complexity": "low to use; required publishing under the legitimate publisher identity",
17900
+ "ai_factor": "AI-CLI abuse is not asserted for this specific extension compromise. The Nx ecosystem's earlier August 2025 's1ngularity' npm compromise weaponized installed AI CLI assistants for secret enumeration — a distinct incident noted only as context."
17901
+ },
17902
+ "defense_chain": {
17903
+ "prevention": {
17904
+ "what_would_have_worked": "Consumer-verifiable publisher signatures on IDE marketplace extensions, plus disabling auto-update on security-critical developer hosts and verifying publisher/version before updating.",
17905
+ "was_this_required": false,
17906
+ "framework_requiring_it": null,
17907
+ "adequacy": "VS Code/OpenVSX extensions carry no consumer-verifiable publisher signature; version-and-publisher review is manual and rarely performed."
17908
+ },
17909
+ "detection": {
17910
+ "what_would_have_worked": "Endpoint monitoring flagging an IDE extension host process reading credential stores (Git config, ~/.npmrc, SSH keys, cloud credentials, wallet files) or fetching a second-stage payload after update.",
17911
+ "was_this_required": false,
17912
+ "framework_requiring_it": null,
17913
+ "adequacy": "Developer endpoints are seldom instrumented for IDE-extension behavior."
17914
+ },
17915
+ "response": {
17916
+ "what_would_have_worked": "Upgrade to clean Nx Console 18.100.0; if 18.95.0 was installed on 2026-05-19, treat the host as compromised and rotate all developer credentials.",
17917
+ "was_this_required": true,
17918
+ "framework_requiring_it": "NIST 800-53 IR-4",
17919
+ "adequacy": "Mandatory; exposure window was short but the credential blast radius per host is large."
17920
+ }
17921
+ },
17922
+ "framework_coverage": {
17923
+ "NIST-800-53-SR-11": {
17924
+ "covered": true,
17925
+ "adequate": false,
17926
+ "gap": "Component-authenticity verification does not extend to IDE marketplace extensions, which carry no consumer-verifiable publisher signature."
17927
+ },
17928
+ "NIST-800-218-SSDF-PW.4": {
17929
+ "covered": true,
17930
+ "adequate": false,
17931
+ "gap": "Trusted-component reuse assumes the marketplace artifact matches reviewed source; a malicious version under the legitimate publisher identity defeats that."
17932
+ },
17933
+ "ISO-27001-2022-A.8.8": {
17934
+ "covered": true,
17935
+ "adequate": false,
17936
+ "gap": "Technical-vulnerability management for developer endpoints rarely inventories IDE extensions or their auto-update behavior as a managed surface."
17937
+ }
17938
+ },
17939
+ "new_control_requirements": [
17940
+ {
17941
+ "id": "NEW-CTRL-113",
17942
+ "name": "IDE-EXTENSION-MARKETPLACE-INTEGRITY",
17943
+ "description": "Treat IDE extensions as a managed software supply-chain surface: inventory installed extensions, pin/approve versions for security-critical hosts, disable silent auto-update where feasible, and monitor extension-host processes for credential-store access and unexpected egress.",
17944
+ "evidence": "CVE-2026-48027 — a malicious Nx Console 18.95.0 was live in two marketplaces for minutes and harvested developer credentials on install/update.",
17945
+ "gap_closes": [
17946
+ "NIST-800-53-SR-11",
17947
+ "ISO-27001-2022-A.8.8"
17948
+ ]
17949
+ }
17950
+ ],
17951
+ "compliance_exposure_score": {
17952
+ "percent_audit_passing_orgs_still_exposed": 92,
17953
+ "basis": "Almost no organization manages developer IDE extensions as a vetted software surface; marketplace publication under a legitimate identity bypasses endpoint controls and auto-update delivers the malicious version before review.",
17954
+ "theater_pattern": "endpoint_dev_tooling_unmanaged"
17955
+ },
17956
+ "ai_discovered_zeroday": false,
17957
+ "ai_discovery_source": "human_researcher",
17958
+ "ai_discovery_date": "2026-05-19",
17959
+ "ai_assist_factor": "none"
17960
+ },
17961
+ "CVE-2025-0282": {
17962
+ "name": "Ivanti Connect Secure stack-overflow preauth RCE (SPAWN ecosystem)",
17963
+ "lesson_date": "2026-05-28",
17964
+ "attack_vector": {
17965
+ "description": "Unauthenticated stack-based buffer overflow in Ivanti Connect Secure reachable over the network. Exploited as a zero-day from mid-December 2024 by the suspected China-nexus cluster UNC5337/UNC5221, deploying the SPAWN malware ecosystem (SPAWNANT/SPAWNMOLE/SPAWNSNAIL), the PHASEJAM dropper, and the DRYHOOK credential stealer, before the 2025-01-08 advisory. Patch-in-place is insufficient where the appliance is already compromised.",
17966
+ "privileges_required": "none (unauthenticated network reach to an internet-facing Connect Secure appliance)",
17967
+ "complexity": "high to weaponize reliably (AC:H), but functioning exploitation was in-the-wild at disclosure and mass-scanning followed",
17968
+ "ai_factor": "Not AI-discovered — vendor/Mandiant incident investigation. No AI involvement documented."
17969
+ },
17970
+ "defense_chain": {
17971
+ "prevention": {
17972
+ "what_would_have_worked": "Upgrade to Connect Secure 22.7R2.5 (Policy Secure 22.7R1.2, Neurons for ZTA 22.7R2.3) under a perimeter-device compressed-SLA tier (NEW-CTRL-030), and restrict the appliance management/web surface to known operator ranges where the tenancy model permits.",
17973
+ "was_this_required": true,
17974
+ "framework_requiring_it": "CISA BOD 22-01 (KEV remediation, added 2025-01-08)",
17975
+ "adequacy": "Patch fixes the overflow but does not evict SPAWN-ecosystem persistence; on any Integrity Checker Tool indicator the device must be factory-reset and rebuilt (NEW-CTRL-032 perimeter-compromise-rebuild-not-patch), not upgraded in place."
17976
+ },
17977
+ "detection": {
17978
+ "what_would_have_worked": "Ivanti Integrity Checker Tool (ICT) scans; alerting on appliance outbound connections to non-management destinations; file-integrity baselining for SPAWN artifacts.",
17979
+ "was_this_required": false,
17980
+ "framework_requiring_it": null,
17981
+ "adequacy": "ICT is necessary to distinguish patch-sufficient from rebuild-required; detection alone does not remediate a confirmed preauth RCE under active exploitation."
17982
+ },
17983
+ "response": {
17984
+ "what_would_have_worked": "Treat any internet-facing Connect Secure exposed before 2025-01-08 as potentially compromised; factory-reset/rebuild on ICT indicators; rotate all appliance and downstream credentials (admin, VPN-user, RADIUS, LDAP bind).",
17985
+ "was_this_required": false,
17986
+ "framework_requiring_it": null,
17987
+ "adequacy": "Operationally expensive but necessary; patch-in-place left SPAWN persistence on compromised devices."
17988
+ }
17989
+ },
17990
+ "framework_coverage": {
17991
+ "NIST-800-53-SI-2": {
17992
+ "covered": true,
17993
+ "adequate": false,
17994
+ "gap": "30-day patch SLA is orders of magnitude longer than the observed exploitation window (zero-day, in-wild weeks before disclosure). Reboot-required firmware breaks the maintenance-window assumption and patch-in-place is insufficient on compromised appliances."
17995
+ },
17996
+ "ISO-27001-2022-A.8.8": {
17997
+ "covered": true,
17998
+ "adequate": false,
17999
+ "gap": "Appropriate timescales undefined; the standard 30-day interpretation is unsafe for an unauthenticated preauth flaw on an internet-facing device/server with public exploitation."
18000
+ },
18001
+ "NIS2-Art21-network-security": {
18002
+ "covered": true,
18003
+ "adequate": false,
18004
+ "gap": "Treats this class as essential-function infrastructure but lacks a CISA-KEV-style compressed remediation SLA."
18005
+ },
18006
+ "DORA-Art-9": {
18007
+ "covered": true,
18008
+ "adequate": false,
18009
+ "gap": "ICT incident management presumes vendor-patch cadence; the exposure window opened inside the financial-entity SLA."
18010
+ },
18011
+ "UK-CAF-B4": {
18012
+ "covered": true,
18013
+ "adequate": false,
18014
+ "gap": "Silent on the reality that a patched device can still carry attacker persistence seeded before the patch; cleanup/rebuild verification is required."
18015
+ },
18016
+ "AU-ISM-1546": {
18017
+ "covered": true,
18018
+ "adequate": false,
18019
+ "gap": "Essential 8 ML3 (48h) is closer to reality than NIST SI-2 but still misses the mass-scanning window for this internet-facing class."
18020
+ }
18021
+ },
18022
+ "compliance_exposure_score": {
18023
+ "percent_audit_passing_orgs_still_exposed": 65,
18024
+ "basis": "Internet-facing VPN concentrators are routinely run by audited orgs without a documented compressed-SLA patch-and-rebuild procedure; the standard 30-day SLA and patch-in-place habit were active exposure for a zero-day with nation-state and later ransomware use.",
18025
+ "theater_pattern": "patch_management"
18026
+ },
18027
+ "ai_discovered_zeroday": false,
18028
+ "ai_discovery_source": "vendor_research",
18029
+ "ai_assist_factor": "none"
18030
+ },
18031
+ "CVE-2025-22457": {
18032
+ "name": "Ivanti Connect Secure stack-overflow preauth RCE (mis-triaged DoS weaponized to RCE)",
18033
+ "lesson_date": "2026-05-28",
18034
+ "attack_vector": {
18035
+ "description": "Unauthenticated stack-based buffer overflow in Ivanti Connect Secure initially assessed as a low-risk DoS and patched in 22.7R2.6 (2025-02-11), then weaponized to RCE and exploited in the wild from mid-March 2025 by UNC5221 using the TRAILBLAZE in-memory dropper and BRUSHFIRE passive backdoor. Fleets that deprioritized the fix on the basis of its initial DoS rating were exploited after the patch shipped.",
18036
+ "privileges_required": "none (unauthenticated network reach to an internet-facing Connect Secure appliance)",
18037
+ "complexity": "high to weaponize (AC:H); the public RCE understanding lagged the patch, extending effective exposure",
18038
+ "ai_factor": "Not AI-discovered — vendor/Mandiant incident investigation. No AI involvement documented."
18039
+ },
18040
+ "defense_chain": {
18041
+ "prevention": {
18042
+ "what_would_have_worked": "Upgrade to Connect Secure 22.7R2.6 (Policy Secure 22.7R1.4, ZTA Gateways 22.8R2.2). Critically: prioritize internet-facing-appliance patches by exposure class (NEW-CTRL-030), not solely by the initially-published CVSS — a DoS-rated flaw on a preauth perimeter surface must be treated as latent-RCE until proven otherwise.",
18043
+ "was_this_required": true,
18044
+ "framework_requiring_it": "CISA BOD 22-01 (KEV remediation, added 2025-04-04)",
18045
+ "adequacy": "Patch is definitive once applied, but SLA models keyed on initial CVSS under-protected fleets; rebuild required on compromise indicators (NEW-CTRL-032)."
18046
+ },
18047
+ "detection": {
18048
+ "what_would_have_worked": "ICT scans; alerting on TRAILBLAZE/BRUSHFIRE artifacts and anomalous appliance egress.",
18049
+ "was_this_required": false,
18050
+ "framework_requiring_it": null,
18051
+ "adequacy": "Necessary to catch exploitation of fleets that delayed the low-rated patch."
18052
+ },
18053
+ "response": {
18054
+ "what_would_have_worked": "Factory-reset/rebuild on compromise indicators; rotate appliance and downstream credentials; re-baseline patch prioritization to flag preauth-perimeter DoS flaws for accelerated remediation.",
18055
+ "was_this_required": false,
18056
+ "framework_requiring_it": null,
18057
+ "adequacy": "Standard appliance-compromise response; the durable lesson is severity mis-triage of a perimeter preauth flaw."
18058
+ }
18059
+ },
18060
+ "framework_coverage": {
18061
+ "NIST-800-53-SI-2": {
18062
+ "covered": true,
18063
+ "adequate": false,
18064
+ "gap": "A flaw patched as low-risk DoS was weaponized to RCE; CVSS-keyed SLA prioritization left fleets unpatched against the real critical risk. The 30-day window far exceeds the weaponization-to-mass-exploitation interval, and reboot-required firmware breaks the maintenance-window assumption."
18065
+ },
18066
+ "ISO-27001-2022-A.8.8": {
18067
+ "covered": true,
18068
+ "adequate": false,
18069
+ "gap": "Appropriate timescales undefined; the standard 30-day interpretation is unsafe for an unauthenticated preauth flaw on an internet-facing device/server with public exploitation."
18070
+ },
18071
+ "NIS2-Art21-network-security": {
18072
+ "covered": true,
18073
+ "adequate": false,
18074
+ "gap": "Treats this class as essential-function infrastructure but lacks a CISA-KEV-style compressed remediation SLA."
18075
+ },
18076
+ "DORA-Art-9": {
18077
+ "covered": true,
18078
+ "adequate": false,
18079
+ "gap": "ICT incident management presumes vendor-patch cadence; the exposure window opened inside the financial-entity SLA."
18080
+ },
18081
+ "UK-CAF-B4": {
18082
+ "covered": true,
18083
+ "adequate": false,
18084
+ "gap": "Silent on the reality that a patched device can still carry attacker persistence seeded before the patch; cleanup/rebuild verification is required."
18085
+ },
18086
+ "AU-ISM-1546": {
18087
+ "covered": true,
18088
+ "adequate": false,
18089
+ "gap": "Essential 8 ML3 (48h) is closer to reality than NIST SI-2 but still misses the mass-scanning window for this internet-facing class."
18090
+ }
18091
+ },
18092
+ "compliance_exposure_score": {
18093
+ "percent_audit_passing_orgs_still_exposed": 70,
18094
+ "basis": "CVSS-keyed patch SLAs are near-universal; a perimeter preauth flaw mis-rated as DoS is exactly the case where that model fails, and most audited orgs had no exposure-class override.",
18095
+ "theater_pattern": "patch_management"
18096
+ },
18097
+ "ai_discovered_zeroday": false,
18098
+ "ai_discovery_source": "vendor_research",
18099
+ "ai_assist_factor": "none"
18100
+ },
18101
+ "CVE-2025-31324": {
18102
+ "name": "SAP NetWeaver Visual Composer Metadata Uploader unauthenticated file-upload RCE",
18103
+ "lesson_date": "2026-05-28",
18104
+ "attack_vector": {
18105
+ "description": "The Visual Composer Metadata Uploader endpoint (/developmentserver/metadatauploader) lacks an authorization check, letting an unauthenticated attacker upload a JSP webshell that runs with SAP service privileges. Mass-exploited from April 2025; frequently chained with the NetWeaver deserialization flaw CVE-2025-42999, with webshell access leading to hands-on-keyboard follow-on including ransomware staging.",
18106
+ "privileges_required": "none (unauthenticated POST to an internet-facing NetWeaver server with Visual Composer enabled)",
18107
+ "complexity": "low — single unauthenticated request; webshell IOCs widely published",
18108
+ "ai_factor": "Not AI-discovered — identified during incident investigation (ReliaQuest). No AI involvement documented."
18109
+ },
18110
+ "defense_chain": {
18111
+ "prevention": {
18112
+ "what_would_have_worked": "Apply SAP Security Note 3594142 promptly under an internet-facing-application compressed SLA (NEW-CTRL-030); where patching is delayed, block /developmentserver/metadatauploader at the proxy and disable Visual Composer if unused.",
18113
+ "was_this_required": true,
18114
+ "framework_requiring_it": "CISA BOD 22-01 (KEV remediation, added 2025-04-29)",
18115
+ "adequacy": "Patch closes the upload path, but patch-in-place without webshell hunting leaves attacker-dropped JSP shells resident — cleanup is a required, separate step."
18116
+ },
18117
+ "detection": {
18118
+ "what_would_have_worked": "Alerting on unauthenticated POSTs to /developmentserver/metadatauploader; file-integrity monitoring of the servlet_jsp/irj root for new JSP files (helper.jsp, cache.jsp, random names); SAP service account spawning shells.",
18119
+ "was_this_required": false,
18120
+ "framework_requiring_it": null,
18121
+ "adequacy": "Webshell detection is necessary to catch resident persistence after patching."
18122
+ },
18123
+ "response": {
18124
+ "what_would_have_worked": "Hunt for and remove JSP webshells under the servlet root; assume service-account credential compromise and rotate; review for the chained CVE-2025-42999 deserialization activity.",
18125
+ "was_this_required": false,
18126
+ "framework_requiring_it": null,
18127
+ "adequacy": "Necessary; many operators patched without removing the resident webshells."
18128
+ }
18129
+ },
18130
+ "framework_coverage": {
18131
+ "NIST-800-53-SI-2": {
18132
+ "covered": true,
18133
+ "adequate": false,
18134
+ "gap": "CVSS 10.0 unauthenticated file-upload RCE on an internet-facing ERP application server; the 30-day patch SLA far exceeds the days-scale mass-exploitation window, and webshell persistence means patch-in-place leaves the attacker resident."
18135
+ },
18136
+ "ISO-27001-2022-A.8.8": {
18137
+ "covered": true,
18138
+ "adequate": false,
18139
+ "gap": "Appropriate timescales undefined; the standard 30-day interpretation is unsafe for an unauthenticated preauth flaw on an internet-facing device/server with public exploitation."
18140
+ },
18141
+ "NIS2-Art21-network-security": {
18142
+ "covered": true,
18143
+ "adequate": false,
18144
+ "gap": "Treats this class as essential-function infrastructure but lacks a CISA-KEV-style compressed remediation SLA."
18145
+ },
18146
+ "DORA-Art-9": {
18147
+ "covered": true,
18148
+ "adequate": false,
18149
+ "gap": "ICT incident management presumes vendor-patch cadence; the exposure window opened inside the financial-entity SLA."
18150
+ },
18151
+ "UK-CAF-B4": {
18152
+ "covered": true,
18153
+ "adequate": false,
18154
+ "gap": "Silent on the reality that a patched device can still carry attacker persistence seeded before the patch; cleanup/rebuild verification is required."
18155
+ },
18156
+ "AU-ISM-1546": {
18157
+ "covered": true,
18158
+ "adequate": false,
18159
+ "gap": "Essential 8 ML3 (48h) is closer to reality than NIST SI-2 but still misses the mass-scanning window for this internet-facing class."
18160
+ }
18161
+ },
18162
+ "compliance_exposure_score": {
18163
+ "percent_audit_passing_orgs_still_exposed": 75,
18164
+ "basis": "SAP NetWeaver estates are business-critical and change-controlled, so emergency patching of an internet-facing component routinely loses to change windows; webshell hunting after patch is rarely part of the documented procedure.",
18165
+ "theater_pattern": "patch_management"
18166
+ },
18167
+ "ai_discovered_zeroday": false,
18168
+ "ai_discovery_source": "vendor_research",
18169
+ "ai_assist_factor": "none"
18170
+ },
18171
+ "CVE-2025-31161": {
18172
+ "name": "CrushFTP HTTP authorization-header authentication bypass (crushadmin takeover)",
18173
+ "lesson_date": "2026-05-28",
18174
+ "attack_vector": {
18175
+ "description": "A crafted HTTP Authorization header bypasses authentication and assumes any known/guessable account, including crushadmin, granting administrative control of the file-transfer server (unless fronted by a DMZ proxy instance). Exploited in the wild March-April 2025. The managed-file-transfer class is a proven ransomware/data-extortion initial-access vector (MOVEit lineage).",
18176
+ "privileges_required": "none (unauthenticated network reach to an internet-facing CrushFTP instance without a DMZ proxy)",
18177
+ "complexity": "low — single crafted request; public exploitation details",
18178
+ "ai_factor": "Not AI-discovered — reported by Outpost24. No AI involvement documented."
18179
+ },
18180
+ "defense_chain": {
18181
+ "prevention": {
18182
+ "what_would_have_worked": "Upgrade to CrushFTP 10.8.4 / 11.3.1 under an internet-facing-service compressed SLA (NEW-CTRL-030); deploy the DMZ proxy instance as a structural mitigation that breaks the direct auth path.",
18183
+ "was_this_required": true,
18184
+ "framework_requiring_it": "CISA BOD 22-01 (KEV remediation, added 2025-04-07)",
18185
+ "adequacy": "Patch is definitive; the DMZ-proxy mode is an architecture-level control that mitigated even pre-patch. Most exposed instances ran without it."
18186
+ },
18187
+ "detection": {
18188
+ "what_would_have_worked": "Alerting on unexpected crushadmin logins or newly-created admin accounts; anomalous Authorization headers preceding admin access; egress from the file server to remote-management infrastructure.",
18189
+ "was_this_required": false,
18190
+ "framework_requiring_it": null,
18191
+ "adequacy": "Necessary to catch the account takeover; the MFT class is a high-value ransomware target."
18192
+ },
18193
+ "response": {
18194
+ "what_would_have_worked": "Audit for unauthorized admin sessions/accounts; rotate credentials; review transferred-file access logs for data exfiltration given the MFT data-extortion pattern.",
18195
+ "was_this_required": false,
18196
+ "framework_requiring_it": null,
18197
+ "adequacy": "Necessary; the extortion risk is the stored/transited data, not just server control."
18198
+ }
18199
+ },
18200
+ "framework_coverage": {
18201
+ "NIST-800-53-SI-2": {
18202
+ "covered": true,
18203
+ "adequate": false,
18204
+ "gap": "Unauthenticated admin takeover on an internet-facing managed-file-transfer server — a proven ransomware/data-extortion vector. The 30-day patch SLA is exploitation acceptance; the exposure window opened within days of public details."
18205
+ },
18206
+ "ISO-27001-2022-A.8.8": {
18207
+ "covered": true,
18208
+ "adequate": false,
18209
+ "gap": "Appropriate timescales undefined; the standard 30-day interpretation is unsafe for an unauthenticated preauth flaw on an internet-facing device/server with public exploitation."
18210
+ },
18211
+ "NIS2-Art21-network-security": {
18212
+ "covered": true,
18213
+ "adequate": false,
18214
+ "gap": "Treats this class as essential-function infrastructure but lacks a CISA-KEV-style compressed remediation SLA."
18215
+ },
18216
+ "DORA-Art-9": {
18217
+ "covered": true,
18218
+ "adequate": false,
18219
+ "gap": "ICT incident management presumes vendor-patch cadence; the exposure window opened inside the financial-entity SLA."
18220
+ },
18221
+ "UK-CAF-B4": {
18222
+ "covered": true,
18223
+ "adequate": false,
18224
+ "gap": "Silent on the reality that a patched device can still carry attacker persistence seeded before the patch; cleanup/rebuild verification is required."
18225
+ },
18226
+ "AU-ISM-1546": {
18227
+ "covered": true,
18228
+ "adequate": false,
18229
+ "gap": "Essential 8 ML3 (48h) is closer to reality than NIST SI-2 but still misses the mass-scanning window for this internet-facing class."
18230
+ }
18231
+ },
18232
+ "compliance_exposure_score": {
18233
+ "percent_audit_passing_orgs_still_exposed": 68,
18234
+ "basis": "MFT servers are internet-facing by function and hold high-value data; audited orgs routinely run them without a compressed-SLA procedure or the structural DMZ-proxy mitigation, and the MOVEit precedent shows the class is a primary extortion target.",
18235
+ "theater_pattern": "patch_management"
18236
+ },
18237
+ "ai_discovered_zeroday": false,
18238
+ "ai_discovery_source": "vendor_research",
18239
+ "ai_assist_factor": "none"
17749
18240
  }
17750
18241
  }