@blamejs/exceptd-skills 0.12.27 → 0.12.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/AGENTS.md +4 -1
  2. package/CHANGELOG.md +54 -0
  3. package/bin/exceptd.js +30 -20
  4. package/data/_indexes/_meta.json +26 -23
  5. package/data/_indexes/activity-feed.json +32 -11
  6. package/data/_indexes/catalog-summaries.json +3 -3
  7. package/data/_indexes/chains.json +965 -35
  8. package/data/_indexes/currency.json +68 -41
  9. package/data/_indexes/frequency.json +428 -124
  10. package/data/_indexes/handoff-dag.json +70 -19
  11. package/data/_indexes/jurisdiction-map.json +37 -12
  12. package/data/_indexes/section-offsets.json +282 -0
  13. package/data/_indexes/stale-content.json +3 -3
  14. package/data/_indexes/summary-cards.json +198 -0
  15. package/data/_indexes/token-budget.json +168 -3
  16. package/data/_indexes/trigger-table.json +190 -0
  17. package/data/_indexes/xref.json +145 -2
  18. package/data/atlas-ttps.json +61 -111
  19. package/data/attack-techniques.json +104 -19
  20. package/data/cve-catalog.json +101 -45
  21. package/data/cwe-catalog.json +149 -94
  22. package/data/d3fend-catalog.json +199 -53
  23. package/data/framework-control-gaps.json +1679 -89
  24. package/data/playbooks/cloud-iam-incident.json +1351 -0
  25. package/data/playbooks/crypto-codebase.json +1 -1
  26. package/data/playbooks/idp-incident.json +1259 -0
  27. package/data/playbooks/ransomware.json +1407 -0
  28. package/data/rfc-references.json +58 -59
  29. package/lib/exit-codes.js +2 -0
  30. package/lib/playbook-runner.js +25 -1
  31. package/manifest-snapshot.json +220 -3
  32. package/manifest-snapshot.sha256 +1 -1
  33. package/manifest.json +287 -45
  34. package/package.json +3 -2
  35. package/sbom.cdx.json +1854 -11
  36. package/scripts/backfill-theater-test.js +806 -0
  37. package/scripts/refresh-reverse-refs.js +171 -0
  38. package/scripts/refresh-sbom.js +155 -8
  39. package/skills/cloud-iam-incident/skill.md +419 -0
  40. package/skills/idp-incident-response/skill.md +352 -0
  41. package/skills/ransomware-response/skill.md +374 -0
@@ -59,9 +59,7 @@
59
59
  "published": "2011-09",
60
60
  "tracker": "https://www.rfc-editor.org/info/rfc6376",
61
61
  "relevance": "Cryptographic signing of email by the originating domain. DMARC verification relies on either SPF or DKIM aligning with the From-header domain. Operationally, DKIM is the load-bearing half of DMARC — SPF breaks on legitimate forwarding paths; DKIM survives them. Key-length lag is the recurring framework gap: many deployments still use 1024-bit RSA keys despite IETF guidance to rotate to ≥2048-bit.",
62
- "skills_referencing": [
63
- "email-security-anti-phishing"
64
- ],
62
+ "skills_referencing": [],
65
63
  "last_verified": "2026-05-13"
66
64
  },
67
65
  "RFC-6545": {
@@ -71,9 +69,7 @@
71
69
  "published": "2012-04",
72
70
  "tracker": "https://www.rfc-editor.org/info/rfc6545",
73
71
  "relevance": "Defines the RID schema for exchanging incident-response data between organizations and CSIRTs. Operator-facing relevance is via the IODEF (RFC 7970) payload that RID transports — the pair is the IETF-standardized cross-organizational incident-coordination protocol. Adoption lags; in practice many SOCs use ad-hoc CSV/JSON exchanges instead, leaving compliance with 'documented coordination channel' requirements weakly evidenced.",
74
- "skills_referencing": [
75
- "incident-response-playbook"
76
- ],
72
+ "skills_referencing": [],
77
73
  "last_verified": "2026-05-13"
78
74
  },
79
75
  "RFC-6546": {
@@ -83,9 +79,7 @@
83
79
  "published": "2012-04",
84
80
  "tracker": "https://www.rfc-editor.org/info/rfc6546",
85
81
  "relevance": "Specifies the HTTP-over-TLS transport for RID (RFC 6545) messages. Operator-facing: provides the wire-level protocol for IODEF/RID message exchange when an organization commits to standardized incident-data coordination. Pair this with RFC 6545 (schema) and RFC 7970 (IODEF v2 payload).",
86
- "skills_referencing": [
87
- "incident-response-playbook"
88
- ],
82
+ "skills_referencing": [],
89
83
  "last_verified": "2026-05-13"
90
84
  },
91
85
  "RFC-6749": {
@@ -110,9 +104,7 @@
110
104
  "published": "2014-04",
111
105
  "tracker": "https://www.rfc-editor.org/info/rfc7208",
112
106
  "relevance": "Authorizes which IPs may send mail on behalf of a domain. DMARC's path-based authentication half. Limits: a strict 10-DNS-lookup ceiling that operators routinely blow past through nested includes, leading to permerror DMARC outcomes; SPF breaks across legitimate forwarders, which is why DKIM (RFC 6376) is the load-bearing half operationally.",
113
- "skills_referencing": [
114
- "email-security-anti-phishing"
115
- ],
107
+ "skills_referencing": [],
116
108
  "last_verified": "2026-05-13"
117
109
  },
118
110
  "RFC-7296": {
@@ -136,9 +128,7 @@
136
128
  "published": "2015-03",
137
129
  "tracker": "https://www.rfc-editor.org/info/rfc7489",
138
130
  "relevance": "Defines DMARC — the email-authentication policy framework that binds SPF + DKIM results to a published domain-owner policy. Operator-facing email security depends on a published DMARC record with `p=reject` or `p=quarantine`; relaxed policies (`p=none`) are equivalent to no DMARC for spoofing-defense purposes. Cited alongside DKIM (RFC 6376) and SPF (RFC 7208) as the authoritative tri-RFC for anti-spoofing posture.",
139
- "skills_referencing": [
140
- "email-security-anti-phishing"
141
- ],
131
+ "skills_referencing": [],
142
132
  "last_verified": "2026-05-13"
143
133
  },
144
134
  "RFC-7519": {
@@ -152,8 +142,10 @@
152
142
  "lag_notes": "RFC 7519 is the spec; RFC 8725 (Best Current Practices) is what implementations should follow. Many MCP servers still hand-roll JWT validation and miss BCP 225 guidance.",
153
143
  "skills_referencing": [
154
144
  "api-security",
145
+ "cloud-iam-incident",
155
146
  "cloud-security",
156
147
  "identity-assurance",
148
+ "idp-incident-response",
157
149
  "mcp-agent-trust",
158
150
  "sector-financial",
159
151
  "sector-healthcare",
@@ -168,10 +160,7 @@
168
160
  "published": "2015-09",
169
161
  "tracker": "https://www.rfc-editor.org/info/rfc7644",
170
162
  "relevance": "SCIM 2.0 is the dominant standard for federated identity-store synchronisation between IdPs and downstream applications (Okta, Entra ID, Workday → SaaS). Operator-facing: SCIM endpoints are a recurring credential-store soft target — bearer-token misconfigurations expose full directory enumeration + write access. AI-agent contexts add a new class: agent-identity provisioning at scale via SCIM, where over-broad attribute filters expose human identity data to agent-tenants. Pair with RFC 7643 (SCIM Schema) when implementing.",
171
- "skills_referencing": [
172
- "identity-assurance",
173
- "cred-stores"
174
- ],
163
+ "skills_referencing": [],
175
164
  "last_verified": "2026-05-15"
176
165
  },
177
166
  "RFC-7970": {
@@ -181,9 +170,7 @@
181
170
  "published": "2016-11",
182
171
  "tracker": "https://www.rfc-editor.org/info/rfc7970",
183
172
  "relevance": "IODEF v2 — the structured-incident payload format carried by RID. Operator-facing: IODEF v2 is the canonical machine-readable incident record. Use cases include cross-CSIRT coordination, regulator submissions where structured data is requested, and SIEM-to-SIEM federation. Adoption is sector-uneven; healthcare and financial sectors have stronger uptake than general industry.",
184
- "skills_referencing": [
185
- "incident-response-playbook"
186
- ],
173
+ "skills_referencing": [],
187
174
  "last_verified": "2026-05-13"
188
175
  },
189
176
  "RFC-8032": {
@@ -237,9 +224,7 @@
237
224
  "published": "2018-09",
238
225
  "tracker": "https://www.rfc-editor.org/info/rfc8460",
239
226
  "relevance": "Defines a DNS-published TLSRPT policy and an aggregate-reporting mechanism (RUA endpoint) where receiving MTAs report success / failure of inbound TLS negotiation. Operator-facing: TLSRPT is the monitoring half of the MTA-STS pair (RFC 8461) — without it, an MTA-STS `enforce` policy silently degrades when downgrade attempts occur or receiver-side TLS configurations break. Phishing-defense relevance is indirect but load-bearing: visibility into STARTTLS-stripping attempts is otherwise absent.",
240
- "skills_referencing": [
241
- "email-security-anti-phishing"
242
- ],
227
+ "skills_referencing": [],
243
228
  "last_verified": "2026-05-15"
244
229
  },
245
230
  "RFC-8461": {
@@ -249,9 +234,7 @@
249
234
  "published": "2018-09",
250
235
  "tracker": "https://www.rfc-editor.org/info/rfc8461",
251
236
  "relevance": "Forces TLS on inbound SMTP between MTAs that publish a `_mta-sts` policy. Closes the historical 'opportunistic-TLS-downgrade' attack window where a network-positioned attacker stripped the STARTTLS handshake. Operator-facing: an MTA-STS policy in `enforce` mode plus monitoring via TLSRPT (RFC 8460) is the baseline for inbound email confidentiality. Phishing-defense relevance is indirect — STARTTLS stripping enables session-layer manipulation that downstream defenses (DMARC, content classifiers) cannot recover from.",
252
- "skills_referencing": [
253
- "email-security-anti-phishing"
254
- ],
237
+ "skills_referencing": [],
255
238
  "last_verified": "2026-05-13"
256
239
  },
257
240
  "RFC-8616": {
@@ -261,9 +244,7 @@
261
244
  "published": "2019-06",
262
245
  "tracker": "https://www.rfc-editor.org/info/rfc8616",
263
246
  "relevance": "Updates DKIM / SPF / DMARC handling for internationalized domain names (IDN) and internationalized email-address local parts. Operator-facing: phishing campaigns increasingly leverage IDN homoglyphs (e.g. Cyrillic `а` for Latin `a`), and a DMARC implementation that doesn't honor RFC 8616 normalization rules can fail to align IDN-bearing From-headers correctly. Treat as a compatibility prerequisite for any anti-spoofing posture covering global mail flows.",
264
- "skills_referencing": [
265
- "email-security-anti-phishing"
266
- ],
247
+ "skills_referencing": [],
267
248
  "last_verified": "2026-05-13"
268
249
  },
269
250
  "RFC-8617": {
@@ -273,10 +254,7 @@
273
254
  "published": "2019-07",
274
255
  "tracker": "https://www.rfc-editor.org/info/rfc8617",
275
256
  "relevance": "ARC preserves authentication results across legitimate forwarding paths (mailing lists, alias services) where SPF + DKIM alignment would otherwise break, producing false DMARC failures. Operator-facing: ARC is the load-bearing complement to DMARC for organisations that receive mail via forwarders — anti-phishing programs that publish `p=reject` without an ARC strategy face increased false-positive bounce rates that pressure operators to relax DMARC. The skill-update-loop tracks ARC adoption signals as a forward-watch indicator for email-authentication posture changes.",
276
- "skills_referencing": [
277
- "email-security-anti-phishing",
278
- "skill-update-loop"
279
- ],
257
+ "skills_referencing": [],
280
258
  "last_verified": "2026-05-15"
281
259
  },
282
260
  "RFC-8705": {
@@ -286,9 +264,7 @@
286
264
  "published": "2020-02",
287
265
  "tracker": "https://www.rfc-editor.org/info/rfc8705",
288
266
  "relevance": "Defines two mechanisms: mTLS client authentication to OAuth authorisation servers, and certificate-bound access tokens that prevent token theft from being exploitable without the original mTLS client certificate. Operator-facing: mTLS-bound tokens are the canonical mitigation for bearer-token theft in high-assurance contexts (open-banking under PSD2 / UK FCA SCA-RTS, FAPI 2.0, government SSO). DPoP (RFC 9449) is the lighter-weight alternative for browser / mobile contexts where client TLS certificates are impractical.",
289
- "skills_referencing": [
290
- "identity-assurance"
291
- ],
267
+ "skills_referencing": [],
292
268
  "last_verified": "2026-05-15"
293
269
  },
294
270
  "RFC-8725": {
@@ -301,8 +277,10 @@
301
277
  "relevance": "BCP 225. Required reading for any MCP / agent / AI-API auth implementation. Covers algorithm-confusion attacks, kid traversal, audience pinning. mcp-agent-trust uses this as the JWT-handling baseline.",
302
278
  "skills_referencing": [
303
279
  "api-security",
280
+ "cloud-iam-incident",
304
281
  "cloud-security",
305
282
  "identity-assurance",
283
+ "idp-incident-response",
306
284
  "mcp-agent-trust",
307
285
  "sector-financial",
308
286
  "webapp-security"
@@ -344,11 +322,7 @@
344
322
  "tracker": "https://www.rfc-editor.org/info/rfc9112",
345
323
  "relevance": "The current authoritative HTTP/1.1 specification, supersedes RFC 7230. Operator-facing: every HTTP/1.1 deployment — including MCP server transports, AI-API client libraries, and legacy webapp middle-tiers — should reference RFC 9112 rather than the older RFC 7230. Re-specification clarified request/response framing in ways that affect smuggling-class attack surfaces (CL.TE / TE.CL / CL.CL desync) which remain the dominant HTTP/1.1 vulnerability class.",
346
324
  "lag_notes": "Supersedes RFC 7230. Many security-tool rulesets still cite the obsolete number; check any control mapping that references 'RFC 7230' as the HTTP/1.1 authority and update to 9112.",
347
- "skills_referencing": [
348
- "api-security",
349
- "webapp-security",
350
- "mcp-agent-trust"
351
- ],
325
+ "skills_referencing": [],
352
326
  "last_verified": "2026-05-15"
353
327
  },
354
328
  "RFC-9114": {
@@ -375,9 +349,7 @@
375
349
  "published": "2022-04",
376
350
  "tracker": "https://www.rfc-editor.org/info/rfc9116",
377
351
  "relevance": "Defines the `/.well-known/security.txt` file format. Operator-facing CVD entry point: researchers reaching a domain consult `/.well-known/security.txt` for the disclosure contact + policy URL + preferred encryption + acknowledgments page. Absence is a recurring CVD-friction finding; presence with a stale `Expires` header is equivalent to absence. Pair with ISO 29147 receipt requirements.",
378
- "skills_referencing": [
379
- "coordinated-vuln-disclosure"
380
- ],
352
+ "skills_referencing": [],
381
353
  "last_verified": "2026-05-13"
382
354
  },
383
355
  "RFC-9180": {
@@ -421,6 +393,7 @@
421
393
  "skills_referencing": [
422
394
  "ai-c2-detection",
423
395
  "api-security",
396
+ "idp-incident-response",
424
397
  "mcp-agent-trust",
425
398
  "sector-financial",
426
399
  "sector-healthcare"
@@ -434,10 +407,7 @@
434
407
  "published": "2023-09",
435
408
  "tracker": "https://www.rfc-editor.org/info/rfc9449",
436
409
  "relevance": "DPoP binds OAuth access + refresh tokens to a client-held key pair via per-request JWTs, defending against bearer-token theft in contexts where mTLS (RFC 8705) is impractical (single-page apps, mobile apps, AI-agent runtimes lacking client-certificate infrastructure). Operator-facing: DPoP is the recommended sender-constraint for FAPI 2.0 + MCP server-to-client OAuth flows where the client cannot present a TLS client certificate. Pairs with RFC 9700 (OAuth 2.0 Security BCP) recommendations.",
437
- "skills_referencing": [
438
- "identity-assurance",
439
- "api-security"
440
- ],
410
+ "skills_referencing": [],
441
411
  "last_verified": "2026-05-15"
442
412
  },
443
413
  "RFC-9458": {
@@ -463,7 +433,6 @@
463
433
  "relevance": "Transport Services (TAPS) architecture — abstracts the choice of underlying transport (TCP, QUIC, SCTP) behind a unified API that selects the protocol at runtime based on path conditions. Forward-watch relevance: webapp / AI-API client libraries that adopt TAPS may transparently shift between TCP-HTTP/2 and QUIC-HTTP/3 mid-session, complicating boundary inspection assumptions that pin to a single transport. Currently tracked as a deployment-watch item rather than an operational control point.",
464
434
  "lag_notes": "Architecture document; companion documents (TAPS implementation, TAPS programming interface) are still in progress at IETF TAPS WG. Enterprise tooling impact is forward-looking.",
465
435
  "skills_referencing": [
466
- "webapp-security",
467
436
  "sector-telecom"
468
437
  ],
469
438
  "last_verified": "2026-05-15"
@@ -502,9 +471,7 @@
502
471
  "published": "2022-11",
503
472
  "tracker": "https://docs.oasis-open.org/csaf/csaf/v2.0/csaf-v2.0.html",
504
473
  "relevance": "Machine-readable security advisory format adopted by EU CRA, CISA, and major vendor PSIRTs. Replaces the CVRF-1.2 format. Operator-facing: CSAF 2.0 documents carry the same advisory content traditionally found in vendor PDFs but in a parseable JSON form that consumers can ingest for fleet-wide impact assessment. exceptd emits CSAF-2.0 close.evidence_package bundles from `exceptd run --format csaf-2.0` for downstream auditor consumption.",
505
- "skills_referencing": [
506
- "coordinated-vuln-disclosure"
507
- ],
474
+ "skills_referencing": [],
508
475
  "last_verified": "2026-05-13"
509
476
  },
510
477
  "DRAFT-IETF-TLS-ECDHE-MLKEM": {
@@ -541,9 +508,7 @@
541
508
  "published": "2018-10",
542
509
  "tracker": "https://www.iso.org/standard/72311.html",
543
510
  "relevance": "Internationally-recognized vulnerability-disclosure procedure standard. Operator-facing: an org claiming a CVD program must demonstrate the documented procedures cover receipt, triage, advisory drafting, notification, and post-disclosure review. Twin to ISO 30111 (handling); together they form the disclosure ↔ handling pair. The RFC 9116 (security.txt) artifact is the operator-facing surface that operationalizes ISO 29147 receipt requirements.",
544
- "skills_referencing": [
545
- "coordinated-vuln-disclosure"
546
- ],
511
+ "skills_referencing": [],
547
512
  "last_verified": "2026-05-13"
548
513
  },
549
514
  "ISO-30111": {
@@ -553,9 +518,43 @@
553
518
  "published": "2019-10",
554
519
  "tracker": "https://www.iso.org/standard/69725.html",
555
520
  "relevance": "Internal handling counterpart to ISO 29147. Defines the internal processes (investigation, resolution, release) that follow a disclosed vulnerability through to fix. Operator-facing: paired with ISO 29147 it supplies the end-to-end CVD lifecycle. Many compliance frameworks (NIS2, EU CRA) reference 'a documented vulnerability handling process'; ISO 30111 is the canonical artifact that satisfies the wording.",
521
+ "skills_referencing": [],
522
+ "last_verified": "2026-05-13"
523
+ },
524
+ "RFC-7591": {
525
+ "number": 7591,
526
+ "title": "OAuth 2.0 Dynamic Client Registration Protocol",
527
+ "status": "Proposed Standard",
528
+ "published": "2015-07",
529
+ "tracker": "https://www.rfc-editor.org/info/rfc7591",
530
+ "relevance": "Dynamic Client Registration is the legitimate OAuth flow for self-service app onboarding into an IdP. Operator-facing: when DCR is enabled without strong attestation, a compromised tenant or compromised admin can register a malicious app whose redirect_uri exfiltrates auth codes — the 2023-2024 Microsoft Storm-0558 / Midnight Blizzard incidents exercised this surface via consent abuse on tenant-published apps. Pair with RFC 7592 (DCR Management Protocol) for full lifecycle controls.",
556
531
  "skills_referencing": [
557
- "coordinated-vuln-disclosure"
532
+ "idp-incident-response"
558
533
  ],
559
- "last_verified": "2026-05-13"
534
+ "last_verified": "2026-05-15"
535
+ },
536
+ "RFC-8693": {
537
+ "number": 8693,
538
+ "title": "OAuth 2.0 Token Exchange",
539
+ "status": "Proposed Standard",
540
+ "published": "2020-01",
541
+ "tracker": "https://www.rfc-editor.org/info/rfc8693",
542
+ "relevance": "Token exchange is the canonical mechanism for cloud IAM impersonation and service-account delegation chains (AWS STS AssumeRoleWithWebIdentity, GCP Workload Identity Federation, Azure Workload Identity). Operator-facing: token-exchange chains are the modern equivalent of pass-the-token — a compromised upstream token mints downstream tokens with widened audience claims. Audit chain depth + audience expansion + lifetime ladder.",
543
+ "skills_referencing": [
544
+ "cloud-iam-incident"
545
+ ],
546
+ "last_verified": "2026-05-15"
547
+ },
548
+ "RFC-9068": {
549
+ "number": 9068,
550
+ "title": "JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens",
551
+ "status": "Proposed Standard",
552
+ "published": "2021-10",
553
+ "tracker": "https://www.rfc-editor.org/info/rfc9068",
554
+ "relevance": "Standardises the JWT claim set for OAuth access tokens (typ, scope, client_id, etc.) that cloud IAM and SaaS APIs accept as bearer credentials. Operator-facing: when tokens omit the audience claim or accept loose typ values, replay across services becomes trivial — most cloud-IAM token-forgery incidents (Azure storm-0558 key-leak class) reduce to insufficient claim validation. Pair with RFC 8725 (JWT BCP) for hardening.",
555
+ "skills_referencing": [
556
+ "cloud-iam-incident"
557
+ ],
558
+ "last_verified": "2026-05-15"
560
559
  }
561
560
  }
package/lib/exit-codes.js CHANGED
@@ -26,6 +26,7 @@ const EXIT_CODES = Object.freeze({
26
26
  SESSION_ID_COLLISION: 7,
27
27
  LOCK_CONTENTION: 8,
28
28
  STORAGE_EXHAUSTED: 9,
29
+ UNKNOWN_COMMAND: 10,
29
30
  });
30
31
 
31
32
  /**
@@ -43,6 +44,7 @@ const EXIT_CODE_DESCRIPTIONS = Object.freeze({
43
44
  7: { name: 'SESSION_ID_COLLISION', summary: 'Persisting attestation would overwrite an existing session; pass --force-overwrite to replace or supply a fresh --session-id.' },
44
45
  8: { name: 'LOCK_CONTENTION', summary: 'Concurrent invocation holds the per-playbook attestation lock; retry after the busy run releases.' },
45
46
  9: { name: 'STORAGE_EXHAUSTED', summary: 'Disk full, quota exceeded, or read-only filesystem prevented attestation write (ENOSPC, EDQUOT, EROFS).' },
47
+ 10: { name: 'UNKNOWN_COMMAND', summary: 'Unknown verb / dispatcher refused the requested command. Distinct from DETECTED_ESCALATE (2) which means a verb ran and detected an escalation-worthy finding.' },
46
48
  });
47
49
 
48
50
  /**
@@ -2708,6 +2708,30 @@ function buildEvidenceBundle(format, playbook, analyze, validate, agentSignals,
2708
2708
  }
2709
2709
  return stmt;
2710
2710
  });
2711
+ // Cycle 9 C1: OpenVEX `author` identifies the entity attesting to the
2712
+ // disposition — for an operator-run scan that is the operator, not the
2713
+ // tool vendor. Mirror the CSAF publisher.namespace fallback ladder so a
2714
+ // downstream supply-chain consumer keying on `author` resolves to the
2715
+ // operator URN. Pre-fix every OpenVEX document falsely attributed
2716
+ // dispositions to the tooling provider. Falls back to
2717
+ // urn:exceptd:operator:unknown + bundle_publisher_unclaimed runtime
2718
+ // warning if neither runOpts.operator nor runOpts.publisherNamespace
2719
+ // is supplied.
2720
+ const vexOperatorClean = sanitizeOperatorText(runOpts.operator);
2721
+ const vexExplicitNs = sanitizeOperatorText(runOpts.publisherNamespace);
2722
+ let vexAuthor;
2723
+ if (vexExplicitNs) {
2724
+ vexAuthor = vexExplicitNs;
2725
+ } else if (vexOperatorClean) {
2726
+ vexAuthor = vexOperatorClean;
2727
+ } else {
2728
+ vexAuthor = 'urn:exceptd:operator:unknown';
2729
+ pushRunError(runOpts._runErrors, {
2730
+ kind: 'bundle_publisher_unclaimed',
2731
+ format: 'openvex',
2732
+ message: 'OpenVEX author falls back to urn:exceptd:operator:unknown — supply runOpts.operator or runOpts.publisherNamespace to claim disposition attribution.',
2733
+ });
2734
+ }
2711
2735
  return {
2712
2736
  '@context': 'https://openvex.dev/ns/v0.2.0',
2713
2737
  // F2/F9: OpenVEX @id baked from session_id (not Date.now()) so the
@@ -2715,7 +2739,7 @@ function buildEvidenceBundle(format, playbook, analyze, validate, agentSignals,
2715
2739
  // attestation file name. Falls back to a urnSlug if sessionId
2716
2740
  // somehow arrived empty.
2717
2741
  '@id': `https://exceptd.com/vex/${playbookSlug}/${urnSlug(sessionId || 'session')}`,
2718
- author: 'exceptd',
2742
+ author: vexAuthor,
2719
2743
  timestamp: issued,
2720
2744
  version: 1,
2721
2745
  statements: (function () {
@@ -1,8 +1,8 @@
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-15T22:38:13.114Z",
4
- "atlas_version": "5.1.0",
5
- "skill_count": 39,
3
+ "_generated_at": "2026-05-16T01:08:44.785Z",
4
+ "atlas_version": "5.4.0",
5
+ "skill_count": 42,
6
6
  "skills": [
7
7
  {
8
8
  "name": "age-gates-child-safety",
@@ -339,6 +339,82 @@
339
339
  ],
340
340
  "dlp_refs": []
341
341
  },
342
+ {
343
+ "name": "cloud-iam-incident",
344
+ "version": "1.0.0",
345
+ "triggers": [
346
+ "access key public repo",
347
+ "aws account takeover",
348
+ "aws sso compromise",
349
+ "azure managed identity replay",
350
+ "cloud iam compromise",
351
+ "cloudtrail anomaly",
352
+ "cross account assume role",
353
+ "crypto mining cloud",
354
+ "federated trust abuse",
355
+ "gcp service account compromise",
356
+ "iam access key leak",
357
+ "iam identity center",
358
+ "imds metadata abuse",
359
+ "imdsv1 ssrf",
360
+ "oidc trust policy",
361
+ "scattered spider aws",
362
+ "snowflake aa24",
363
+ "workload identity federation"
364
+ ],
365
+ "data_deps": [
366
+ "atlas-ttps.json",
367
+ "attack-techniques.json",
368
+ "cve-catalog.json",
369
+ "cwe-catalog.json",
370
+ "d3fend-catalog.json",
371
+ "framework-control-gaps.json",
372
+ "global-frameworks.json"
373
+ ],
374
+ "atlas_refs": [
375
+ "AML.T0051"
376
+ ],
377
+ "attack_refs": [
378
+ "T1078",
379
+ "T1078.004",
380
+ "T1098.001",
381
+ "T1538",
382
+ "T1552.005",
383
+ "T1580"
384
+ ],
385
+ "framework_gaps": [
386
+ "AU-ISM-1546-Cloud-Service-Account",
387
+ "AWS-Security-Hub-Coverage-Gap",
388
+ "CISA-Snowflake-AA24-IdP-Cloud",
389
+ "FedRAMP-IL5-IAM-Federated",
390
+ "ISO-27017-Cloud-IAM",
391
+ "NIST-800-53-AC-2-Cross-Account",
392
+ "SOC2-CC6-Access-Key-Leak-Public-Repo",
393
+ "UK-CAF-B2-Cloud-IAM"
394
+ ],
395
+ "rfc_refs": [
396
+ "RFC-7519",
397
+ "RFC-8693",
398
+ "RFC-8725",
399
+ "RFC-9068"
400
+ ],
401
+ "cwe_refs": [
402
+ "CWE-269",
403
+ "CWE-287",
404
+ "CWE-522",
405
+ "CWE-732",
406
+ "CWE-798",
407
+ "CWE-863"
408
+ ],
409
+ "d3fend_refs": [
410
+ "D3-CAA",
411
+ "D3-CBAN",
412
+ "D3-IOPR",
413
+ "D3-MFA",
414
+ "D3-NTA"
415
+ ],
416
+ "dlp_refs": []
417
+ },
342
418
  {
343
419
  "name": "cloud-security",
344
420
  "version": "1.0.0",
@@ -894,6 +970,83 @@
894
970
  "d3fend_refs": [],
895
971
  "dlp_refs": []
896
972
  },
973
+ {
974
+ "name": "idp-incident-response",
975
+ "version": "1.0.0",
976
+ "triggers": [
977
+ "apt29 entra",
978
+ "auth0 breach",
979
+ "cozy bear",
980
+ "cross-tenant abuse",
981
+ "entra app consent",
982
+ "entra id compromise",
983
+ "federated trust abuse",
984
+ "help-desk social engineering",
985
+ "identity provider incident",
986
+ "idp incident",
987
+ "management api token leak",
988
+ "mfa factor swap",
989
+ "midnight blizzard",
990
+ "oauth consent abuse",
991
+ "octo tempest",
992
+ "okta breach",
993
+ "okta compromise",
994
+ "onelogin breach",
995
+ "ping identity breach",
996
+ "saml token forgery",
997
+ "scattered spider",
998
+ "service account compromise",
999
+ "storm-0875",
1000
+ "tenant compromise"
1001
+ ],
1002
+ "data_deps": [
1003
+ "attack-techniques.json",
1004
+ "cve-catalog.json",
1005
+ "cwe-catalog.json",
1006
+ "d3fend-catalog.json",
1007
+ "framework-control-gaps.json",
1008
+ "global-frameworks.json"
1009
+ ],
1010
+ "atlas_refs": [],
1011
+ "attack_refs": [
1012
+ "T1078.004",
1013
+ "T1098.001",
1014
+ "T1199",
1015
+ "T1556.007",
1016
+ "T1606.002"
1017
+ ],
1018
+ "framework_gaps": [
1019
+ "AU-ISM-1559-IdP",
1020
+ "DORA-Art-19-IdP-4h",
1021
+ "ISO-27001-2022-A.5.16-Federated",
1022
+ "NIS2-Art-21-Federated-Identity",
1023
+ "NIST-800-53-IA-5-Federated",
1024
+ "OFAC-Sanctions-Threat-Actor-Negotiation",
1025
+ "SOC2-CC6-OAuth-Consent",
1026
+ "UK-CAF-B2-IdP-Tenant"
1027
+ ],
1028
+ "rfc_refs": [
1029
+ "RFC-7519",
1030
+ "RFC-7591",
1031
+ "RFC-8725",
1032
+ "RFC-9421"
1033
+ ],
1034
+ "cwe_refs": [
1035
+ "CWE-269",
1036
+ "CWE-284",
1037
+ "CWE-287",
1038
+ "CWE-345",
1039
+ "CWE-522",
1040
+ "CWE-863"
1041
+ ],
1042
+ "d3fend_refs": [
1043
+ "D3-CBAN",
1044
+ "D3-IOPR",
1045
+ "D3-MFA",
1046
+ "D3-NTA"
1047
+ ],
1048
+ "dlp_refs": []
1049
+ },
897
1050
  {
898
1051
  "name": "incident-response-playbook",
899
1052
  "version": "1.0.0",
@@ -1289,6 +1442,70 @@
1289
1442
  ],
1290
1443
  "dlp_refs": []
1291
1444
  },
1445
+ {
1446
+ "name": "ransomware-response",
1447
+ "version": "1.0.0",
1448
+ "triggers": [
1449
+ "akira ransomware",
1450
+ "alphv",
1451
+ "blackcat",
1452
+ "blacksuit",
1453
+ "cuba ransomware",
1454
+ "cyber insurance ransomware",
1455
+ "data theft before encryption",
1456
+ "decryptor availability",
1457
+ "double extortion",
1458
+ "encryption event",
1459
+ "exfil before encrypt",
1460
+ "hunters international",
1461
+ "immutable backup",
1462
+ "lockbit",
1463
+ "no more ransom",
1464
+ "ofac sanctions ransomware",
1465
+ "ransom payment",
1466
+ "ransomhub",
1467
+ "ransomware",
1468
+ "ransomware incident",
1469
+ "royal ransomware",
1470
+ "shadow copy deletion"
1471
+ ],
1472
+ "data_deps": [
1473
+ "atlas-ttps.json",
1474
+ "cve-catalog.json",
1475
+ "cwe-catalog.json",
1476
+ "d3fend-catalog.json",
1477
+ "framework-control-gaps.json",
1478
+ "global-frameworks.json",
1479
+ "zeroday-lessons.json"
1480
+ ],
1481
+ "atlas_refs": [],
1482
+ "attack_refs": [
1483
+ "T1059",
1484
+ "T1078",
1485
+ "T1486",
1486
+ "T1567"
1487
+ ],
1488
+ "framework_gaps": [
1489
+ "Decryptor-Availability-Pre-Decision",
1490
+ "EU-Sanctions-Reg-2014-833-Cyber",
1491
+ "Immutable-Backup-Recovery",
1492
+ "Insurance-Carrier-24h-Notification",
1493
+ "OFAC-SDN-Payment-Block",
1494
+ "PHI-Exfil-Before-Encrypt-Breach-Class"
1495
+ ],
1496
+ "rfc_refs": [],
1497
+ "cwe_refs": [
1498
+ "CWE-287",
1499
+ "CWE-798"
1500
+ ],
1501
+ "d3fend_refs": [
1502
+ "D3-CSPP",
1503
+ "D3-IOPR",
1504
+ "D3-NTA",
1505
+ "D3-RPA"
1506
+ ],
1507
+ "dlp_refs": []
1508
+ },
1292
1509
  {
1293
1510
  "name": "researcher",
1294
1511
  "version": "1.0.0",
@@ -1 +1 @@
1
- 259bbbc7ec375bfb21c2e8fe4c397cca265b33b357e19282d34acff932752237 manifest-snapshot.json
1
+ 2b2fe8086b9dd8ff974651b9ee0a00df002209856fd3e6cbacd4cd9b0029b530 manifest-snapshot.json