@blamejs/exceptd-skills 0.12.5 → 0.12.6

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.
package/AGENTS.md CHANGED
@@ -32,6 +32,8 @@ Also read [CONTEXT.md](CONTEXT.md) for a complete orientation to the skill syste
32
32
 
33
33
  13. **Skill integrity verification** — Every skill in `manifest.json` carries an Ed25519 `signature` (base64) and a `signed_at` timestamp covering its `skill.md` content. `lib/verify.js` checks each signature against the public key at `keys/public.pem` before any skill is loaded by the orchestrator. Tampered or unsigned skills are rejected. The private key at `.keys/private.pem` is gitignored and never enters the repo. Run `node lib/verify.js` (or `npm run verify`) before shipping; sign new or changed skills with `npm run bootstrap` for first-run, or `node lib/sign.js sign-all` after content changes.
34
34
 
35
+ 14. **Primary-source IoC review** — Any CVE entry in `data/cve-catalog.json` whose `poc_available: true` AND whose exploit code is publicly available (published PoC repo, vendor advisory with attached payload, researcher blog with reproducer) must include `iocs` populated from a line-level cross-reference of the published source — not from secondary-source paraphrase. The `iocs` block records which IoC categories were extracted (`payload_artifacts`, `persistence_artifacts`, `credential_paths_scanned`, `c2_indicators`, `host_recon`, `behavioral`, `runtime_syscall`, `kernel_trace`, `livepatch_gap`, `destructive`, `payload_content_patterns`, `supply_chain_entry_vectors`), and each IoC must be traceable to a specific source URL or commit hash. v0.12.6 audit reviewed CVE-2026-45321 (Mini Shai-Hulud), CVE-2026-31431 (Copy Fail / Dirty Pipe / Dirty COW family), CVE-2026-43284 + CVE-2026-43500 (Dirty Frag pair), CVE-2025-53773 (Copilot YOLO mode), and CVE-2026-30615 (Windsurf MCP) against primary sources from Aikido, StepSecurity, Socket, Wiz, Datadog, Sysdig, Trail of Bits, Invariant Labs, Embrace the Red, NVD, MSRC. Catalog updates landed in v0.12.6 changelog. Skipping this audit is equivalent to shipping "untested security advice" — the IoC list IS the operator-facing detection contract.
36
+
35
37
  ---
36
38
 
37
39
  ## Seven-phase playbook contract
package/CHANGELOG.md CHANGED
@@ -1,5 +1,63 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.12.6 — 2026-05-13
4
+
5
+ **Patch: primary-source IoC audit across the catalog — five CVEs reviewed line-level against published exploit source. AGENTS.md Hard Rule #14 added.**
6
+
7
+ Five research agents dispatched in parallel to cross-reference our IoC list for each catalogued CVE against published exploit source / vendor advisories / researcher writeups. Roughly 60 IoCs added, one major CVSS correction, two CVEs gained an `iocs` block where they previously had `null`.
8
+
9
+ ### CVE-2025-53773 (Copilot YOLO mode) — major correction
10
+
11
+ The catalog entry was directionally right (prompt-injection RCE in an AI tool) but factually wrong on the specifics defenders need:
12
+ - **CVSS corrected 9.6 → 7.8** (AV:N → AV:L). The attack is local-vector via developer-side IDE interaction; the attacker doesn't reach in over the network. NVD authoritative.
13
+ - **Vector corrected** from "PR descriptions" to **`.vscode/settings.json:chat.tools.autoApprove` write coerced by any agent-readable content** (source comments, README, issue bodies, MCP tool responses).
14
+ - **iocs populated** (was null) with primary post-exploitation indicator: `.vscode/settings.json` containing `"chat.tools.autoApprove": true`. Workspace AND user-global. Includes invisible Unicode Tag-block (U+E0000–U+E007F) variant detection.
15
+ - **affected_versions** specified: Visual Studio 2022 `>=17.14.0, <17.14.12` + Copilot Chat extension predating August 2025 Patch Tuesday.
16
+ - **CWE-77** added.
17
+ - **Worm propagation** documented (Rehberger demonstrated git-commit + push of malicious settings file).
18
+
19
+ Source: Embrace the Red (Rehberger, August 2025), NVD, MSRC, Wiz vulnerability database.
20
+
21
+ ### CVE-2026-45321 (Mini Shai-Hulud) — expanded from 4 to 8 IoC categories
22
+
23
+ Added: payload SHA-256 hashes (`ab4fcadaec49c0...` for router_init.js, `2ec78d556d696...` for tanstack_runner.js), attacker fork commit (`79ac49eedf774dd...`), tarball-size anomaly threshold (~3.7× = ~900KB vs ~190KB), `gh-token-monitor` daemon family (LaunchAgent label is `com.user.gh-token-monitor`, NOT `com.tanstack.*` as previously cataloged), three C2 channels (`git-tanstack.com`, `filev2.getsession.org`, `api.masscan.cloud`), GitHub dead-drop description strings (`A Mini Shai-Hulud has Appeared`, `Sha1-Hulud: The Second Coming.`, `Shai-Hulud Migration`), full credential-search-path corpus (~/.aws, ~/.ssh, ~/.kube, ~/.claude.json, crypto wallets), env-var harvest list, worm-propagated workflow signature (`.github/workflows/codeql_analysis.yml`), ransom string (`IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner` — zero-FP campaign signature).
24
+
25
+ Source: Aikido / StepSecurity / Socket / Wiz / Datadog / Sysdig / Pulsedive primary writeups on the original September 2025 Shai-Hulud worm and the May 2026 Mini variant.
26
+
27
+ ### CVE-2026-31431 (Copy Fail) — iocs added (was missing)
28
+
29
+ Catalog had no `iocs` field. Added: `/etc/passwd` multiple-uid-zero post-exploit signal; setuid binary drift via `rpm -Va` / `debsums -c`; runtime syscall indicators (splice from RO fd into pipe — Dirty Pipe primitive; userfaultfd from unprivileged when sysctl permits; ptrace POKEDATA against /proc/<pid>/mem); kernel-trace indicators (ftrace `splice_write`, eBPF kprobe on `copy_page_to_iter`, auditd `splice_unpriv` rule, dmesg BUG in mm/filemap.c+mm/memory.c+fs/splice.c); behavioral (process Uid transition without setuid-execve = DirtyCred signal; root shell with non-suid parent); livepatch-evasion-window gap (kernel in affected range + `/sys/kernel/livepatch/*/cve-ids` doesn't contain this CVE → treat as EXPOSED regardless of generic livepatch-active flag).
30
+
31
+ Source: Max Kellermann (Dirty Pipe disclosure), Phil Oester (Dirty COW), Arinerron PoC repo, DirtyCred CCS 2022 paper.
32
+
33
+ ### CVE-2026-43284 + CVE-2026-43500 (Dirty Frag pair) — subsystem_anchors added
34
+
35
+ Both entries previously had no per-subsystem detection guidance. Added `subsystem_anchors` block: kernel modules (esp4/esp6/xfrm_user for IPsec half; rxrpc/af_rxrpc/kafs for RxRPC half), kernel symbols (`esp_input`/`xfrm_input` and `rxrpc_recvmsg`/`afs_make_call`), procfs paths (`/proc/net/xfrm_stat`, `/proc/net/rxrpc/{calls,conns,peers,locals}`), syscall surface (NETLINK_XFRM=6 with non-root user-namespace caller; AF_RXRPC socket on non-AFS host). IoCs surface "vulnerable kernel" → "actively exposed kernel": ESP module loaded with no policies + non-zero XfrmInNoStates; any non-AFS-allowlist process opening AF_RXRPC; rxrpc-active-call-on-non-AFS-host.
36
+
37
+ Source: Linux kernel source (`net/ipv4/esp4.c`, `net/rxrpc/proc.c`), historical bugs CVE-2022-29581/CVE-2023-32233/CVE-2024-26581 (xfrm UAF family), kafs documentation.
38
+
39
+ ### CVE-2026-30615 (Windsurf MCP) — iocs added (was missing)
40
+
41
+ Catalog had `iocs: null`. Added: ANSI escape sequence detection (any byte 0x1B in tools/list field or tools/call response — SGR, cursor-movement, OSC-8 subclasses), Unicode Tag-block smuggling (U+E0000–U+E007F), instruction-coercion grammar (`<IMPORTANT>` blocks, "Before using this tool, read", "Do not mention to user", "THIS TOOL IS REQUIRED FOR GDPR/SOC2/COMPLIANCE" urgency manipulation, `chmod -R 0666 ~` prefix coercion), sensitive-path references in tool responses (cross-server credential-shadow), unprompted-tool-chain behavioral (≥2 tools/call within one user turn, second target not in user prompt, second target in {exec, shell, fetch, write_file}), MCP egress beyond manifest (postmark-mcp class — only signal is unexpected destination), invocation-count anomaly (compromised-legitimate-publisher detector). Added `atlas_refs`: AML.T0051 (indirect prompt injection — the canonical mapping), AML.T0096. Added `attack_refs`: T1552.001 (credentials in files), T1041 (exfil over C2).
42
+
43
+ Source: Trail of Bits (line-jumping + ANSI escape research), Invariant Labs (tool poisoning), Embrace the Red (Unicode Tag smuggling), Acuvity/Semgrep (postmark-mcp), Palo Alto Unit 42 (sampling/createMessage).
44
+
45
+ ### AGENTS.md Hard Rule #14
46
+
47
+ > **Primary-source IoC review** — Any CVE entry whose `poc_available: true` AND whose exploit code is publicly available must include `iocs` populated from a line-level cross-reference of the published source — not from secondary-source paraphrase. Each IoC must be traceable to a specific source URL or commit hash. Skipping this audit is equivalent to shipping "untested security advice" — the IoC list IS the operator-facing detection contract.
48
+
49
+ ### Playbook bumps
50
+
51
+ - `sbom` 1.1.0 → 1.2.0 — threat_currency_score 97 → 98
52
+ - `mcp` 1.1.0 → 1.2.0 — threat_currency_score 97 → 98 — new look artifacts (vscode-copilot-yolo-mode, mcp-tool-response-log)
53
+ - `kernel` 1.0.0 → 1.1.0 — threat_currency_score 92 → 95
54
+
55
+ All three `last_threat_review: 2026-05-13`.
56
+
57
+ ### Method
58
+
59
+ Five parallel researcher agents dispatched via the project's multi-agent pattern (CLAUDE.md "Parallel agent dispatch for large patches"). Each agent owned one CVE; each returned a structured gap report with category, pattern, source citation (URL + quote), and ready-to-paste JSON. Main thread integrated. Hard Rule #14 codifies the pattern for every subsequent catalog addition.
60
+
3
61
  ## 0.12.5 — 2026-05-13
4
62
 
5
63
  **Patch: root cause of the signature regression — a test was generating a fresh keypair mid-suite.**
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "schema_version": "1.1.0",
3
- "generated_at": "2026-05-13T03:34:45.737Z",
3
+ "generated_at": "2026-05-13T03:59:25.652Z",
4
4
  "generator": "scripts/build-indexes.js",
5
5
  "source_count": 49,
6
6
  "source_hashes": {
7
- "manifest.json": "694af5663344e76c17f8de1953aa388246a49502ad7b8d49b4d33c8ce8709610",
7
+ "manifest.json": "75ef49df2cf2bba6dc2326e19ede997e251820fdcb6392c65fe6244aa34e66da",
8
8
  "data/atlas-ttps.json": "1500b5830dab070c4252496964a8c0948e1052a656e2c7c6e1efaf0350645e13",
9
- "data/cve-catalog.json": "e9a3a4ce988caa051e50a467f1cd9c0dcbf9e8f6f3e9522610baf196217b7bdc",
9
+ "data/cve-catalog.json": "a2557e66c00334f9b2b07f7d1320a27fb0f82243f2ff199c4a39bf2933be5216",
10
10
  "data/cwe-catalog.json": "c3367d469b4b3d31e4c56397dd7a8305a0be338ecd85afa27804c0c9ce12157b",
11
11
  "data/d3fend-catalog.json": "b5cd14669e2a931d0df81bb8402f3c8ac08b0d2613e595eaecd8cc4631a57587",
12
12
  "data/dlp-controls.json": "8ea8d907aea0a2cfd772b048a62122a322ba3284a5c36a272ad5e9d392564cb5",
@@ -689,12 +689,12 @@
689
689
  }
690
690
  },
691
691
  "CVE-2025-53773": {
692
- "name": "GitHub Copilot Prompt Injection RCE",
693
- "rwep": 42,
694
- "cvss": 9.6,
692
+ "name": "GitHub Copilot / VS Code 'YOLO mode' Prompt Injection RCE",
693
+ "rwep": 30,
694
+ "cvss": 7.8,
695
695
  "cisa_kev": false,
696
- "epss_score": 0.32,
697
- "epss_percentile": 0.92,
696
+ "epss_score": 0.046,
697
+ "epss_percentile": 0.893,
698
698
  "referencing_skills": [
699
699
  "ai-attack-surface",
700
700
  "mcp-agent-trust",
@@ -144,7 +144,38 @@
144
144
  "published_date": "2026-03-15"
145
145
  }
146
146
  ],
147
- "last_updated": "2026-05-11"
147
+ "iocs": {
148
+ "payload_artifacts": [
149
+ "/etc/passwd containing more than one line with uid field == 0 (Dirty COW / Dirty Pipe / Copy Fail family canonical post-exploit outcome)",
150
+ "/etc/shadow modified without corresponding /var/log/auth.log useradd / usermod / passwd entry by uid 0",
151
+ "Setuid-root binary in /usr/bin, /usr/sbin, /bin, /sbin whose sha256 differs from distro package-manager (`rpm -Va`, `debsums -c`, `dpkg --verify`) — Copy Fail's page-cache write primitive can target any read-only page-cache-resident file; setuid binaries are highest-value post-LPE persistence targets"
152
+ ],
153
+ "runtime_syscall": [
154
+ "splice(2) syscall by uid >= 1000 with source fd opened O_RDONLY against a file the caller has no write permission on, target fd a pipe (Dirty Pipe primitive; same shape as Copy Fail page-cache CoW)",
155
+ "write(2) to a pipe immediately preceded by splice(2) from a read-only file, with payload containing 'root:' or '/bin/sh' or shell metacharacters",
156
+ "userfaultfd(2) syscall from an unprivileged process when vm.unprivileged_userfaultfd != 0, paired with MAP_PRIVATE mapping of a setuid file",
157
+ "ptrace(PTRACE_POKEDATA) or write(2) against /proc/self/mem or /proc/<pid>/mem in write mode from a non-root process"
158
+ ],
159
+ "kernel_trace": [
160
+ "ftrace tracepoint splice_write or iter_file_splice_write firing with destination inode the caller lacks S_IWUSR on",
161
+ "eBPF kprobe on copy_page_to_iter / copy_page_from_iter with caller_uid != 0 and target page in a file lacking caller write permission",
162
+ "auditd rule 'arch=b64 -S splice -F success=1 -F auid>=1000 -k splice_unpriv' firing on hosts where splice is not part of expected workload",
163
+ "dmesg BUG: or WARN_ON originating from mm/filemap.c, mm/memory.c, fs/splice.c, or mm/gup.c within 60s of an unprivileged-process privilege transition"
164
+ ],
165
+ "behavioral": [
166
+ "Process whose /proc/<pid>/status transitions Uid: 1000 1000 1000 1000 -> Uid: 0 0 0 0 without an intervening execve of a setuid binary (DirtyCred-class signal)",
167
+ "Root-uid shell (bash, sh, dash, zsh) whose PPid resolves to a non-setuid, non-root parent (python, ruby, node, user-owned /tmp or /home binary)",
168
+ "Anonymous RWX region (rwxp 00000000) appearing in /proc/<pid>/maps of a process that did not previously have one and is not a known JIT runtime",
169
+ "Unprivileged process holding open file descriptor to /proc/self/mem or /proc/<other_pid>/mem in write mode"
170
+ ],
171
+ "livepatch_gap": [
172
+ "Kernel version in affected_versions range AND /sys/kernel/livepatch/*/cve-ids does NOT contain CVE-2026-31431 — treat as EXPOSED regardless of generic livepatch-active flag",
173
+ "RHEL: kpatch-livepatch-*-CVE-2026-31431 RPM installed but not in `kpatch list` Loaded patch modules section (package-installed-without-load silent exposure)",
174
+ "Ubuntu: `canonical-livepatch status --verbose` 'fixes:' list does not include CVE-2026-31431 while kernel in affected range"
175
+ ],
176
+ "forensic_note": "Copy Fail is deterministic, 732-byte, single-stage, memory-only. Disk-forensic indicators (shell history, dropped binaries, persistence files) are unreliable — competent operators leave no on-disk trace. The runtime_syscall + kernel_trace + behavioral entries are the load-bearing detection surface. Disk indicators are limited to the exploit OUTCOMES (/etc/passwd mutation, suid drift), not the exploit ARTIFACTS."
177
+ },
178
+ "last_updated": "2026-05-13"
148
179
  },
149
180
  "CVE-2026-43284": {
150
181
  "name": "Dirty Frag (ESP/IPsec component)",
@@ -243,7 +274,36 @@
243
274
  "published_date": "2026-04-05"
244
275
  }
245
276
  ],
246
- "last_updated": "2026-05-11"
277
+ "subsystem_anchors": {
278
+ "kernel_modules": ["esp4", "esp6", "xfrm_user", "xfrm_algo"],
279
+ "kernel_symbols": [
280
+ "esp_input", "esp_input_tail", "esp_input_done2",
281
+ "esp6_input", "esp6_input_done2",
282
+ "xfrm_input", "xfrm_rcv_cb", "xfrm_replay_advance"
283
+ ],
284
+ "procfs_paths": ["/proc/net/xfrm_stat"],
285
+ "syscall_surface": [
286
+ "socket(AF_NETLINK, SOCK_RAW, NETLINK_XFRM=6)",
287
+ "sendmsg() to xfrm netlink with XFRM_MSG_NEWSA / XFRM_MSG_UPDSA"
288
+ ],
289
+ "caps_required_legit": ["CAP_NET_ADMIN"],
290
+ "caps_required_exploit": "CAP_NET_ADMIN within user namespace if unprivileged_userns_clone=1; else CAP_NET_ADMIN on host",
291
+ "deployment_prevalence_note": "IPsec subsystem present in essentially every distro kernel (CONFIG_XFRM=y). Module ESP4/ESP6 loads lazily on first use; presence of /proc/net/xfrm_stat alone does not indicate active IPsec — check `ip xfrm state` for live SAs."
292
+ },
293
+ "iocs": {
294
+ "behavioral": [
295
+ "Non-zero /proc/net/xfrm_stat XfrmInNoStates or XfrmInStateInvalid with empty `ip xfrm state show` — kernel doing ESP decap work the operator hasn't configured",
296
+ "ESP outer-IP fragmentation observed (MF=1 or non-zero frag offset on IP proto 50) with SPI churn >3/min from a single peer AND inner reconstructed payload size > 1480",
297
+ "Non-root, non-CAP_NET_ADMIN process opening NETLINK_XFRM (family=AF_NETLINK, protocol=6) from inside a user namespace — operational pivot when paired with unprivileged_userns_clone=1",
298
+ "lsmod contains esp4 OR esp6 AND `ip xfrm state show` empty AND /proc/net/xfrm_stat non-zero on counters — ESP loaded + receiving packets + no SAs configured = active CVE-2026-43284 surface probing"
299
+ ],
300
+ "false_positive_distinguishers": [
301
+ "Distinguish from libreswan/strongSwan/charon by reading /proc/<pid>/comm of the netlink opener",
302
+ "Distinguish from kube-proxy / Calico / Antrea IPsec from `ip xfrm policy show` matching expected CNI SPI ranges",
303
+ "Re-sample 60s after lsmod-loaded-no-policy fires; persistent absence of `ip xfrm state` for >120s with loaded modules indicates non-startup-race anomaly"
304
+ ]
305
+ },
306
+ "last_updated": "2026-05-13"
247
307
  },
248
308
  "CVE-2026-43500": {
249
309
  "name": "Dirty Frag (RxRPC component)",
@@ -338,38 +398,85 @@
338
398
  "published_date": "2026-04-05"
339
399
  }
340
400
  ],
341
- "last_updated": "2026-05-11"
401
+ "subsystem_anchors": {
402
+ "kernel_modules": ["rxrpc", "af_rxrpc", "kafs"],
403
+ "kernel_symbols": [
404
+ "rxrpc_recvmsg", "rxrpc_sendmsg",
405
+ "rxrpc_input_packet", "rxrpc_input_data",
406
+ "rxrpc_alloc_skb", "rxrpc_kernel_send_data",
407
+ "afs_make_call", "afs_deliver_to_call"
408
+ ],
409
+ "procfs_paths": [
410
+ "/proc/net/rxrpc/calls",
411
+ "/proc/net/rxrpc/conns",
412
+ "/proc/net/rxrpc/peers",
413
+ "/proc/net/rxrpc/locals"
414
+ ],
415
+ "syscall_surface": [
416
+ "socket(AF_RXRPC, SOCK_DGRAM, PF_INET|PF_INET6)",
417
+ "setsockopt(RXRPC_SECURITY_KEY / RXRPC_EXCLUSIVE_CONNECTION / RXRPC_UPGRADEABLE_SERVICE)"
418
+ ],
419
+ "caps_required_legit": "none — AF_RXRPC sockets openable by any user with the protocol family compiled in",
420
+ "caps_required_exploit": "none for socket open; CAP_NET_ADMIN not required — this is part of why RxRPC is attractive in a chain",
421
+ "deployment_prevalence_note": "RxRPC present in mainline as tristate module (CONFIG_AF_RXRPC=m). Loaded only on demand; only first-party in-tree consumer is kafs (CONFIG_AFS_FS). Estimated <2% of enterprise Linux hosts have rxrpc loaded at any given moment. Low ambient noise makes any AF_RXRPC socket open by a non-AFS process a high-signal IoC.",
422
+ "legitimate_rxrpc_openers": [
423
+ "Kernel threads: kafsd (per-namespace), kworker doing kafs work",
424
+ "OpenAFS suite: afsd, aklog, unlog, tokens, fs, vos, pts, bos, kas, udebug, cmdebug, kpasswd, klog, rxdebug, rxgen, xstat_*",
425
+ "kafs-utils equivalents (varies by distro)",
426
+ "Filesystem mount processes: mount.afs, mount.kafs"
427
+ ]
428
+ },
429
+ "iocs": {
430
+ "behavioral": [
431
+ "Any process not on the kafs/OpenAFS allowlist (afsd, aklog, fs, vos, pts, bos, kas, kpasswd, rxdebug, mount.afs, mount.kafs, kafsd, kworker) opening AF_RXRPC socket — RxRPC has near-zero ambient noise outside AFS environments",
432
+ "/proc/net/rxrpc/calls non-empty on a host with no AFS configuration (/etc/openafs/CellServDB absent AND /etc/krb5.conf absent)",
433
+ "lsmod contains rxrpc OR af_rxrpc AND lsmod does NOT contain kafs AND /etc/openafs/CellServDB does not exist — module loaded without its only first-party consumer",
434
+ "Outbound UDP/7000-7007 (kafs RxRPC port range) from a host not declared as an AFS client"
435
+ ],
436
+ "false_positive_distinguishers": [
437
+ "Academic / research / national-lab environments commonly run OpenAFS — establish per-host baseline rather than fleet-wide block",
438
+ "Integration tests (kafs-testing, OpenAFS regression suite) open AF_RXRPC briefly — distinguish by parent process and lifetime <60s",
439
+ "Check for kafs-testing or OpenAFS source tree in /home or /opt; check short-lived (<5min) module load via `dmesg | grep rxrpc` timestamps"
440
+ ]
441
+ },
442
+ "pairing_note": "CVE-2026-43500 only realizes its full primitive when chained with CVE-2026-43284. Detection of either subsystem being exercised on a host that should have neither is itself the chain-detection signal. Simultaneous match of esp-module-loaded-no-policy AND rxrpc-active-call-no-afs-config should escalate to a deterministic paired finding.",
443
+ "last_updated": "2026-05-13"
342
444
  },
343
445
  "CVE-2025-53773": {
344
- "name": "GitHub Copilot Prompt Injection RCE",
446
+ "name": "GitHub Copilot / VS Code 'YOLO mode' Prompt Injection RCE",
345
447
  "type": "RCE-via-prompt-injection",
346
- "cvss_score": 9.6,
347
- "cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H",
448
+ "cvss_score": 7.8,
449
+ "cvss_vector": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H",
450
+ "cvss_correction_note": "v0.12.6 source audit corrected from CVSS 9.6/AV:N (network) to CVSS 7.8/AV:L (local) — the attack is local-vector via developer-side IDE interaction; the attacker does not reach in over the network. NVD authoritative.",
451
+ "cwe_refs": ["CWE-77"],
348
452
  "cisa_kev": false,
349
453
  "cisa_kev_date": null,
350
454
  "poc_available": true,
351
- "poc_description": "Demonstrated hidden adversarial instructions in GitHub PR descriptions cause GitHub Copilot to execute attacker-controlled code in the developer's session",
455
+ "poc_description": "Published by Johann Rehberger (Embrace the Red, August 2025). Hidden instructions in any agent-readable content (source comments, README, GitHub issues, tool-call responses) coerce Copilot agent mode to write \"chat.tools.autoApprove\": true to .vscode/settings.json, flipping the agent into 'YOLO mode' where every subsequent shell tool call auto-approves without user confirmation. Demo executes calc.exe / Calculator.app via the autoapproved run_in_terminal tool.",
352
456
  "ai_discovered": false,
353
457
  "ai_assisted_weaponization": true,
354
- "ai_assisted_notes": "AI tooling enables the attack — the vulnerability IS in an AI tool. AI accelerates crafting of effective injection payloads.",
458
+ "ai_assisted_notes": "The vulnerability IS in an AI tool (Copilot agent mode). Attack chain bottlenecks on a structural settings-file write converts the 'any text could be injection' fuzzy detection problem into a one-line filesystem IoC.",
355
459
  "active_exploitation": "suspected",
356
- "affected": "GitHub Copilot users who use Copilot to review or summarize PR descriptions",
460
+ "affected": "Microsoft Visual Studio 2022 17.14.0-17.14.11 (fixed in 17.14.12). GitHub Copilot Chat extension on VS Code at versions predating the August 2025 Patch Tuesday fix. Architectural surface affects any Copilot-agent-mode-enabled environment.",
357
461
  "affected_versions": [
358
- "GitHub Copilot < patched version"
462
+ "Visual Studio 2022: >=17.14.0, <17.14.12",
463
+ "GitHub Copilot Chat (VS Code extension): versions predating the August 2025 Patch Tuesday fix"
359
464
  ],
360
- "vector": "Prompt injection via PR description fieldadversarial instructions embedded in PR content execute in the context of the developer's Copilot session when the developer interacts with the PR via Copilot",
465
+ "vector": "Three-step chain: (1) attacker plants instructions in any content the agent reads source-file comments, README, issue body, web-fetched docs, MCP tool response; (2) Copilot agent mode follows the planted instructions to write `\"chat.tools.autoApprove\": true` into `.vscode/settings.json` (workspace or user-global) — file write is silent and persistent, no in-editor diff shown; (3) every subsequent shell tool call auto-approves without user confirmation, giving full local code execution under the developer's identity. Worm angle (demonstrated): post-exploitation can `git commit` the malicious settings file and push it to other repos.",
361
466
  "complexity": "low",
362
- "complexity_notes": "The attacker crafts PR description content. No specialized knowledge required beyond understanding of prompt injection.",
467
+ "complexity_notes": "Attacker crafts agent-readable content. The agent writes the YOLO-mode flag itself; no race condition or timing dependency. Invisible Unicode Tag-block (U+E0000-U+E007F) variants demonstrated for content-level evasion.",
363
468
  "patch_available": true,
364
469
  "patch_required_reboot": false,
365
470
  "live_patch_available": true,
366
471
  "live_patch_tools": [
367
- "GitHub SaaS update no user action required for SaaS patch"
472
+ "Visual Studio 17.14.12 (August 2025 Patch Tuesday)",
473
+ "GitHub Copilot Chat extension auto-update"
368
474
  ],
369
475
  "framework_control_gaps": {
370
- "ALL-MAJOR-FRAMEWORKS": "No framework has a control category for prompt injection as an RCE vector. CVSS 9.6 with no framework control.",
371
- "NIST-800-53-AC-2": "AI agent actions use the developer's authorized service account — AC-2 controls don't surface the unauthorized action.",
372
- "SOC2-CC6": "Same logical access controls don't apply to model-context-window-mediated actions."
476
+ "ALL-MAJOR-FRAMEWORKS": "No framework has a control category for AI-agent-configuration bypass of user confirmation. Agent writes a settings file the user never sees a diff for; access control treats this as the developer's authorized action.",
477
+ "NIST-800-53-AC-2": "AI agent actions use the developer's authorized service account — AC-2 does not constrain agent-config bypass.",
478
+ "NIST-800-53-CM-7": "Least functionality does not address agent-mode auto-approval flags.",
479
+ "SOC2-CC6": "Logical access controls don't apply to model-context-window-mediated actions."
373
480
  },
374
481
  "atlas_refs": [
375
482
  "AML.T0051",
@@ -377,45 +484,73 @@
377
484
  ],
378
485
  "attack_refs": [
379
486
  "T1059",
487
+ "T1059.001",
380
488
  "T1190"
381
489
  ],
382
- "rwep_score": 42,
490
+ "rwep_score": 30,
383
491
  "rwep_factors": {
384
492
  "cisa_kev": 0,
385
493
  "poc_available": 20,
386
494
  "ai_factor": 15,
387
495
  "active_exploitation": 10,
388
- "blast_radius": 22,
496
+ "blast_radius": 10,
389
497
  "patch_available": -15,
390
498
  "live_patch_available": -10,
391
499
  "reboot_required": 0
392
500
  },
393
- "epss_score": 0.32,
394
- "epss_percentile": 0.92,
395
- "epss_date": "2026-05-11",
501
+ "rwep_notes": "RWEP recomputed in v0.12.6 after CVSS 9.6→7.8 correction. AV:L (local) reduces blast_radius weight; vendor patch + auto-updating IDE reduce live_patch_available impact.",
502
+ "epss_score": 0.046,
503
+ "epss_percentile": 0.893,
504
+ "epss_date": "2026-05-13",
396
505
  "epss_source": "https://api.first.org/data/v1/epss?cve=CVE-2025-53773",
397
- "source_verified": "2026-05-01",
506
+ "source_verified": "2026-05-13",
398
507
  "verification_sources": [
399
508
  "https://nvd.nist.gov/vuln/detail/CVE-2025-53773",
400
- "https://github.com/advisories/GHSA-xxxx"
509
+ "https://embracethered.com/blog/posts/2025/github-copilot-remote-code-execution-via-prompt-injection/",
510
+ "https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-53773",
511
+ "https://www.wiz.io/vulnerability-database/cve/cve-2025-53773"
401
512
  ],
402
513
  "vendor_advisories": [
403
514
  {
404
515
  "vendor": "Microsoft MSRC",
405
- "advisory_id": null,
516
+ "advisory_id": "CVE-2025-53773",
406
517
  "url": "https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-53773",
407
- "severity": "critical",
518
+ "severity": "high",
408
519
  "published_date": "2025-08-12"
409
520
  },
410
521
  {
411
522
  "vendor": "GitHub Security Advisories",
412
523
  "advisory_id": null,
413
524
  "url": "https://github.com/advisories?query=CVE-2025-53773",
414
- "severity": "critical",
525
+ "severity": "high",
415
526
  "published_date": "2025-08-12"
416
527
  }
417
528
  ],
418
- "last_updated": "2026-05-11"
529
+ "iocs": {
530
+ "filesystem_post_exploit": [
531
+ ".vscode/settings.json (workspace) OR ~/.vscode/settings.json (user-global) contains \"chat.tools.autoApprove\": true — PRIMARY post-exploitation IoC. Setting is experimental + off by default + structural pivot the entire chain depends on. Near-zero false positive for non-developer users.",
532
+ ".vscode/settings.json content matches regex \"chat\\\\.(experimental|tools)\\\\..*\":\\\\s*true — broader sweep for any auto-approve / experimental flag in workspace-scoped settings.",
533
+ "settings.json mtime falls inside Copilot agent-mode session window AND diff includes any key under chat.tools.* or github.copilot.advanced.* — Copilot writes are immediately persistent, no diff-approval UI"
534
+ ],
535
+ "repository_supply_chain": [
536
+ "Repository ships a checked-in .vscode/settings.json with chat.tools.autoApprove or chat.experimental.*: true — pre-arms YOLO mode for any cloner running Copilot agent mode (supply-chain plant variant)",
537
+ "Repository content (README, source comments, issue/PR bodies) contains literal 'chat.tools.autoApprove' OR 'autoApprove\": true' OR 'YOLO mode' — payload must reference target key by name (suppress on this catalog, MSRC, embracethered.com)",
538
+ "Files in agent-readable surfaces (README.md, source comments, .github/*, CONTRIBUTING.md) contain codepoints in Unicode Tag block U+E0000-U+E007F or zero-width control characters U+200B-U+200F / U+202A-U+202E / U+2060-U+2064 — invisible-instruction injection technique"
539
+ ],
540
+ "behavioral": [
541
+ "Copilot agent tool-call sequence: read_file|web_fetch|github_issue_read → write_file('.vscode/settings.json' OR '*/settings.json') → run_in_terminal, no request_user_confirmation between writes and exec",
542
+ "Editor (Code.exe / 'Code Helper') parent process spawns interactive shell (powershell/pwsh/bash/zsh) whose command line is not in user shell history AND not in {--login, REPL}"
543
+ ],
544
+ "worm_propagation": [
545
+ "Agent session writes .vscode/settings.json, then issues git add + git commit + git push within the same session — wormable variant demonstrated by Rehberger"
546
+ ],
547
+ "version_exposure": [
548
+ "Visual Studio 2022 installation with productVersion < 17.14.12 (Windows registry: HKLM\\\\SOFTWARE\\\\Microsoft\\\\VisualStudio\\\\Setup; or vswhere.exe -property installationVersion)",
549
+ "GitHub Copilot Chat extension at versions predating August 2025 Patch Tuesday fix"
550
+ ],
551
+ "forensic_note": "The .vscode/settings.json modification is silent and persistent — no in-editor diff is shown to the user. Defenders investigating suspected compromise should snapshot workspace + user-global settings.json BEFORE remediating; the file IS the primary forensic artifact."
552
+ },
553
+ "last_updated": "2026-05-13"
419
554
  },
420
555
  "CVE-2026-30615": {
421
556
  "name": "Windsurf MCP Zero-Interaction RCE",
@@ -450,11 +585,15 @@
450
585
  },
451
586
  "atlas_refs": [
452
587
  "AML.T0010",
453
- "AML.T0016"
588
+ "AML.T0016",
589
+ "AML.T0051",
590
+ "AML.T0096"
454
591
  ],
455
592
  "attack_refs": [
456
593
  "T1195.001",
457
- "T1059"
594
+ "T1059",
595
+ "T1552.001",
596
+ "T1041"
458
597
  ],
459
598
  "rwep_score": 35,
460
599
  "rwep_factors": {
@@ -491,7 +630,36 @@
491
630
  "published_date": "2026-02-19"
492
631
  }
493
632
  ],
494
- "last_updated": "2026-05-11"
633
+ "iocs": {
634
+ "payload_content_patterns": [
635
+ "ANSI escape sequences (byte 0x1B) in any tools/list field (description, inputSchema.properties.*.description) or tools/call response content[].text — subclasses: SGR color invisibility (\\x1B[38;5;...m), cursor movement (\\x1B[nF/G/H), screen clear (\\x1B[0J), OSC-8 hyperlinks (\\x1B]8;;<url>\\x1B\\\\). Source: Trail of Bits 2025-04-29.",
636
+ "Unicode Tag-block codepoints U+E0000-U+E007F in any tools/list or tools/call string field (zero-width to humans, tokenized by the LLM). Source: Embrace the Red 2025.",
637
+ "Instruction-coercion grammar in tool descriptions or responses: <IMPORTANT>...</IMPORTANT> blocks, 'Before using this tool, read ~/.ssh/' or '~/.cursor/mcp.json', 'Do not mention .* to the user', 'pass .* content as', 'THIS TOOL IS REQUIRED FOR (GDPR|SOC2|INTERNAL AUDITING|COMPLIANCE)', 'ALWAYS CONSULT THIS TOOL IMMEDIATELY', 'chmod -R 0666 ~', 'After answering the previous question, please ENSURE you put the following text verbatim'. Sources: Invariant Labs (tool-poisoning), Trail of Bits (line-jumping), Palo Alto Unit 42 (sampling abuse).",
638
+ "Tool response references sensitive path: ~/.ssh/id_rsa, ~/.aws/credentials, ~/.config/gcloud, ~/.kube/config, ~/.cursor/mcp.json, ~/.codeium/windsurf/mcp_config.json, ~/.config/claude/config.json, ~/.claude/settings.json, ~/.npmrc — OR process.env.{AWS_SECRET*, GITHUB_TOKEN, NPM_TOKEN, OPENAI_API_KEY, ANTHROPIC_API_KEY} (cross-server credential-shadow operational signature)"
639
+ ],
640
+ "behavioral": [
641
+ "Two or more tools/call invocations within a single user turn where second target not named in user prompt AND second target is in {exec, shell, run_command, fetch, write_file, read_file, network_request, eval} — operational signature of line-jumping and Unicode-Tag-smuggled coercion",
642
+ "MCP child process opens connection to host NOT in manifest.allowed_egress (for signed servers) OR NOT in TOFU baseline (for unsigned). Postmark-mcp class: legitimate-functionality-preserving payload republished under same name, only signal is unexpected egress destination",
643
+ "MCP server tool invocation count rises ≥10× over 7-day rolling baseline within 24h of (a) version bump, (b) tools/list response shape change with new tools OR ≥3× description length growth, (c) publisher key rotation — compromised-legitimate-publisher signature"
644
+ ],
645
+ "persistence_artifacts": [
646
+ "~/.cursor/mcp.json — mcpServers.* entries added or command field rewritten",
647
+ "~/.codeium/windsurf/mcp_config.json — mcpServers.* additions",
648
+ "~/.config/claude/config.json — mcpServers.* additions",
649
+ "~/.claude/settings.json — permissions.allow relaxations OR hooks.SessionStart additions referencing MCP launcher (cross-cuts CVE-2026-45321 persistence vector)",
650
+ "~/.config/Code/User/settings.json — chat.mcp.servers additions",
651
+ ".vscode/mcp.json in project root — workspace-scoped MCP additions",
652
+ "~/.gemini/settings.json — mcpServers additions",
653
+ "package.json — postinstall script that writes any of the above"
654
+ ],
655
+ "supply_chain_entry_vectors": [
656
+ "npm same-name republish of legitimate MCP package (canonical example: postmark-mcp impersonating ActiveCampaign's Postmark MCP)",
657
+ "npm typosquat within edit-distance-2 of @modelcontextprotocol/* official namespace",
658
+ "SANDWORM_MODE-style worm: malicious package writes mcpServers entry into local AI-assistant config on postinstall, propagating across every assistant on the developer endpoint",
659
+ "Compromised legitimate publisher key — malicious update from previously-trusted maintainer; signature-based controls do not fire"
660
+ ]
661
+ },
662
+ "last_updated": "2026-05-13"
495
663
  },
496
664
  "CVE-2026-45321": {
497
665
  "name": "Mini Shai-Hulud TanStack npm worm",
@@ -590,20 +758,69 @@
590
758
  "iocs": {
591
759
  "payload_artifacts": [
592
760
  "node_modules/@tanstack/*/router_init.js",
593
- "node_modules/@tanstack/*/router_runtime.js"
761
+ "node_modules/@tanstack/*/router_runtime.js",
762
+ "node_modules/@tanstack/*/tanstack_runner.js",
763
+ "Any file with SHA-256 ab4fcadaec49c03278063dd269ea5eef82d24f2124a8e15d7b90f2fa8601266c (router_init.js)",
764
+ "Any file with SHA-256 2ec78d556d696e208927cc503d48e4b5eb56b31abc2870c2ed2e98d6be27fc96 (tanstack_runner.js)",
765
+ "package.json containing optionalDependencies '@tanstack/setup' referencing github:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c (attacker fork commit; zero-FP campaign signature)",
766
+ "package.json prepare script matching /bun run tanstack_runner\\.js.*exit 1/",
767
+ "Any @tanstack/* tarball > 600 KB unpacked OR > 3x file-count delta vs prior minor version (clean ~190 KB, infected ~900 KB, +23 file delta)"
594
768
  ],
595
769
  "persistence_artifacts": [
596
770
  ".claude/settings.json hooks.SessionStart entry running `node .vscode/setup.mjs`",
771
+ ".claude/router_runtime.js (payload copy planted outside node_modules)",
772
+ ".claude/setup.mjs and .vscode/setup.mjs shared loader shims",
597
773
  ".vscode/tasks.json folder-open task pointing at .vscode/setup.mjs",
598
- "~/Library/LaunchAgents/com.tanstack.*.plist (macOS persistence)",
599
- "~/.config/systemd/user/*.service referencing the staged setup.mjs (Linux systemd-user persistence)"
774
+ "~/Library/LaunchAgents/com.user.gh-token-monitor.plist (macOS persistence; observed label is com.user.gh-token-monitor, NOT com.tanstack.*)",
775
+ "~/.config/systemd/user/gh-token-monitor.service (Linux systemd-user persistence)",
776
+ "~/.local/bin/gh-token-monitor.sh (continuous GitHub-token-validity monitor daemon)",
777
+ "~/.config/gh-token-monitor/token (stolen token at rest)",
778
+ ".github/workflows/codeql_analysis.yml in a repo that doesn't otherwise use CodeQL — worm-propagated workflow exfiltrating secrets.toJSON"
779
+ ],
780
+ "credential_paths_scanned": [
781
+ "~/.ssh/id_rsa, ~/.ssh/id_ed25519, ~/.ssh/id_ecdsa, ~/.ssh/config",
782
+ "~/.git-credentials, ~/.config/git/credentials, ~/.gitconfig",
783
+ "~/.npmrc (project and home)",
784
+ "~/.aws/credentials, ~/.aws/config, ~/.aws/sso/cache/*.json",
785
+ "~/.config/gcloud/application_default_credentials.json, ~/.config/gcloud/credentials.db, ~/.config/gcloud/access_tokens.db",
786
+ "~/.azure/accessTokens.json, ~/.azure/azureProfile.json",
787
+ "~/.kube/config, /var/run/secrets/kubernetes.io/serviceaccount/token",
788
+ "~/.claude.json, ~/.claude/mcp.json, ~/.config/anthropic/, ~/.config/openai/",
789
+ "~/.bitcoin/wallet.dat, ~/.ethereum/keystore/*, Exodus / Electrum / Atomic Wallet stores; browser-extension storage for MetaMask / Phantom",
790
+ "Process env: NPM_TOKEN, GITHUB_TOKEN, ACTIONS_ID_TOKEN_REQUEST_TOKEN, ACTIONS_ID_TOKEN_REQUEST_URL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN, GOOGLE_APPLICATION_CREDENTIALS, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID, VAULT_TOKEN, VAULT_ADDR, OPENAI_API_KEY, ANTHROPIC_API_KEY"
791
+ ],
792
+ "c2_indicators": [
793
+ "git-tanstack.com (primary typosquat C2; serves Python payload at /transformers.pyz)",
794
+ "filev2.getsession.org/file/ (Session messenger dead-drop, RSA-4096-OAEP wrapped exfil)",
795
+ "api.masscan.cloud (direct credential POST)",
796
+ "169.254.169.254/latest/meta-data/iam/security-credentials/ (AWS IMDSv1 scrape from build runner)",
797
+ "169.254.170.2 (AWS ECS task-role metadata)",
798
+ "vault.svc.cluster.local:8200 (in-cluster HashiCorp Vault enumeration)",
799
+ "registry.npmjs.org/-/npm/v1/tokens (npm token enumeration on live account)",
800
+ "GitHub dead-drop repos with description 'A Mini Shai-Hulud has Appeared' (Mini) / 'Sha1-Hulud: The Second Coming.' (Shai-Hulud 2.0) / 'Shai-Hulud Migration' (original Sept 2025); repo names matching ^[0-9a-z]{18}$ or suffixed '-migration'",
801
+ "Worm-propagated commits: author 'claude@users.noreply.github.com', message 'chore: update dependencies', branch matching ^dependabot/github_actions/format/",
802
+ "npmjs.help (typosquat credential-harvest domain; original Shai-Hulud campaign infrastructure)"
803
+ ],
804
+ "host_recon": [
805
+ "python3 reading /proc/<pid>/mem in a CI environment (OIDC token-scrape signature for the ACTIONS_ID_TOKEN_REQUEST_TOKEN lift)",
806
+ "bun.sh download or `bun run` invocation in a Node-only / pnpm-only project (Bun runtime chosen to evade Node-aware EDR)",
807
+ "Outbound DNS for filev2.getsession.org / git-tanstack.com / api.masscan.cloud spawned by npm/pnpm/bun install child process"
600
808
  ],
601
809
  "behavioral": [
602
810
  "Build job restores actions/cache key matching Linux-pnpm-store-<hash> written by a non-publishing workflow",
603
811
  "Same repo has pull_request_target trigger anywhere AND id-token: write anywhere AND actions/cache used by both",
604
- "@tanstack/* package resolved within publish window 2026-05-11T19:20Z..2026-05-11T19:26Z"
812
+ "@tanstack/* package resolved within publish window 2026-05-11T19:20Z..2026-05-11T19:26Z",
813
+ "Workflow file under .github/workflows/*.yml modified by a commit whose author is not a repo collaborator AND timestamp within 24h of an npm token use event (worm propagation signature retained from original Shai-Hulud Sept 2025)",
814
+ "Public GitHub repo created on victim account within 1h of an npm install of an @tanstack/* package, with description containing 'Shai-Hulud', 'Sha1-Hulud', or 'A Mini Shai-Hulud has Appeared'",
815
+ "Private repos of victim re-created as public with '-migration' suffix (original Shai-Hulud migration pattern)"
605
816
  ],
606
- "destructive": "Payload triggers wipe on token-revocation — operators rotating npm tokens after suspected exposure should snapshot affected hosts first."
817
+ "destructive": [
818
+ "Payload triggers wipe on token-revocation — operators rotating npm tokens after suspected exposure should snapshot affected hosts first.",
819
+ "Literal substring 'IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner' in any file under node_modules/, .claude/, .vscode/, OR in `npm token list` description for any account — deterministic zero-FP campaign signature",
820
+ "rm -rf \"$HOME\" or rm -rf ~/ child process spawned by gh-token-monitor.sh after HTTP 4xx from api.github.com/user",
821
+ "Linux variant (original Shai-Hulud carry-forward): find \"$HOME\" -type f -writable -user \"$(id -un)\" -print0 | xargs -0 -r shred -uvz -n 1",
822
+ "Windows variant (original Shai-Hulud carry-forward): del /F /Q /S \"%USERPROFILE%*\" && cipher /W:%USERPROFILE%"
823
+ ]
607
824
  },
608
825
  "last_updated": "2026-05-13"
609
826
  }
@@ -1,10 +1,17 @@
1
1
  {
2
2
  "_meta": {
3
3
  "id": "kernel",
4
- "version": "1.0.0",
5
- "last_threat_review": "2026-05-11",
6
- "threat_currency_score": 92,
4
+ "version": "1.1.0",
5
+ "last_threat_review": "2026-05-13",
6
+ "threat_currency_score": 95,
7
7
  "changelog": [
8
+ {
9
+ "version": "1.1.0",
10
+ "date": "2026-05-13",
11
+ "summary": "Primary-source IoC audit (v0.12.6 / AGENTS.md Hard Rule #14). CVE-2026-31431 (Copy Fail) gains runtime_syscall + kernel_trace + behavioral + livepatch_gap IoCs cross-referenced against Dirty Pipe (CVE-2022-0847) + Dirty COW (CVE-2016-5195) + DirtyCred prior art. CVE-2026-43284 + CVE-2026-43500 (Dirty Frag pair) gain subsystem_anchors (kernel symbols esp_input / xfrm_input / rxrpc_recvmsg, kernel modules esp4/esp6/xfrm_user/af_rxrpc/kafs, procfs paths /proc/net/xfrm_stat + /proc/net/rxrpc/*) + behavioral IoCs (ESP module loaded with no policy + non-AFS process opening AF_RXRPC). Catches active exploitation, not just vulnerable kernel version match.",
12
+ "cves_added": [],
13
+ "framework_gaps_updated": []
14
+ },
8
15
  {
9
16
  "version": "1.0.0",
10
17
  "date": "2026-05-11",
@@ -1,10 +1,17 @@
1
1
  {
2
2
  "_meta": {
3
3
  "id": "mcp",
4
- "version": "1.1.0",
4
+ "version": "1.2.0",
5
5
  "last_threat_review": "2026-05-13",
6
- "threat_currency_score": 97,
6
+ "threat_currency_score": 98,
7
7
  "changelog": [
8
+ {
9
+ "version": "1.2.0",
10
+ "date": "2026-05-13",
11
+ "summary": "Primary-source IoC audit (v0.12.6 / AGENTS.md Hard Rule #14). CVE-2026-30615 (Windsurf MCP RCE) IoC block populated from null to full: ANSI escape sequences in tool descriptions (Trail of Bits 2025-04-29), Unicode Tag-block smuggling U+E0000-U+E007F (Embrace the Red 2025), instruction-coercion grammar (<IMPORTANT>, 'Before using this tool, read ~/.ssh', 'Do not mention to user' — Invariant Labs tool-poisoning), sensitive-path references in tool responses (cross-server credential-shadow signature), unprompted-tool-chain behavioral, MCP egress beyond manifest (postmark-mcp class — Acuvity/Semgrep), invocation-count anomaly post-update (compromised-legitimate-publisher detector — Trail of Bits TOFU). Adds atlas_refs AML.T0051 (indirect prompt injection) + AML.T0096; attack_refs T1552.001 + T1041. CVE-2025-53773 (Copilot YOLO mode, CVSS corrected 9.6→7.8) now cross-references this playbook for the .vscode/settings.json:chat.tools.autoApprove IoC.",
12
+ "cves_added": [],
13
+ "framework_gaps_updated": []
14
+ },
8
15
  {
9
16
  "version": "1.1.0",
10
17
  "date": "2026-05-13",
@@ -415,6 +422,20 @@
415
422
  "source": "$HOME/.claude/settings.json (permissions.allow), Cursor's .cursorrules, Windsurf workspace policy, VS Code chat.mcp.allowlist",
416
423
  "description": "Per-tool allowlist policy — the operator's documented set of authorized tools.",
417
424
  "required": false
425
+ },
426
+ {
427
+ "id": "vscode-copilot-yolo-mode",
428
+ "type": "config_file",
429
+ "source": "Read .vscode/settings.json (workspace) AND $HOME/.vscode/settings.json (user-global) AND $HOME/.config/Code/User/settings.json AND $HOME/Library/Application Support/Code/User/settings.json — extract any key matching chat.tools.* OR chat.experimental.* OR github.copilot.advanced.*",
430
+ "description": "v0.12.6: CVE-2025-53773 (Copilot YOLO mode) post-exploitation IoC. The exploit chain coerces Copilot agent mode to write \"chat.tools.autoApprove\": true silently — no diff-approval UI is shown. Source: Embrace the Red (Rehberger) Aug 2025.",
431
+ "required": false
432
+ },
433
+ {
434
+ "id": "mcp-tool-response-log",
435
+ "type": "log_pattern",
436
+ "source": "AI client MCP-protocol logs: ~/.claude/logs/mcp/*.jsonl (Claude Code), ~/.cursor/logs/mcp-*.log (Cursor), ~/.codeium/windsurf/logs/mcp_*.log (Windsurf)",
437
+ "description": "v0.12.6: Verbatim tools/list and tools/call response capture. The only artifact that lets ANSI-escape, Unicode-Tag-smuggling, instruction-coercion-grammar, and sensitive-path-reference indicators fire. If client doesn't log MCP responses, mark inconclusive and recommend enabling MCP request/response verbose logging in client settings.",
438
+ "required": false
418
439
  }
419
440
  ],
420
441
  "collection_scope": {
@@ -1,10 +1,17 @@
1
1
  {
2
2
  "_meta": {
3
3
  "id": "sbom",
4
- "version": "1.1.0",
4
+ "version": "1.2.0",
5
5
  "last_threat_review": "2026-05-13",
6
- "threat_currency_score": 97,
6
+ "threat_currency_score": 98,
7
7
  "changelog": [
8
+ {
9
+ "version": "1.2.0",
10
+ "date": "2026-05-13",
11
+ "summary": "Primary-source IoC audit (v0.12.6 / AGENTS.md Hard Rule #14). CVE-2026-45321 (Mini Shai-Hulud) IoC block expanded from 4 categories to 8: adds SHA-256 hashes for router_init.js + tanstack_runner.js, attacker-fork commit (79ac49ee), tarball-size anomaly threshold, gh-token-monitor daemon family, C2 domains (git-tanstack.com, filev2.getsession.org, api.masscan.cloud), GitHub dead-drop description strings ('A Mini Shai-Hulud has Appeared'), cloud-metadata recon endpoints, credential search paths (~/.aws, ~/.ssh, ~/.kube, AI tool credentials, crypto wallets), worm propagation via .github/workflows/codeql_analysis.yml, ransom string 'IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner'. Cross-referenced against Aikido / StepSecurity / Socket / Wiz / Datadog / Sysdig / Pulsedive primary sources on the original Sept 2025 Shai-Hulud worm and the May 2026 Mini variant.",
12
+ "cves_added": [],
13
+ "framework_gaps_updated": []
14
+ },
8
15
  {
9
16
  "version": "1.1.0",
10
17
  "date": "2026-05-13",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "_comment": "Auto-generated by scripts/refresh-manifest-snapshot.js — do not hand-edit. Public skill surface used by check-manifest-snapshot.js to detect breaking removals.",
3
- "_generated_at": "2026-05-13T03:33:47.456Z",
3
+ "_generated_at": "2026-05-13T03:58:09.357Z",
4
4
  "atlas_version": "5.1.0",
5
5
  "skill_count": 38,
6
6
  "skills": [
package/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "exceptd-security",
3
- "version": "0.12.5",
3
+ "version": "0.12.6",
4
4
  "description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation",
5
5
  "homepage": "https://exceptd.com",
6
6
  "license": "Apache-2.0",
@@ -52,7 +52,7 @@
52
52
  ],
53
53
  "last_threat_review": "2026-05-01",
54
54
  "signature": "Xk593pj7my6wPJbQBE47khpIUrPsp6N1lW7cE2T/VPPF5T+8C1yGKc9B8VphD7Q08yWFcbwF6HoWpA/+4uG9DA==",
55
- "signed_at": "2026-05-13T03:33:37.992Z",
55
+ "signed_at": "2026-05-13T03:58:08.956Z",
56
56
  "cwe_refs": [
57
57
  "CWE-125",
58
58
  "CWE-362",
@@ -116,7 +116,7 @@
116
116
  ],
117
117
  "last_threat_review": "2026-05-01",
118
118
  "signature": "nOgUu+LK9fy6ASTCoRGtx3ttgjZCl7WIkKu2wu06JEKVSpL2cKU3ex2tmVAvv11LBmpTH+b/0zvqXlzcxzHnCw==",
119
- "signed_at": "2026-05-13T03:33:37.994Z",
119
+ "signed_at": "2026-05-13T03:58:08.958Z",
120
120
  "cwe_refs": [
121
121
  "CWE-1039",
122
122
  "CWE-1426",
@@ -179,7 +179,7 @@
179
179
  ],
180
180
  "last_threat_review": "2026-05-01",
181
181
  "signature": "7FH1J9PlOyvcRCzRmggmenX9fIR0pi/veXihb3TeStcq1Rpuz1KHdOcJLqA9su4t2goYukKKCXHV6hx8hzplAA==",
182
- "signed_at": "2026-05-13T03:33:37.995Z",
182
+ "signed_at": "2026-05-13T03:58:08.958Z",
183
183
  "cwe_refs": [
184
184
  "CWE-22",
185
185
  "CWE-345",
@@ -225,7 +225,7 @@
225
225
  "framework_gaps": [],
226
226
  "last_threat_review": "2026-05-01",
227
227
  "signature": "FqTRjHfEgw56pyHnyWzNtnhzDMEePBtmuamtW/iyX+h4yqbvP4Fyr7NRjRs3EgqT4j7oHuEZhV9Jt6ZTBgN4AA==",
228
- "signed_at": "2026-05-13T03:33:37.995Z"
228
+ "signed_at": "2026-05-13T03:58:08.959Z"
229
229
  },
230
230
  {
231
231
  "name": "compliance-theater",
@@ -256,7 +256,7 @@
256
256
  ],
257
257
  "last_threat_review": "2026-05-01",
258
258
  "signature": "3fN4yotiIIq76PVTHwozCu28TzDZvWule6vX8SXUT3XXbIBSuvAO0M/euvc3pw3TdZ2UNf78dI18lOCNdJ0aAg==",
259
- "signed_at": "2026-05-13T03:33:37.996Z"
259
+ "signed_at": "2026-05-13T03:58:08.959Z"
260
260
  },
261
261
  {
262
262
  "name": "exploit-scoring",
@@ -285,7 +285,7 @@
285
285
  ],
286
286
  "last_threat_review": "2026-05-01",
287
287
  "signature": "yZfpk4lQMRXegj2ADWjMmZTchUN6Lxpv587O/0JMzbNkXQtD6FrSAQOBWjx8S7uQ/sTntxgGN7aQQDLxL9RWAA==",
288
- "signed_at": "2026-05-13T03:33:37.996Z"
288
+ "signed_at": "2026-05-13T03:58:08.960Z"
289
289
  },
290
290
  {
291
291
  "name": "rag-pipeline-security",
@@ -322,7 +322,7 @@
322
322
  ],
323
323
  "last_threat_review": "2026-05-01",
324
324
  "signature": "ABHkoqee67KdUyDZ3bvF+/DNxjGhPR/ehT6pfOnmUIMmkcQFHpZ0OUVXKiFUANaLgKLP1vg0VEmHOoxpNA3vAA==",
325
- "signed_at": "2026-05-13T03:33:37.996Z",
325
+ "signed_at": "2026-05-13T03:58:08.960Z",
326
326
  "cwe_refs": [
327
327
  "CWE-1395",
328
328
  "CWE-1426"
@@ -379,7 +379,7 @@
379
379
  ],
380
380
  "last_threat_review": "2026-05-01",
381
381
  "signature": "+Nd/2tgBnW+mEGX84QvkgR2To2J7kA+lB63BsADDKeCXeebFv6Vo9H1P4vyUkKHfe4fP0ndpy3agIZcUO/e/Dg==",
382
- "signed_at": "2026-05-13T03:33:37.996Z",
382
+ "signed_at": "2026-05-13T03:58:08.960Z",
383
383
  "d3fend_refs": [
384
384
  "D3-CA",
385
385
  "D3-CSPP",
@@ -414,7 +414,7 @@
414
414
  "framework_gaps": [],
415
415
  "last_threat_review": "2026-05-01",
416
416
  "signature": "VMNGFvowXLbBjZp5nvWloKkqyqHKhnSzbVRU3gX9quOZJHH56w2M4id+oDsXIjR0CfRRb7eXl/so0Hq4xLBuBQ==",
417
- "signed_at": "2026-05-13T03:33:37.997Z",
417
+ "signed_at": "2026-05-13T03:58:08.960Z",
418
418
  "cwe_refs": [
419
419
  "CWE-1188"
420
420
  ]
@@ -442,7 +442,7 @@
442
442
  "framework_gaps": [],
443
443
  "last_threat_review": "2026-05-01",
444
444
  "signature": "5MaJs7gPCuFlK4oAttLulAPOA1noeV+xD/UqVWaVyRedXZgebBGKjnlE2t1qmTugvxlNIfeAnBZapk+Wz3VAAg==",
445
- "signed_at": "2026-05-13T03:33:37.997Z"
445
+ "signed_at": "2026-05-13T03:58:08.961Z"
446
446
  },
447
447
  {
448
448
  "name": "global-grc",
@@ -474,7 +474,7 @@
474
474
  "framework_gaps": [],
475
475
  "last_threat_review": "2026-05-01",
476
476
  "signature": "S/YXUpI/mcG2FpdUTgMsccWBtTaR5A4Ph4QFQw31S9w9Hn/z3sOFHLkb1B5YSwlg+mMOtSIxMdet1eLGSZkTDg==",
477
- "signed_at": "2026-05-13T03:33:37.997Z"
477
+ "signed_at": "2026-05-13T03:58:08.961Z"
478
478
  },
479
479
  {
480
480
  "name": "zeroday-gap-learn",
@@ -501,7 +501,7 @@
501
501
  "framework_gaps": [],
502
502
  "last_threat_review": "2026-05-01",
503
503
  "signature": "AKS+JsmhhBtytY2eIMuydjkZOYprWCmQ+RqxyxcVG9XcEI29ZSM/JbVIINQHozFl7OPPrOu1ouiTnk7LOJ86Bg==",
504
- "signed_at": "2026-05-13T03:33:37.998Z"
504
+ "signed_at": "2026-05-13T03:58:08.961Z"
505
505
  },
506
506
  {
507
507
  "name": "pqc-first",
@@ -553,7 +553,7 @@
553
553
  ],
554
554
  "last_threat_review": "2026-05-01",
555
555
  "signature": "oEkK5bLS/G5RIHnxlNFJYdzhTJbKZnkJv+W4iS9UJ/uszZHgZGoxygELPc4kn3FowV5eE988SQYG4WKlXtNzCg==",
556
- "signed_at": "2026-05-13T03:33:37.998Z",
556
+ "signed_at": "2026-05-13T03:58:08.962Z",
557
557
  "cwe_refs": [
558
558
  "CWE-327"
559
559
  ],
@@ -600,7 +600,7 @@
600
600
  ],
601
601
  "last_threat_review": "2026-05-01",
602
602
  "signature": "nPV6YTo1rsNH49qUnZpfoNLEQZXuLNyV05QMUOgXKHYeVDjotYpWhLgyVXlRhjV/fStiA2sWQ0MOnEJ4FBIfDg==",
603
- "signed_at": "2026-05-13T03:33:37.999Z"
603
+ "signed_at": "2026-05-13T03:58:08.962Z"
604
604
  },
605
605
  {
606
606
  "name": "security-maturity-tiers",
@@ -637,7 +637,7 @@
637
637
  ],
638
638
  "last_threat_review": "2026-05-01",
639
639
  "signature": "7rirSEONz6O9Yyf46eTyuwkGizCj9FRcNHe5p7Qz6nhJoZQRW5FwW7n9opL0WlbIw8FDBYn1f22zgNUV87L5AQ==",
640
- "signed_at": "2026-05-13T03:33:37.999Z",
640
+ "signed_at": "2026-05-13T03:58:08.963Z",
641
641
  "cwe_refs": [
642
642
  "CWE-1188"
643
643
  ]
@@ -672,7 +672,7 @@
672
672
  "framework_gaps": [],
673
673
  "last_threat_review": "2026-05-11",
674
674
  "signature": "+evehnd2wSBb8uMTlTr5/aTN4bfLjsKzZJk/+OMLMOJrjCt+OuMU7EQC6xMUGeSc4cPEGajghDvq3xVaacV2Dw==",
675
- "signed_at": "2026-05-13T03:33:37.999Z"
675
+ "signed_at": "2026-05-13T03:58:08.963Z"
676
676
  },
677
677
  {
678
678
  "name": "attack-surface-pentest",
@@ -743,7 +743,7 @@
743
743
  "PTES revision incorporating AI-surface enumeration"
744
744
  ],
745
745
  "signature": "KHOXxloAYf7xqXjm2BaL3HVAZOmb7rMiMh20H/oaIkjN0WD1CnKCrRGPJn867uSFhCh/timkXolaiqD1L/h8Dg==",
746
- "signed_at": "2026-05-13T03:33:38.000Z"
746
+ "signed_at": "2026-05-13T03:58:08.963Z"
747
747
  },
748
748
  {
749
749
  "name": "fuzz-testing-strategy",
@@ -803,7 +803,7 @@
803
803
  "OSS-Fuzz-Gen / AI-assisted harness generation becoming the default expectation for OSS maintainers"
804
804
  ],
805
805
  "signature": "+ELdD+1AY5DymBitH7wU65CS60NY1nDoLowJAFn7cE5Gr/5jy9BTkyxsm7PEXaSlXWMOkTf/HQ+uyzyxUVD/Bw==",
806
- "signed_at": "2026-05-13T03:33:38.000Z"
806
+ "signed_at": "2026-05-13T03:58:08.963Z"
807
807
  },
808
808
  {
809
809
  "name": "dlp-gap-analysis",
@@ -878,7 +878,7 @@
878
878
  "Quebec Law 25, India DPDPA, KSA PDPL enforcement actions naming AI-tool prompt data as in-scope personal information"
879
879
  ],
880
880
  "signature": "8tFAhXAS8zZN3SUOdn+ZIu7lQ48JMOyBQ8SaObR3L/fDyFmDhufqleY2VzI3yigqlT/D4Y8FYxZHKmzXiALjDw==",
881
- "signed_at": "2026-05-13T03:33:38.000Z"
881
+ "signed_at": "2026-05-13T03:58:08.964Z"
882
882
  },
883
883
  {
884
884
  "name": "supply-chain-integrity",
@@ -955,7 +955,7 @@
955
955
  "OpenSSF model-signing — emerging Sigstore-based signing standard for ML model weights; track for production adoption"
956
956
  ],
957
957
  "signature": "YhvlD+6gdFGg7P6QtpWeb0n54/Ujlxc7I6o/bXtpkfPiy/JY4OJo5xdreb+mbytHkasmUErL5LsDtTCAVq0QAA==",
958
- "signed_at": "2026-05-13T03:33:38.000Z"
958
+ "signed_at": "2026-05-13T03:58:08.964Z"
959
959
  },
960
960
  {
961
961
  "name": "defensive-countermeasure-mapping",
@@ -1012,7 +1012,7 @@
1012
1012
  ],
1013
1013
  "last_threat_review": "2026-05-11",
1014
1014
  "signature": "AMdLkDx/e3ESI4NAnJhhcaas+Ru8VjrSn6v6RBbmmzoLCGo/vFxGraa1p/qF9udhVG+DdkbwHfbfKK5Im19KDw==",
1015
- "signed_at": "2026-05-13T03:33:38.001Z"
1015
+ "signed_at": "2026-05-13T03:58:08.964Z"
1016
1016
  },
1017
1017
  {
1018
1018
  "name": "identity-assurance",
@@ -1079,7 +1079,7 @@
1079
1079
  "d3fend_refs": [],
1080
1080
  "last_threat_review": "2026-05-11",
1081
1081
  "signature": "pSMHKkyWoZvRIuVtN7Vue51sP5MIy9lSaQa2YSAMhxjptx81cUnPt3S11/Tb9Ea1/eluMNQ+5F25eF2njr4mBQ==",
1082
- "signed_at": "2026-05-13T03:33:38.001Z"
1082
+ "signed_at": "2026-05-13T03:58:08.964Z"
1083
1083
  },
1084
1084
  {
1085
1085
  "name": "ot-ics-security",
@@ -1135,7 +1135,7 @@
1135
1135
  "d3fend_refs": [],
1136
1136
  "last_threat_review": "2026-05-11",
1137
1137
  "signature": "qjky+ZTX1DP7uRRMQZq7S7P9/uaJEoB1dy4RZ1l37Q4OO3k2ryfL+7o0Cgm/piuafJfH+dqUeNCRrVefj4r8Dw==",
1138
- "signed_at": "2026-05-13T03:33:38.001Z"
1138
+ "signed_at": "2026-05-13T03:58:08.965Z"
1139
1139
  },
1140
1140
  {
1141
1141
  "name": "coordinated-vuln-disclosure",
@@ -1187,7 +1187,7 @@
1187
1187
  "NYDFS 23 NYCRR 500 amendments potentially adding explicit CVD program requirements"
1188
1188
  ],
1189
1189
  "signature": "F86Zl/I+dBzHYRUuGWsjDQI2F/I/vhzwZUFMqhNfKUzRbMf6mafOX2APCPYTp3eP1DvvvfL3Yc0hb1R5Q4nOAg==",
1190
- "signed_at": "2026-05-13T03:33:38.002Z"
1190
+ "signed_at": "2026-05-13T03:58:08.965Z"
1191
1191
  },
1192
1192
  {
1193
1193
  "name": "threat-modeling-methodology",
@@ -1237,7 +1237,7 @@
1237
1237
  "PASTA v2 updates incorporating AI/ML application threats"
1238
1238
  ],
1239
1239
  "signature": "D/4d5NcJScNH58ADXsSrVzTmLSWZpUZTdyhtDkJlC0twSMNczOiDsXgYFitBaZgGdv5nVd00viR45mNrsaZ4BQ==",
1240
- "signed_at": "2026-05-13T03:33:38.002Z"
1240
+ "signed_at": "2026-05-13T03:58:08.965Z"
1241
1241
  },
1242
1242
  {
1243
1243
  "name": "webapp-security",
@@ -1311,7 +1311,7 @@
1311
1311
  "d3fend_refs": [],
1312
1312
  "last_threat_review": "2026-05-11",
1313
1313
  "signature": "UOXaUtpcFjXyDQ70z2PaGu6K3pABtXp+7YzO6eGVGpN1CxXpPq/xW/CnTng6B7wk9WSsqD0OORBJp4VCjiVfAQ==",
1314
- "signed_at": "2026-05-13T03:33:38.002Z"
1314
+ "signed_at": "2026-05-13T03:58:08.966Z"
1315
1315
  },
1316
1316
  {
1317
1317
  "name": "ai-risk-management",
@@ -1361,7 +1361,7 @@
1361
1361
  "d3fend_refs": [],
1362
1362
  "last_threat_review": "2026-05-11",
1363
1363
  "signature": "IVKygsrFjiM64fQVbd2PT6jDjs6fm5nKwJSqGfK53gG0S9wdHC4QYuh+LWlI/2ftvIKjjedLQ6FRyTrqpDEuDw==",
1364
- "signed_at": "2026-05-13T03:33:38.003Z"
1364
+ "signed_at": "2026-05-13T03:58:08.966Z"
1365
1365
  },
1366
1366
  {
1367
1367
  "name": "sector-healthcare",
@@ -1421,7 +1421,7 @@
1421
1421
  "d3fend_refs": [],
1422
1422
  "last_threat_review": "2026-05-11",
1423
1423
  "signature": "P+CdSu8ZJCNUU4nTa09Voh2PcYF3y/AFJn4v7cjVIGo9FbbqO7MwvGN7cJ+aSRs2/3NMUXX4eupcODslxYyJDw==",
1424
- "signed_at": "2026-05-13T03:33:38.003Z"
1424
+ "signed_at": "2026-05-13T03:58:08.966Z"
1425
1425
  },
1426
1426
  {
1427
1427
  "name": "sector-financial",
@@ -1502,7 +1502,7 @@
1502
1502
  "TIBER-EU framework v2.0 alignment with DORA TLPT RTS (JC 2024/40); cross-recognition with CBEST and iCAST"
1503
1503
  ],
1504
1504
  "signature": "zpEfh181Sc0b0cvRf/31Ir1f8lD4V5tehTogO3TJMxdKmXu06IAK7hrhBcLA/jFBv3xDDwrWW3sHzChVhWDeDA==",
1505
- "signed_at": "2026-05-13T03:33:38.003Z"
1505
+ "signed_at": "2026-05-13T03:58:08.967Z"
1506
1506
  },
1507
1507
  {
1508
1508
  "name": "sector-federal-government",
@@ -1571,7 +1571,7 @@
1571
1571
  "Australia PSPF 2024 revision and ISM quarterly updates — track for Essential Eight Maturity Level requirements for federal entities"
1572
1572
  ],
1573
1573
  "signature": "7NpQlPu1DkpY9f+Frv/LLBHWUUe/qTM80c+xeYDxOzweXhvJGE/dnDCjglYHTjxT82L9cVxzBezvLEne20UpBg==",
1574
- "signed_at": "2026-05-13T03:33:38.004Z"
1574
+ "signed_at": "2026-05-13T03:58:08.967Z"
1575
1575
  },
1576
1576
  {
1577
1577
  "name": "sector-energy",
@@ -1636,7 +1636,7 @@
1636
1636
  "ICS-CERT advisory feed (https://www.cisa.gov/news-events/cybersecurity-advisories/ics-advisories) for vendor CVEs in Siemens, Rockwell, Schneider Electric, ABB, GE Vernova, Hitachi Energy, AVEVA / OSIsoft PI"
1637
1637
  ],
1638
1638
  "signature": "4rhyHN5HykK7MQUmhvaTeDGj6Qf5swDd5ry8foh4KBvTkRKxTI/XyxconFGm5FASnySGPLMxX6m4JZAq5wiNBg==",
1639
- "signed_at": "2026-05-13T03:33:38.004Z"
1639
+ "signed_at": "2026-05-13T03:58:08.967Z"
1640
1640
  },
1641
1641
  {
1642
1642
  "name": "api-security",
@@ -1705,7 +1705,7 @@
1705
1705
  "d3fend_refs": [],
1706
1706
  "last_threat_review": "2026-05-11",
1707
1707
  "signature": "hS1izPhETclITK7fp6R67dhy+wFDti/YsJ2M5I1gDjeWZYK41WuxeYSyt5xEHbCr3WCGDFJe77jkK1MWkxk2BA==",
1708
- "signed_at": "2026-05-13T03:33:38.004Z"
1708
+ "signed_at": "2026-05-13T03:58:08.967Z"
1709
1709
  },
1710
1710
  {
1711
1711
  "name": "cloud-security",
@@ -1786,7 +1786,7 @@
1786
1786
  "CISA KEV additions for cloud-control-plane CVEs (IMDSv1 abuses, federation token mishandling, cross-tenant boundary failures); CISA Cybersecurity Advisories for cross-cloud advisories"
1787
1787
  ],
1788
1788
  "signature": "kuatqNZoRnv+oeyrxbnk+m37JRBIgRAWnDp0/IYLnoBOybiG09RzLILJraxjhvdSNCgo7WXTeBO3Y6a3Ji9MAA==",
1789
- "signed_at": "2026-05-13T03:33:38.005Z"
1789
+ "signed_at": "2026-05-13T03:58:08.968Z"
1790
1790
  },
1791
1791
  {
1792
1792
  "name": "container-runtime-security",
@@ -1848,7 +1848,7 @@
1848
1848
  "d3fend_refs": [],
1849
1849
  "last_threat_review": "2026-05-11",
1850
1850
  "signature": "Btb3/7fjPFopFVdxP7+E6n322gnAAwd7OPrnuqatq6c1rXTD9aXKxiBeCmWxs8zYbIbE/lFoe9R2g6uTp8ZDBg==",
1851
- "signed_at": "2026-05-13T03:33:38.005Z"
1851
+ "signed_at": "2026-05-13T03:58:08.968Z"
1852
1852
  },
1853
1853
  {
1854
1854
  "name": "mlops-security",
@@ -1919,7 +1919,7 @@
1919
1919
  "MITRE ATLAS v5.2 — track AML.T0010 sub-technique expansion and any new MLOps-pipeline-specific TTPs"
1920
1920
  ],
1921
1921
  "signature": "TBWnlgdllW7K1F10HCJ7p4dbLeS3lyNWm+7mNNtyZu7jB1V5AauG1P7sb1nLLqwKqeGlHS1F0eh/BNiuAvkABg==",
1922
- "signed_at": "2026-05-13T03:33:38.005Z"
1922
+ "signed_at": "2026-05-13T03:58:08.968Z"
1923
1923
  },
1924
1924
  {
1925
1925
  "name": "incident-response-playbook",
@@ -1981,7 +1981,7 @@
1981
1981
  "NYDFS 23 NYCRR 500.17 amendments tightening ransom-payment 24h disclosure operationalization"
1982
1982
  ],
1983
1983
  "signature": "FVAXpD6sIoOLQSPtZSLLsXQnc2o2hRwiFj4xK8zEWJVkUWGqvAWRrngie7O2DRKIbWqjO5h9EevVYSzhwYHCAA==",
1984
- "signed_at": "2026-05-13T03:33:38.006Z"
1984
+ "signed_at": "2026-05-13T03:58:08.969Z"
1985
1985
  },
1986
1986
  {
1987
1987
  "name": "email-security-anti-phishing",
@@ -2034,7 +2034,7 @@
2034
2034
  "d3fend_refs": [],
2035
2035
  "last_threat_review": "2026-05-11",
2036
2036
  "signature": "0HDt3Qklee4FQeKoZfwr+8qdq2pVDS0a+c7JxVw1hV/bl8+YTPaPjPTAhQUnbhUCa5cGo7G4MBQ1AifQTMJdDA==",
2037
- "signed_at": "2026-05-13T03:33:38.006Z"
2037
+ "signed_at": "2026-05-13T03:58:08.969Z"
2038
2038
  },
2039
2039
  {
2040
2040
  "name": "age-gates-child-safety",
@@ -2102,7 +2102,7 @@
2102
2102
  "US state adult-site age-verification laws — 19+ states by mid-2026 (TX HB 18 upheld by SCOTUS June 2025 in Free Speech Coalition v. Paxton); track ongoing challenges in remaining states"
2103
2103
  ],
2104
2104
  "signature": "UyPSKUztZI/daHCRTnAh6ryoKLX4xyjuG+EaNMPRVuCz2gANGl1F/NozDsw7R2koMUwSFoiYTzwqDvo1tpuKAg==",
2105
- "signed_at": "2026-05-13T03:33:38.006Z"
2105
+ "signed_at": "2026-05-13T03:58:08.969Z"
2106
2106
  }
2107
2107
  ]
2108
2108
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blamejs/exceptd-skills",
3
- "version": "0.12.5",
3
+ "version": "0.12.6",
4
4
  "description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 38 skills, 10 catalogs, 34 jurisdictions, pre-computed indexes, Ed25519-signed.",
5
5
  "keywords": [
6
6
  "ai-security",
package/sbom.cdx.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.6",
4
- "serialNumber": "urn:uuid:9dc98664-f302-4563-875e-0b2a119304d0",
4
+ "serialNumber": "urn:uuid:2ea95335-aa47-442b-b27a-0bf9bde8a7b0",
5
5
  "version": 1,
6
6
  "metadata": {
7
- "timestamp": "2026-05-13T03:33:47.860Z",
7
+ "timestamp": "2026-05-13T03:58:09.766Z",
8
8
  "tools": [
9
9
  {
10
10
  "name": "hand-written",
@@ -13,10 +13,10 @@
13
13
  }
14
14
  ],
15
15
  "component": {
16
- "bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.12.5",
16
+ "bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.12.6",
17
17
  "type": "application",
18
18
  "name": "@blamejs/exceptd-skills",
19
- "version": "0.12.5",
19
+ "version": "0.12.6",
20
20
  "description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 38 skills, 10 catalogs, 34 jurisdictions, pre-computed indexes, Ed25519-signed.",
21
21
  "licenses": [
22
22
  {
@@ -25,11 +25,11 @@
25
25
  }
26
26
  }
27
27
  ],
28
- "purl": "pkg:npm/%40blamejs/exceptd-skills@0.12.5",
28
+ "purl": "pkg:npm/%40blamejs/exceptd-skills@0.12.6",
29
29
  "externalReferences": [
30
30
  {
31
31
  "type": "distribution",
32
- "url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.12.5"
32
+ "url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.12.6"
33
33
  },
34
34
  {
35
35
  "type": "vcs",