@blamejs/exceptd-skills 0.13.0 → 0.13.1

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.
@@ -139,6 +139,7 @@
139
139
  "CVE-2026-43284",
140
140
  "CVE-2026-43500",
141
141
  "CVE-2026-46300",
142
+ "CVE-2026-46333",
142
143
  "CVE-2026-6973"
143
144
  ]
144
145
  },
@@ -154,7 +155,8 @@
154
155
  "CVE-2026-39884",
155
156
  "CVE-2026-42897",
156
157
  "CVE-2026-6973",
157
- "MAL-2026-NODE-IPC-STEALER"
158
+ "MAL-2026-NODE-IPC-STEALER",
159
+ "MAL-2026-SHAI-HULUD-OSS"
158
160
  ]
159
161
  },
160
162
  "T1078.001": {
@@ -252,7 +254,8 @@
252
254
  "CVE-2024-3094",
253
255
  "CVE-2026-45321",
254
256
  "MAL-2026-3083",
255
- "MAL-2026-NODE-IPC-STEALER"
257
+ "MAL-2026-NODE-IPC-STEALER",
258
+ "MAL-2026-SHAI-HULUD-OSS"
256
259
  ]
257
260
  },
258
261
  "T1199": {
@@ -273,7 +276,10 @@
273
276
  },
274
277
  "T1485": {
275
278
  "name": "Data Destruction",
276
- "version": "v19"
279
+ "version": "v19",
280
+ "cve_refs": [
281
+ "MAL-2026-SHAI-HULUD-OSS"
282
+ ]
277
283
  },
278
284
  "T1486": {
279
285
  "name": "Data Encrypted for Impact",
@@ -424,7 +430,10 @@
424
430
  },
425
431
  "T1567": {
426
432
  "name": "Exfiltration Over Web Service",
427
- "version": "v19"
433
+ "version": "v19",
434
+ "cve_refs": [
435
+ "MAL-2026-SHAI-HULUD-OSS"
436
+ ]
428
437
  },
429
438
  "T1568": {
430
439
  "name": "Dynamic Resolution",
@@ -37,7 +37,13 @@
37
37
  "vendor_advisory_field_added": "2026-05-11",
38
38
  "vendor_advisory_note": "Each CVE carries a structured vendor_advisories array (vendor, advisory_id, url, severity, published_date) for downstream consumers that route by vendor advisory. Unknown advisory IDs are null with the canonical vendor CVE-resolver URL — never fabricated. Existing free-form references are preserved in verification_sources; vendor_advisories is additive.",
39
39
  "active_exploitation_vocabulary": {
40
- "values": ["confirmed", "suspected", "theoretical", "none", "unknown"],
40
+ "values": [
41
+ "confirmed",
42
+ "suspected",
43
+ "theoretical",
44
+ "none",
45
+ "unknown"
46
+ ],
41
47
  "definitions": {
42
48
  "confirmed": "Active in-the-wild exploitation observed and attributed",
43
49
  "suspected": "Indicators consistent with exploitation; attribution incomplete",
@@ -49,7 +55,7 @@
49
55
  "ai_discovery_methodology": {
50
56
  "field_added": "2026-05-15",
51
57
  "agents_md_target": "Hard Rule #7 — '41% of 2025 zero-days were AI-discovered'. Catalog target rate floor: 0.40.",
52
- "current_rate": 0.162,
58
+ "current_rate": 0.154,
53
59
  "current_floor_enforced_by_test": 0.15,
54
60
  "ladder_to_target": [
55
61
  0.15,
@@ -2096,7 +2102,11 @@
2096
2102
  ],
2097
2103
  "last_updated": "2026-05-15",
2098
2104
  "discovery_attribution_note": "Same incident-class as CVE-2026-45321 (Mini Shai-Hulud); discovery by ecosystem detection across multiple firms (Snyk, Wiz, StepSecurity, Socket, Orca, JFrog) within minutes of the 2026-05-11 publish window. No AI-tool discovery attribution on the defender side. Source: https://snyk.io/blog/tanstack-npm-packages-compromised/.",
2099
- "rwep_correction_note": "v0.12.30: canonicalized rwep_factors to satisfy Shape B invariant (Σ factors === rwep_score). Prior values used non-canonical weights and/or blast_radius > 30 (over-cap). Stored rwep_score unchanged; factor block now reproducible from canonical RWEP_WEIGHTS + operational fields."
2105
+ "rwep_correction_note": "v0.12.30: canonicalized rwep_factors to satisfy Shape B invariant (Σ factors === rwep_score). Prior values used non-canonical weights and/or blast_radius > 30 (over-cap). Stored rwep_score unchanged; factor block now reproducible from canonical RWEP_WEIGHTS + operational fields.",
2106
+ "related_threats": [
2107
+ "MAL-2026-SHAI-HULUD-OSS"
2108
+ ],
2109
+ "related_threats_note": "MAL-2026-TANSTACK-MINI is a Mini-Shai-Hulud-wave incident (Microsoft Security Research, 2026-05-11). The framework was open-sourced 2026-05-12 (MAL-2026-SHAI-HULUD-OSS) — TanStack predates the public release by ~24h. Same threat-actor authorship class; same registry-pivot tradecraft."
2100
2110
  },
2101
2111
  "MAL-2026-ANTHROPIC-MCP-STDIO": {
2102
2112
  "_draft": true,
@@ -3558,5 +3568,169 @@
3558
3568
  "remediation_status": "removed_from_registry",
3559
3569
  "remediation_note": "npm removed all 3 malicious versions (9.1.6, 9.2.3, 12.0.1) within ~2 hours of publication on 2026-05-14. Publisher account atiertant was deactivated. The expired-domain TTP (atlantis-software.net re-registered via Namecheap on 2026-05-07 after Jan 2025 expiry) remains the novel attack class to defend against — see zeroday-lessons NEW-CTRL-047 (PACKAGE-MAINTAINER-DOMAIN-EXPIRY-MONITORING).",
3560
3570
  "remediation_status_verified_at": "2026-05-16"
3571
+ },
3572
+ "CVE-2026-46333": {
3573
+ "name": "ssh-keysign-pwn",
3574
+ "type": "LPE-via-info-disclosure",
3575
+ "cvss_score": 7,
3576
+ "cvss_vector": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H",
3577
+ "cvss_note": "Operator estimate pending NVD enrichment. Local + low privilege + no UI + root file read + chained privesc via /etc/shadow → AC:H reflects the ~100-2000-attempt race window which lowers practical exploitation but does not gate it.",
3578
+ "cisa_kev": false,
3579
+ "cisa_kev_date": null,
3580
+ "cisa_kev_due_date": null,
3581
+ "poc_available": true,
3582
+ "poc_description": "_SiCk published two working exploits within hours of the Qualys disclosure on 2026-05-14: one that reads /etc/ssh/ssh_host_*_key via ssh-keysign exit-race, one that reads /etc/shadow via chage -l exit-race. Both target the same kernel pidfd_getfd race; the setuid binary is the carrier, not the bug. ~100-2000 attempts succeed in practice — deterministic enough for adversary tradecraft.",
3583
+ "ai_discovered": false,
3584
+ "ai_discovery_notes": "Qualys Threat Research Unit human research. The underlying logic flaw was originally surfaced in a 2020 patch proposal by Jann Horn that was never merged; Qualys identified the exploitable consequence six years later.",
3585
+ "ai_assisted_weaponization": false,
3586
+ "active_exploitation": "none",
3587
+ "active_exploitation_notes": "No in-the-wild observations as of T+3 days post-disclosure. Two public PoCs (_SiCk). Expectation: KEV listing within weeks once exploitation observed; until then, theoretical-with-deterministic-PoC class.",
3588
+ "affected": "Linux kernel — all distributions shipping a kernel built without the 2020 Jann Horn patch proposal (effectively every distribution for ~6 years until 2026-05-14). Confirmed affected: RHEL 7-10, AlmaLinux 8/9/10, CloudLinux 7h/8/9/10, Rocky Linux 8/9, Ubuntu 20.04-24.04 LTS (pre-USN), Debian 11-12 (pre-DSA), Amazon Linux 2/2023, SUSE 15. The setuid carrier binaries (ssh-keysign + chage) ship on every Linux system with OpenSSH and shadow-utils installed.",
3589
+ "affected_versions": [
3590
+ "linux-kernel < 7.0.8",
3591
+ "linux-kernel < 6.18.31 (6.18.x branch)",
3592
+ "linux-kernel < 6.12.89 (6.12.x branch)",
3593
+ "linux-kernel < 6.6.139 (6.6.x branch)",
3594
+ "linux-kernel < 6.1.173 (6.1.x branch)",
3595
+ "linux-kernel < 5.15.207 (5.15.x branch)",
3596
+ "linux-kernel < 5.10.256 (5.10.x branch)"
3597
+ ],
3598
+ "vector": "ptrace exit-race. exit_mm() runs before exit_files() during privileged-process shutdown. In the microsecond window between the two, task->mm == NULL while the fd table still holds the privileged file handles. The pre-fix __ptrace_may_access() skipped its get_dumpable() check when mm == NULL and silently authorized UID-matched access. An unprivileged attacker races ssh-keysign or chage exit, calls pidfd_getfd(2) to duplicate the still-open file descriptors, and reads /etc/ssh/ssh_host_*_key or /etc/shadow as if it were root. Yama ptrace_scope does NOT mitigate because the bypass is at the kernel access-check layer, not the LSM layer.",
3599
+ "complexity": "race-condition",
3600
+ "complexity_notes": "Race window is microseconds wide but the exploit loops automatically; 100-2000 attempts typically succeed. Once the fd is captured, the read is deterministic. Class similar to Dirty COW but file-read rather than file-write primitive.",
3601
+ "patch_available": true,
3602
+ "patch_required_reboot": true,
3603
+ "live_patch_available": false,
3604
+ "live_patch_tools": [
3605
+ "KernelCare (in active build as of 2026-05-15; release ETA pending)"
3606
+ ],
3607
+ "live_patch_notes": "Upstream commit 31e62c2ebbfd (ptrace: slightly saner get_dumpable() logic) merged 2026-05-14. Kernel point releases 7.0.8 / 6.18.31 / 6.12.89 / 6.6.139 / 6.1.173 / 5.15.207 / 5.10.256 published 2026-05-15. Distribution backports: AlmaLinux 8/9/10 ALSA-2026:A008/A009/A010 (2026-05-16 production), CloudLinux 7h/8/9/10 (2026-05-15 beta / 2026-05-17 production). KernelCare livepatch in build; Canonical Livepatch / kpatch status not yet documented at T+3 days. RHEL backport not yet observed in primary sources; check access.redhat.com/security/cve.",
3608
+ "framework_control_gaps": {
3609
+ "NIST-800-53-SI-2": "30-day critical patch SLA is an exploitation window for a Linux kernel LPE with two public PoCs. Reboot-required mitigation breaks the maintenance-window assumption built into SI-2 implementations.",
3610
+ "ISO-27001-2022-A.8.8": "'Appropriate timescales' undefined; standard 30-day interpretation is unsafe for a kernel info-disclosure with public PoC. No requirement to track sysctl-based mitigation (kernel.user_ptrace=0) as a compensating control.",
3611
+ "NIS2-Art21-patch-management": "Art. 21(2)(c) patch-management measures undefined for fast-cycle kernel LPEs with public PoC. No guidance on sysctl or SUID-removal as interim measures.",
3612
+ "DORA-Art-9": "ICT incident management presumes vendor-patch cadence; reboot-required class breaks the standard SLA.",
3613
+ "UK-CAF-B4": "System security principle silent on sysctl-based mitigation OR SUID-removal as compensating controls.",
3614
+ "AU-ISM-1546": "Essential 8 patch-applications maturity ML3 = 48h is still long for a deterministic-with-loop kernel LPE; reboot-required nature compounds the maintenance-window cost.",
3615
+ "ISO-27001-2022-A.5.7": "Threat-intelligence control collects feeds but does not require the operational pivot (sysctl kernel.user_ptrace=0) when intel shows a same-family CVE with public PoC."
3616
+ },
3617
+ "atlas_refs": [],
3618
+ "attack_refs": [
3619
+ "T1068"
3620
+ ],
3621
+ "rwep_score": 30,
3622
+ "rwep_factors": {
3623
+ "cisa_kev": 0,
3624
+ "poc_available": 20,
3625
+ "ai_factor": 0,
3626
+ "active_exploitation": 0,
3627
+ "blast_radius": 25,
3628
+ "patch_available": -15,
3629
+ "live_patch_available": 0,
3630
+ "reboot_required": 0
3631
+ },
3632
+ "rwep_notes": "RWEP 30 today (T+3). Score will jump to 50 (+25 KEV) on CISA KEV listing — expected within weeks once exploitation observed. Reboot-required nature adds operator friction not captured in RWEP — practical exposure window is longer than the math suggests because reboot scheduling lags kernel-package availability. blast_radius 25 reflects every Linux host running setuid ssh-keysign or chage (every default OpenSSH + shadow-utils install). Live-patch credit deferred until KernelCare ships.",
3633
+ "cwe_refs": [
3634
+ "CWE-672",
3635
+ "CWE-362"
3636
+ ],
3637
+ "source_verified": "2026-05-17",
3638
+ "verification_sources": [
3639
+ "https://cybersecuritynews.com/linux-kernel-vulnerability-ssh-keysign-pwn/",
3640
+ "https://www.gotekky.com/guides/security/cve-2026-46333-ssh-keysign-pwn-linux-kernel/",
3641
+ "https://blog.cloudlinux.com/ptrace-exit-race-cve-2026-46333-mitigation-and-kernel-update",
3642
+ "https://almalinux.org/blog/2026-05-15-ssh-keysign-pwn-cve-2026-46333/",
3643
+ "https://9to5linux.com/six-year-old-linux-kernel-flaw-lets-unprivileged-users-read-root-owned-files",
3644
+ "https://www.phoronix.com/news/Linux-ssh-keysign-pwn",
3645
+ "https://needhelp.icu/blogs/ssh-keysign-pwn",
3646
+ "https://hackingpassion.com/ssh-keysign-pwn-cve-2026-46333/"
3647
+ ],
3648
+ "_draft": false,
3649
+ "last_updated": "2026-05-17",
3650
+ "discovery_attribution_note": "Qualys Threat Research Unit human research, publicly disclosed 2026-05-14. The underlying logic flaw was originally surfaced in a 2020 patch proposal by Jann Horn that was never merged; Qualys identified the exploitable consequence six years later. No AI involvement on either the discovery or weaponization side."
3651
+ },
3652
+ "MAL-2026-SHAI-HULUD-OSS": {
3653
+ "name": "Shai-Hulud worm framework (TeamPCP open-source release)",
3654
+ "type": "malicious-framework-release",
3655
+ "cvss_score": 9.8,
3656
+ "cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H",
3657
+ "cvss_note": "CVSS scored as a malicious package family: AV:N (npm registry), PR:N (no auth required to install), UI:R (user runs npm install), S:C (developer workstation → cloud/registry/AI-assistant credential blast radius). Same severity profile as MAL-2026-TANSTACK-MINI and MAL-2026-NODE-IPC-STEALER. RWEP scoring captures the operational risk more accurately than CVSS for the framework class.",
3658
+ "cisa_kev": false,
3659
+ "cisa_kev_date": null,
3660
+ "cisa_kev_due_date": null,
3661
+ "poc_available": true,
3662
+ "poc_description": "The framework IS the PoC — TeamPCP open-sourced the complete Shai-Hulud worm to GitHub on 2026-05-12 under MIT license, with deployment instructions. Repository naming pattern: \"A Gift From TeamPCP\". Associated accounts observed: agwagwagwa, headdirt, tmechen. Commit timestamps falsified to 2099-01-01 as an obfuscation marker. Modular TypeScript / Bun toolkit for credential harvesting + supply-chain poisoning + encrypted exfil; targets CI/CD pipelines and developer workstations. Within hours of release, Ox Security observed third-party copycat modifications already in deployment.",
3663
+ "ai_discovered": false,
3664
+ "ai_discovery_notes": "Threat-actor framework, not a discovery. TeamPCP describes the framework as \"vibe coded\" — operator-generated rather than AI-generated. Adoption-side: AI-coding-assistant config files (Claude Code, Cursor, Codeium, Anthropic CLI) are explicit exfil targets — the framework reads ~/.cursor/mcp.json, ~/.codeium/windsurf/mcp_config.json, ~/.claude/settings.json, and adds Claude Code startup hooks to execute the malware when Claude starts. AI-assistant-installed-but-not-AI-discovered.",
3665
+ "ai_assisted_weaponization": true,
3666
+ "ai_assist_weaponization_notes": "TeamPCP self-describes the codebase as \"vibe coded\" — AI-coding-assistant-mediated authoring. BreachForums + TeamPCP launched a $1,000 USD (Monero) bounty contest concurrent with the release, judged on downstream supply-chain impact, accelerating copycat weaponization.",
3667
+ "active_exploitation": "confirmed",
3668
+ "active_exploitation_notes": "Copycat modifications observed by Ox Security within hours of the 2026-05-12 release. Mini Shai-Hulud wave (Microsoft Security Research, 2026-05-11) compromised 170+ npm packages + 2 PyPI packages across 404 malicious versions. MAL-2026-TANSTACK-MINI in this catalog is an in-the-wild Shai-Hulud-class incident. Continuous active exploitation expected through 2026.",
3669
+ "affected": "npm registry (170+ confirmed packages in May 2026 wave), PyPI (2 confirmed), GitHub Actions runners, developer workstations with credentials staged in ~/.aws, ~/.config/gcloud, ~/.kube, ~/.ssh, ~/.cursor, ~/.codeium, ~/.claude, ~/.npmrc. Any package-registry account whose maintainer workstation runs the framework. Any AI-assistant config file with API tokens or MCP server credentials.",
3670
+ "affected_versions": [
3671
+ "shai-hulud-framework all forks post-2026-05-12"
3672
+ ],
3673
+ "vector": "Self-replicating npm worm with maintainer-account-pivot. Phase 1: credential harvest via package post-install OR require-time activation (variant-dependent) reads cloud + AI-assistant + version-control configs from operator HOME. Phase 2: stolen npm token authenticates to registry as compromised maintainer; enumerates other packages owned by same maintainer; injects malware; publishes new compromised versions. Phase 3: encrypted exfil to attacker-controlled GitHub repos matching the \"A Gift From TeamPCP\" naming pattern + secondary C2 channels. Phase 4 (variant-dependent): local-environment wipe — destructive opt-in by attacker.",
3674
+ "complexity": "turnkey post-source-release",
3675
+ "complexity_notes": "Pre-2026-05-12 the framework required reverse-engineering effort by would-be operators. Post-release ships with deployment instructions; the BreachForums contest provides operational support. Barrier-to-entry collapsed from high (custom-tradecraft research) to low (clone + deploy).",
3676
+ "patch_available": false,
3677
+ "patch_required_reboot": false,
3678
+ "live_patch_available": false,
3679
+ "live_patch_tools": [],
3680
+ "live_patch_notes": "Patching does not apply — this is a malicious framework, not a vulnerability. Defensive posture is detection + ingestion-side blocking + maintainer credential rotation. npm tool-trust controls (--ignore-scripts, Verdaccio proxy, install-time hash pinning) reduce blast radius for consumers; do NOT protect maintainer-side compromise.",
3681
+ "framework_control_gaps": {
3682
+ "NIST-800-218-SSDF-PW.4": "PW.4 secure-development tooling assumes the maintainer workstation is trusted; Shai-Hulud invalidates by exfiltrating maintainer credentials BEFORE the malicious publish. SSDF has no compensating control for compromised-maintainer-republish.",
3683
+ "NIST-800-53-SR-3": "SR-3 supply-chain risk management treats package-registry compromise as upstream risk; Shai-Hulud is maintainer-side compromise that LOOKS LIKE legitimate publish. SR-3 controls catch tampered upstream but not legitimately-authenticated malicious upstream.",
3684
+ "EU-CRA-Art13": "CRA Article 13 vulnerability-handling treats malicious upgrades as outside scope; the framework explicitly targets the legitimate update channel.",
3685
+ "NIS2-Art21-supply-chain": "Art. 21(2)(d) supply-chain risk measures undefined for self-replicating worm distribution. No guidance on maintainer-credential isolation or registry-side authentication monitoring.",
3686
+ "DORA-Art28": "ICT third-party risk management presumes vendor due-diligence; OSS maintainer compromise is outside the vendor-contract framing.",
3687
+ "UK-CAF-B4": "System security principle silent on registry-side authentication monitoring for downstream consumers.",
3688
+ "AU-ISM-1808": "Software-supply-chain controls assume vendor-side SBOM truth; Shai-Hulud invalidates by publishing under legitimate maintainer identity.",
3689
+ "SLSA-v1.0-Build-L3": "SLSA L3 build provenance is technically valid for Shai-Hulud-poisoned packages — the malicious build IS provenance-attested under the compromised maintainer's legitimate identity. L3 catches tampered upstream; it does NOT catch legitimately-authenticated malicious upstream."
3690
+ },
3691
+ "atlas_refs": [
3692
+ "AML.T0010"
3693
+ ],
3694
+ "attack_refs": [
3695
+ "T1195.002",
3696
+ "T1078",
3697
+ "T1567",
3698
+ "T1485"
3699
+ ],
3700
+ "rwep_score": 70,
3701
+ "rwep_factors": {
3702
+ "cisa_kev": 0,
3703
+ "poc_available": 20,
3704
+ "ai_factor": 15,
3705
+ "active_exploitation": 20,
3706
+ "blast_radius": 15,
3707
+ "patch_available": 0,
3708
+ "live_patch_available": 0,
3709
+ "reboot_required": 0
3710
+ },
3711
+ "rwep_notes": "RWEP 70 — high. cisa_kev not applicable (KEV is CVE-only). poc_available: the framework IS the PoC. ai_factor: AI-coding-assistant-mediated authoring + AI-assistant config files as exfil target. active_exploitation: confirmed via Mini Shai-Hulud wave + TanStack-class incidents. blast_radius: every npm-using engineering org + every AI-assistant-using developer workstation. No patch direction — defensive posture is detection + maintainer credential rotation + ingest-side controls.",
3712
+ "cwe_refs": [
3713
+ "CWE-506",
3714
+ "CWE-829"
3715
+ ],
3716
+ "source_verified": "2026-05-17",
3717
+ "verification_sources": [
3718
+ "https://www.theregister.com/security/2026/05/13/malware-crew-teampcp-open-sources-its-shai-hulud-worm-on-github/5239319",
3719
+ "https://www.ox.security/blog/shai-hulud-open-source-malware-github/",
3720
+ "https://www.securityweek.com/teampcp-ups-the-game-releases-shai-hulud-worms-source-code/",
3721
+ "https://www.reversinglabs.com/blog/the-shai-hulud-code-drop",
3722
+ "https://socket.dev/blog/teampcp-supply-chain-attack-contest",
3723
+ "https://industrialcyber.co/ransomware/vect-formalizes-breachforums-and-teampcp-alliance-to-push-model-for-industrialized-ransomware-scale-raas-operations/",
3724
+ "https://www.scworld.com/news/teampcp-releases-vibe-coded-shai-hulud-source-code-issues-challenge",
3725
+ "https://securitylabs.datadoghq.com/articles/shai-hulud-open-source-framework-static-analysis/",
3726
+ "https://unit42.paloaltonetworks.com/teampcp-supply-chain-attacks/",
3727
+ "https://unit42.paloaltonetworks.com/npm-supply-chain-attack/",
3728
+ "https://www.microsoft.com/en-us/security/blog/2025/12/09/shai-hulud-2-0-guidance-for-detecting-investigating-and-defending-against-the-supply-chain-attack/",
3729
+ "https://www.cisa.gov/news-events/alerts/2025/09/23/widespread-supply-chain-compromise-impacting-npm-ecosystem",
3730
+ "https://www.wiz.io/blog/shai-hulud-2-0-ongoing-supply-chain-attack",
3731
+ "https://snyk.io/blog/tanstack-npm-packages-compromised/"
3732
+ ],
3733
+ "last_updated": "2026-05-17",
3734
+ "discovery_attribution_note": "TeamPCP threat-actor framework, not a vulnerability discovery. The framework was open-sourced 2026-05-12 on GitHub under MIT license by the same actor group responsible for the September 2025 / November 2025 / May 2026 Shai-Hulud npm-worm waves. TeamPCP self-describes the framework as \"vibe coded\" — AI-coding-assistant-mediated authoring. Adoption-side weaponization is accelerated by AI coding assistants + the BreachForums-hosted $1,000 USD bounty contest."
3561
3735
  }
3562
3736
  }
@@ -949,7 +949,8 @@
949
949
  "kernel-lpe-triage"
950
950
  ],
951
951
  "evidence_cves": [
952
- "CVE-2026-33825"
952
+ "CVE-2026-33825",
953
+ "CVE-2026-46333"
953
954
  ],
954
955
  "framework_controls_partially_addressing": [
955
956
  "NIST-800-53-SI-16",
@@ -1130,6 +1131,7 @@
1130
1131
  "CVE-2024-3094",
1131
1132
  "MAL-2026-3083",
1132
1133
  "MAL-2026-NODE-IPC-STEALER",
1134
+ "MAL-2026-SHAI-HULUD-OSS",
1133
1135
  "MAL-2026-TANSTACK-MINI"
1134
1136
  ],
1135
1137
  "framework_controls_partially_addressing": [
@@ -1224,7 +1226,8 @@
1224
1226
  "kernel-lpe-triage"
1225
1227
  ],
1226
1228
  "evidence_cves": [
1227
- "CVE-2026-46300"
1229
+ "CVE-2026-46300",
1230
+ "CVE-2026-46333"
1228
1231
  ],
1229
1232
  "framework_controls_partially_addressing": [
1230
1233
  "NIST-800-53-SI-16",
@@ -1418,7 +1421,8 @@
1418
1421
  "supply-chain-integrity"
1419
1422
  ],
1420
1423
  "evidence_cves": [
1421
- "MAL-2026-NODE-IPC-STEALER"
1424
+ "MAL-2026-NODE-IPC-STEALER",
1425
+ "MAL-2026-SHAI-HULUD-OSS"
1422
1426
  ],
1423
1427
  "framework_controls_partially_addressing": [
1424
1428
  "NIST-800-53-SA-12",
@@ -388,7 +388,8 @@
388
388
  "status": "open",
389
389
  "opened_date": "2026-05-13",
390
390
  "evidence_cves": [
391
- "CVE-2026-45321"
391
+ "CVE-2026-45321",
392
+ "MAL-2026-SHAI-HULUD-OSS"
392
393
  ],
393
394
  "atlas_refs": [
394
395
  "AML.T0010",
@@ -730,6 +731,7 @@
730
731
  "CVE-2026-45321",
731
732
  "MAL-2026-3083",
732
733
  "MAL-2026-NODE-IPC-STEALER",
734
+ "MAL-2026-SHAI-HULUD-OSS",
733
735
  "MAL-2026-TANSTACK-MINI"
734
736
  ],
735
737
  "atlas_refs": [
@@ -1140,7 +1142,8 @@
1140
1142
  "CVE-2026-0300",
1141
1143
  "CVE-2026-31431",
1142
1144
  "CVE-2026-42945",
1143
- "CVE-2026-46300"
1145
+ "CVE-2026-46300",
1146
+ "CVE-2026-46333"
1144
1147
  ],
1145
1148
  "atlas_refs": [],
1146
1149
  "attack_refs": [
@@ -1319,6 +1322,7 @@
1319
1322
  "CVE-2026-39884",
1320
1323
  "CVE-2026-45321",
1321
1324
  "CVE-2026-46300",
1325
+ "CVE-2026-46333",
1322
1326
  "MAL-2026-3083"
1323
1327
  ],
1324
1328
  "atlas_refs": [],
@@ -1708,6 +1712,7 @@
1708
1712
  "CVE-2026-43284",
1709
1713
  "CVE-2026-43500",
1710
1714
  "CVE-2026-46300",
1715
+ "CVE-2026-46333",
1711
1716
  "CVE-2026-6973"
1712
1717
  ],
1713
1718
  "atlas_refs": [],
@@ -2325,7 +2330,8 @@
2325
2330
  "CVE-2024-3094",
2326
2331
  "CVE-2026-45321",
2327
2332
  "MAL-2026-3083",
2328
- "MAL-2026-NODE-IPC-STEALER"
2333
+ "MAL-2026-NODE-IPC-STEALER",
2334
+ "MAL-2026-SHAI-HULUD-OSS"
2329
2335
  ],
2330
2336
  "atlas_refs": [
2331
2337
  "AML.T0010",
@@ -3698,7 +3704,8 @@
3698
3704
  "CVE-2026-0300",
3699
3705
  "CVE-2026-42897",
3700
3706
  "CVE-2026-42945",
3701
- "CVE-2026-46300"
3707
+ "CVE-2026-46300",
3708
+ "CVE-2026-46333"
3702
3709
  ],
3703
3710
  "atlas_refs": [],
3704
3711
  "attack_refs": [
@@ -3972,7 +3979,9 @@
3972
3979
  "status": "open",
3973
3980
  "opened_date": "2026-05-17",
3974
3981
  "evidence_cves": [
3975
- "CVE-2026-46300"
3982
+ "CVE-2026-46300",
3983
+ "CVE-2026-46333",
3984
+ "MAL-2026-SHAI-HULUD-OSS"
3976
3985
  ],
3977
3986
  "atlas_refs": [],
3978
3987
  "attack_refs": [
@@ -4003,7 +4012,8 @@
4003
4012
  "status": "open",
4004
4013
  "opened_date": "2026-05-17",
4005
4014
  "evidence_cves": [
4006
- "CVE-2026-46300"
4015
+ "CVE-2026-46300",
4016
+ "CVE-2026-46333"
4007
4017
  ],
4008
4018
  "atlas_refs": [],
4009
4019
  "attack_refs": [
@@ -4034,7 +4044,8 @@
4034
4044
  "status": "open",
4035
4045
  "opened_date": "2026-05-17",
4036
4046
  "evidence_cves": [
4037
- "CVE-2026-46300"
4047
+ "CVE-2026-46300",
4048
+ "CVE-2026-46333"
4038
4049
  ],
4039
4050
  "atlas_refs": [
4040
4051
  "AML.T0010"
@@ -4068,6 +4079,7 @@
4068
4079
  "opened_date": "2026-05-17",
4069
4080
  "evidence_cves": [
4070
4081
  "MAL-2026-NODE-IPC-STEALER",
4082
+ "MAL-2026-SHAI-HULUD-OSS",
4071
4083
  "MAL-2026-TANSTACK-MINI"
4072
4084
  ],
4073
4085
  "atlas_refs": [
@@ -1941,5 +1941,183 @@
1941
1941
  "ai_discovery_source": "vendor_research",
1942
1942
  "ai_discovery_date": "2026-05-14",
1943
1943
  "ai_assist_factor": "low"
1944
+ },
1945
+ "CVE-2026-46333": {
1946
+ "name": "ssh-keysign-pwn (Linux kernel ptrace exit-race)",
1947
+ "lesson_date": "2026-05-17",
1948
+ "attack_vector": {
1949
+ "description": "Linux kernel ptrace exit-race: exit_mm() runs before exit_files() during privileged-process shutdown, leaving a microsecond window where task->mm == NULL but the fd table still holds privileged file handles. Pre-fix __ptrace_may_access() skipped its get_dumpable() check when mm == NULL, silently authorizing UID-matched access. Unprivileged attacker races ssh-keysign or chage exit, calls pidfd_getfd(2) to duplicate still-open fds, reads /etc/ssh/ssh_host_*_key or /etc/shadow as root.",
1950
+ "privileges_required": "unprivileged local user with shell access",
1951
+ "complexity": "race-condition with deterministic-on-loop primitive — 100-2000 attempts typically succeed",
1952
+ "ai_factor": "Not AI-discovered. Qualys TRU human research. The underlying flaw was originally proposed in a 2020 Jann Horn patch that was never merged; 6-year dormant logic bug."
1953
+ },
1954
+ "defense_chain": {
1955
+ "prevention": {
1956
+ "what_would_have_worked": "Merging the 2020 Jann Horn patch proposal. seccomp profiles blocking pidfd_getfd for unprivileged users. SUID removal from ssh-keysign + chage on hosts where host-based SSH auth + age-warn UX are not required. sysctl kernel.user_ptrace=0 to block unprivileged ptrace system-wide.",
1957
+ "was_this_required": false,
1958
+ "framework_requiring_it": null,
1959
+ "adequacy": "Yama ptrace_scope is NOT a compensating control — the bypass is at the kernel access-check layer, not the LSM layer. The 2020 Horn patch would have closed the class entirely."
1960
+ },
1961
+ "detection": {
1962
+ "what_would_have_worked": "auditd rule on pidfd_getfd with auid>=1000 fires on unprivileged invocation. eBPF on tracepoint:syscalls:sys_enter_pidfd_getfd correlated with ssh-keysign / chage execution bursts surfaces the 100-2000-attempt race loop loudly.",
1963
+ "was_this_required": false,
1964
+ "framework_requiring_it": null,
1965
+ "adequacy": "Detection only; race is running by the time auditd fires. Mitigates post-exploitation cleanup, not exfil itself."
1966
+ },
1967
+ "response": {
1968
+ "what_would_have_worked": "Rotate SSH host keys + /etc/shadow on hosts with observed pidfd_getfd anomalies in disclosure window. Patch + reboot (kernel point releases 7.0.8 / 6.18.31 / 6.12.89 / 6.6.139 / 6.1.173 / 5.15.207 / 5.10.256). KernelCare livepatch when released.",
1969
+ "was_this_required": false,
1970
+ "framework_requiring_it": null,
1971
+ "adequacy": "Host-key rotation is non-trivial in fleet ops — SSH known_hosts trust graph fragments. Most operators patch + accept residual window between disclosure and reboot scheduling."
1972
+ }
1973
+ },
1974
+ "framework_coverage": {
1975
+ "NIST-800-53-SI-2": {
1976
+ "covered": true,
1977
+ "adequate": false,
1978
+ "gap": "30-day critical patch SLA is an exploitation window for a kernel LPE with two public PoCs. Reboot-required nature breaks standard SI-2 maintenance assumptions."
1979
+ },
1980
+ "NIST-800-53-AC-3": {
1981
+ "covered": true,
1982
+ "adequate": false,
1983
+ "gap": "Access enforcement compliance assumes file-permission integrity. ssh-keysign-pwn defeats file permissions via kernel-level access-check skip — AC-3 mode-bit checks are not compensating controls."
1984
+ },
1985
+ "NIST-800-53-AU-2": {
1986
+ "covered": true,
1987
+ "adequate": false,
1988
+ "gap": "Audit event selection should include pidfd_getfd post-disclosure; pre-disclosure the syscall was rarely on default audit rule sets."
1989
+ },
1990
+ "ISO-27001-2022-A.8.8": {
1991
+ "covered": true,
1992
+ "adequate": false,
1993
+ "gap": "Appropriate timescales undefined; same problem as CVE-2026-43284 / CVE-2026-46300 / CVE-2026-31431."
1994
+ },
1995
+ "NIS2-Art21-patch-management": {
1996
+ "covered": true,
1997
+ "adequate": false,
1998
+ "gap": "Art. 21(2)(c) measures undefined for fast-cycle kernel LPEs. No guidance on sysctl or SUID-removal as interim measures."
1999
+ }
2000
+ },
2001
+ "new_control_requirements": [
2002
+ {
2003
+ "id": "NEW-CTRL-048",
2004
+ "name": "KERNEL-EXIT-RACE-CVE-CLASS-MONITORING",
2005
+ "description": "When a CVE is disclosed in the kernel ptrace / pidfd / fd-table lifecycle class, audit rules SHOULD enable pidfd_getfd / pidfd_open / pidfd_send_signal tracking for auid>=1000 within 24h. The syscall is rare in normal operation; spike volume after a same-class disclosure is high-confidence exploitation signal.",
2006
+ "evidence": "CVE-2026-46333: the 100-2000-attempt exploit loop is loud in audit but most default rule sets do not monitor pidfd_getfd.",
2007
+ "gap_closes": [
2008
+ "NIST-800-53-AU-2",
2009
+ "NIST-800-53-SI-4"
2010
+ ]
2011
+ },
2012
+ {
2013
+ "id": "NEW-CTRL-049",
2014
+ "name": "SUID-MINIMIZATION-FOR-KERNEL-LPE-CARRIER-BINARIES",
2015
+ "description": "Hosts that do not use SSH host-based authentication SHOULD have ssh-keysign de-suid-ed. Hosts that do not use age-warn login UX SHOULD have chage de-suid-ed. Removes the privileged-process carrier even before the kernel patch lands.",
2016
+ "evidence": "CVE-2026-46333: ssh-keysign + chage are the canonical carriers; SUID-removal blocks the exploit at the carrier layer regardless of kernel patch state.",
2017
+ "gap_closes": [
2018
+ "NIST-800-53-CM-6",
2019
+ "NIST-800-53-AC-3"
2020
+ ]
2021
+ }
2022
+ ],
2023
+ "compliance_exposure_score": {
2024
+ "percent_audit_passing_orgs_still_exposed": 95,
2025
+ "basis": "Every Linux fleet running OpenSSH + shadow-utils — every default install for the last 6 years. Audit-passing orgs are exposed because the bug is in default-shipped kernels.",
2026
+ "theater_pattern": "patch_management"
2027
+ },
2028
+ "ai_discovered_zeroday": false,
2029
+ "ai_discovery_source": "human_researcher",
2030
+ "ai_assist_factor": "low"
2031
+ },
2032
+ "MAL-2026-SHAI-HULUD-OSS": {
2033
+ "name": "Shai-Hulud worm framework open-source release (TeamPCP)",
2034
+ "lesson_date": "2026-05-17",
2035
+ "attack_vector": {
2036
+ "description": "Threat-actor open-source release of an operational supply-chain worm under MIT license, paired with a BreachForums-hosted cash-bounty contest for downstream impact. Lowers barrier-to-entry from custom-tradecraft to clone-and-deploy. Framework targets AI-coding-assistant config files (~/.cursor, ~/.codeium, ~/.claude) alongside cloud + registry credentials; adds Claude Code startup hooks for persistence. Self-replicates via maintainer-token-pivot — stolen npm token authenticates as compromised maintainer, publishes malicious versions of other packages owned by the same maintainer.",
2037
+ "privileges_required": "opportunistic — any developer workstation where the package is installed and post-install or require-time activation fires",
2038
+ "complexity": "post-release: low. Pre-release: high (custom tradecraft).",
2039
+ "ai_factor": "TeamPCP self-describes as \"vibe coded\" — AI-coding-assistant-mediated authoring. Defenders should expect rapid variant proliferation accelerated by AI coding assistants."
2040
+ },
2041
+ "defense_chain": {
2042
+ "prevention": {
2043
+ "what_would_have_worked": "Maintainer-side: hardware-key-bound npm publish + MFA-required republish + npm-token isolation (publish tokens NOT on developer workstations). Consumer-side: package-pin hash verification, --ignore-scripts for postinstall, internal Verdaccio proxy with manual gating on version-bump risk-scoring. AI-assistant-side: file-permission restriction on ~/.claude/settings.json, ~/.cursor/mcp.json, ~/.codeium/windsurf/mcp_config.json (0600 on POSIX, ACL-restricted on Windows) so unprivileged processes cannot read.",
2044
+ "was_this_required": false,
2045
+ "framework_requiring_it": null,
2046
+ "adequacy": "No single control prevents the attack class. Defense-in-depth across maintainer + registry + consumer + AI-config layers reduces blast radius but does not eliminate."
2047
+ },
2048
+ "detection": {
2049
+ "what_would_have_worked": "Anomaly detection on npm publish events from new IPs, unusual cadence, or unusual package selection per maintainer. Monitor GitHub for repos matching \"A Gift From TeamPCP\" naming pattern OR with commit timestamps in year 2099 OR with agwagwagwa / headdirt / tmechen account contributors. eBPF on file-read events for ~/.aws, ~/.ssh, ~/.cursor, ~/.codeium, ~/.claude from processes spawned by node / npm / yarn / pnpm.",
2050
+ "was_this_required": false,
2051
+ "framework_requiring_it": null,
2052
+ "adequacy": "Detection-side is operator-feasible but reactive. By the time anomaly fires, credentials may already be in the attacker-controlled GitHub repo."
2053
+ },
2054
+ "response": {
2055
+ "what_would_have_worked": "Immediate npm token rotation across all developer workstations + maintainer accounts. Audit all published package versions in the disclosure window for any unauthorized publish under compromised credentials. Roll back malicious versions via npm registry security-team channel. Rotate all secrets referenced by AI-assistant config files (MCP server tokens, Anthropic API keys, OpenAI keys).",
2056
+ "was_this_required": false,
2057
+ "framework_requiring_it": null,
2058
+ "adequacy": "Response is unbounded — once credentials leak, blast radius is the union of every API the credential can reach."
2059
+ }
2060
+ },
2061
+ "framework_coverage": {
2062
+ "NIST-800-218-SSDF-PW.4": {
2063
+ "covered": true,
2064
+ "adequate": false,
2065
+ "gap": "Tooling-trust assumption invalid when maintainer workstation is compromised."
2066
+ },
2067
+ "NIST-800-53-SR-3": {
2068
+ "covered": true,
2069
+ "adequate": false,
2070
+ "gap": "Supply-chain-tampering controls do not address legitimately-authenticated malicious upstream."
2071
+ },
2072
+ "EU-CRA-Art13": {
2073
+ "covered": true,
2074
+ "adequate": false,
2075
+ "gap": "Vulnerability-handling treats malicious upgrades as outside scope."
2076
+ },
2077
+ "SLSA-v1.0-Build-L3": {
2078
+ "covered": true,
2079
+ "adequate": false,
2080
+ "gap": "L3 provenance is valid for Shai-Hulud-poisoned packages — the build IS provenance-attested under the compromised maintainer identity."
2081
+ }
2082
+ },
2083
+ "new_control_requirements": [
2084
+ {
2085
+ "id": "NEW-CTRL-050",
2086
+ "name": "AI-ASSISTANT-CONFIG-FILE-PERMISSION-LOCKDOWN",
2087
+ "description": "AI-assistant configuration files (~/.claude/, ~/.cursor/, ~/.codeium/, ~/.aider/, ~/.continue/) that carry MCP server tokens or LLM API keys MUST be mode 0600 on POSIX and ACL-restricted to the workstation user on Windows. Default mode on these files is typically 0644; Shai-Hulud reads them at unprivileged process scope. exceptd v0.12.41 hardened attestation sidecars to 0o600 for the same reason; the workstation-config category needs the same defensive posture.",
2088
+ "evidence": "MAL-2026-SHAI-HULUD-OSS framework explicitly reads ~/.cursor/mcp.json + ~/.codeium/windsurf/mcp_config.json + ~/.claude/settings.json as exfil targets.",
2089
+ "gap_closes": [
2090
+ "NIST-800-53-AC-3",
2091
+ "NIST-800-53-CM-6"
2092
+ ]
2093
+ },
2094
+ {
2095
+ "id": "NEW-CTRL-051",
2096
+ "name": "NPM-PUBLISH-TOKEN-WORKSTATION-ISOLATION",
2097
+ "description": "npm publish tokens MUST NOT reside on developer workstations. Publish should require a hardware-key-bound CI/CD pipeline gate (GitHub Actions with OIDC + npm provisioning, or equivalent). Workstation tokens scope to read-only registry pulls.",
2098
+ "evidence": "MAL-2026-SHAI-HULUD-OSS pivot mechanism requires a write-scope npm token on the maintainer workstation.",
2099
+ "gap_closes": [
2100
+ "NIST-800-53-IA-5",
2101
+ "NIST-800-218-SSDF-PW.4"
2102
+ ]
2103
+ },
2104
+ {
2105
+ "id": "NEW-CTRL-052",
2106
+ "name": "GITHUB-REPO-PATTERN-MONITORING-FOR-EXFIL-CHANNELS",
2107
+ "description": "Organizations SHOULD monitor GitHub for repository creation matching known threat-actor naming patterns (\"A Gift From TeamPCP\", \"Shai-Hulud\", future variants). The attacker uses GitHub itself as the exfil channel; the GitHub Search API + Code Search API are sufficient.",
2108
+ "evidence": "MAL-2026-SHAI-HULUD-OSS pattern; pre-2026-05-12 Shai-Hulud waves used \"Shai-Hulud-*\" repo naming.",
2109
+ "gap_closes": [
2110
+ "NIST-800-53-SI-4"
2111
+ ]
2112
+ }
2113
+ ],
2114
+ "compliance_exposure_score": {
2115
+ "percent_audit_passing_orgs_still_exposed": 80,
2116
+ "basis": "Every npm-consuming engineering org. SLSA + SSDF + SR-3 compliance does not protect against legitimately-authenticated malicious-maintainer publishes.",
2117
+ "theater_pattern": "sbom_and_provenance"
2118
+ },
2119
+ "ai_discovered_zeroday": false,
2120
+ "ai_discovery_source": "threat_actor_release",
2121
+ "ai_assist_factor": "high"
1944
2122
  }
1945
2123
  }
@@ -637,6 +637,12 @@ const OSV_SOURCE = {
637
637
  },
638
638
  };
639
639
 
640
+ // v0.13.1: ADVISORIES_SOURCE polls Qualys TRU + RHSA + USN + ZDI primary
641
+ // feeds and surfaces CVE IDs not yet in the catalog. Report-only — no
642
+ // auto-catalog mutation. Closes the post-mortem gap on CVE-2026-46333
643
+ // (ssh-keysign-pwn) where the existing NVD-based pollers lagged by 3+ days.
644
+ const { ADVISORIES_SOURCE } = require('./source-advisories');
645
+
640
646
  const ALL_SOURCES = {
641
647
  kev: KEV_SOURCE,
642
648
  epss: EPSS_SOURCE,
@@ -645,6 +651,7 @@ const ALL_SOURCES = {
645
651
  pins: PINS_SOURCE,
646
652
  ghsa: GHSA_SOURCE,
647
653
  osv: OSV_SOURCE,
654
+ advisories: ADVISORIES_SOURCE,
648
655
  };
649
656
 
650
657
  // --- Cache-mode helpers ------------------------------------------------