@blamejs/exceptd-skills 0.16.9 → 0.16.11

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 (37) hide show
  1. package/AGENTS.md +2 -1
  2. package/CHANGELOG.md +8 -0
  3. package/README.md +5 -5
  4. package/bin/exceptd.js +2 -0
  5. package/data/_indexes/_meta.json +17 -16
  6. package/data/_indexes/activity-feed.json +9 -2
  7. package/data/_indexes/chains.json +1186 -56
  8. package/data/_indexes/currency.json +10 -1
  9. package/data/_indexes/frequency.json +89 -51
  10. package/data/_indexes/handoff-dag.json +5 -1
  11. package/data/_indexes/jurisdiction-map.json +4 -2
  12. package/data/_indexes/section-offsets.json +85 -0
  13. package/data/_indexes/stale-content.json +10 -3
  14. package/data/_indexes/summary-cards.json +40 -0
  15. package/data/_indexes/token-budget.json +53 -3
  16. package/data/_indexes/trigger-table.json +54 -0
  17. package/data/_indexes/xref.json +29 -6
  18. package/data/cwe-catalog.json +12 -3
  19. package/data/playbooks/cred-stores.json +24 -7
  20. package/data/playbooks/framework.json +17 -5
  21. package/data/playbooks/identity-sso-compromise.json +21 -4
  22. package/data/playbooks/vc-wallet-trust.json +725 -0
  23. package/lib/cve-curation.js +2 -4
  24. package/lib/flag-suggest.js +1 -1
  25. package/lib/lint-skills.js +1 -0
  26. package/lib/playbook-runner.js +2 -2
  27. package/lib/scoring.js +3 -3
  28. package/lib/validate-playbooks.js +0 -2
  29. package/manifest-snapshot.json +57 -2
  30. package/manifest-snapshot.sha256 +1 -1
  31. package/manifest.json +103 -44
  32. package/package.json +2 -2
  33. package/sbom.cdx.json +80 -50
  34. package/scripts/check-codebase-patterns-currency.js +1 -2
  35. package/scripts/check-codebase-patterns.js +109 -1
  36. package/scripts/release.js +2 -2
  37. package/skills/vc-wallet-trust/skill.md +84 -0
package/AGENTS.md CHANGED
@@ -156,7 +156,7 @@ Cross-cutting playbook `framework` is the natural correlation layer — many pla
156
156
 
157
157
  | Verb | What it does |
158
158
  |---|---|
159
- | `exceptd brief --all` | Grouped-by-scope summary of all 24 playbooks. `--scope <type>` filters. `--directives` expands directive IDs/titles per playbook. `--flat` for non-grouped. `exceptd plan` was removed in v0.13.0; invoking it returns a structured `ok:false` refusal pointing at this command. |
159
+ | `exceptd brief --all` | Grouped-by-scope summary of all 25 playbooks. `--scope <type>` filters. `--directives` expands directive IDs/titles per playbook. `--flat` for non-grouped. `exceptd plan` was removed in v0.13.0; invoking it returns a structured `ok:false` refusal pointing at this command. |
160
160
  | `exceptd brief <pb>` | Phase 2 threat-context briefing — threat context, RWEP thresholds, skill chain, token budget, jurisdiction obligations. |
161
161
  | `exceptd run <pb> --evidence <file>` | Phases 5-7 (analyze + validate + close) from agent evidence. Auto-detect cwd when no playbook positional. `--vex <file>` drops CycloneDX/OpenVEX `not_affected` CVEs. `--diff-from-latest` for drift mode. `--force-stale` overrides currency hard-block. |
162
162
  | `exceptd ai-run <pb>` | Streaming variant of `run` for AI agents; emits phase-by-phase NDJSON. |
@@ -450,6 +450,7 @@ When in doubt, ship the playbook without a collector and open the gap as a follo
450
450
  | supply chain, slsa, sbom, vex, sigstore, in-toto, cyclonedx, spdx | supply-chain-integrity |
451
451
  | defensive mapping, d3fend, blue team, defense in depth, least privilege, zero trust | defensive-countermeasure-mapping |
452
452
  | identity assurance, aal, ial, fal, fido2, webauthn, passkey, oidc, saml | identity-assurance |
453
+ | verifiable credential, digital wallet, sd-jwt-vc, oid4vp, mdoc, eudi wallet, eidas 2.0, did:web, status list, credential verifier | vc-wallet-trust |
453
454
  | ot security, ics security, scada, plc, iec 62443, nist 800-82, nerc cip | ot-ics-security |
454
455
  | cvd, vdp, bug bounty, iso 29147, iso 30111, csaf, security.txt | coordinated-vuln-disclosure |
455
456
  | threat model, stride, pasta, linddun, kill chain, diamond model, unified kill chain | threat-modeling-methodology |
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.16.11 — 2026-06-02
4
+
5
+ New `vc-wallet-trust` playbook and skill audit the verifiable-credential / digital-wallet verifier trust boundary — the checks a service must make before it accepts an SD-JWT-VC, OID4VP, or ISO 18013-5 mdoc presentation from a wallet it does not control. It detects an issuer key not pinned to a trust anchor, revocation/status-list not enforced, `did:web` resolution left unpinned, presentations accepted without nonce/audience key-binding (replayable), mdoc device authentication skipped, open signature-algorithm sets, and over-disclosure beyond the requested claims — mapping each to the framework controls (NIST 800-63B, NIST 800-53 IA-5, ISO 27001 A.5.16, NIS2, eIDAS 2.0 / EUDI wallet) that do not cover the wallet acceptance path. Run it with `exceptd brief vc-wallet-trust` or `exceptd run vc-wallet-trust`.
6
+
7
+ ## 0.16.10 — 2026-06-02
8
+
9
+ RWEP scoring no longer emits a spurious validation warning when a CVE carries the `theoretical` active-exploitation status — a value the catalog vocabulary and the scorer already accept and score. The guided curation questionnaire now prompts for `ai_assisted_weaponization`, a required field it previously skipped, so a curated entry cannot silently omit it. The `prefetch` verb no longer double-counts a global flag, and `lint --strict` is now documented in its own `--help`.
10
+
3
11
  ## 0.16.9 — 2026-06-01
4
12
 
5
13
  The catalog now covers a set of real, vendor-patched protocol-layer flaws it previously did not name, so scans, triage, and reports surface them with RWEP scoring and behavioral indicators:
package/README.md CHANGED
@@ -14,7 +14,7 @@
14
14
  [![CI](https://img.shields.io/github/actions/workflow/status/blamejs/exceptd-skills/ci.yml?branch=main&label=CI)](https://github.com/blamejs/exceptd-skills/actions/workflows/ci.yml)
15
15
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/blamejs/exceptd-skills/badge)](https://scorecard.dev/viewer/?uri=github.com/blamejs/exceptd-skills)
16
16
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
17
- [![Skills](https://img.shields.io/badge/skills-42-d946ef)](#skill-inventory)
17
+ [![Skills](https://img.shields.io/badge/skills-43-d946ef)](#skill-inventory)
18
18
  [![ATLAS](https://img.shields.io/badge/MITRE%20ATLAS-v5.6.0-d946ef)](https://atlas.mitre.org)
19
19
  [![ATT&CK](https://img.shields.io/badge/MITRE%20ATT%26CK-v19.0-d946ef)](https://attack.mitre.org)
20
20
  [![Ed25519-signed](https://img.shields.io/badge/skills-Ed25519--signed-2ea043)](AGENTS.md)
@@ -30,7 +30,7 @@ This platform surfaces what is actually happening right now. Every skill explici
30
30
 
31
31
  ## Status
32
32
 
33
- Pre-1.0. Latest release lives on [GitHub Releases](https://github.com/blamejs/exceptd-skills/releases) and on npm as [`@blamejs/exceptd-skills`](https://www.npmjs.com/package/@blamejs/exceptd-skills) with signed npm provenance attestation and Ed25519-signed skill bodies. The package ships 42 skills across kernel LPE, MCP supply chain, AI-as-C2, prompt injection, post-quantum crypto, SBOM integrity, identity-incident response, and 35 other AI/security domains, plus 11 intelligence catalogs (CVE / ATLAS / ATT&CK / CWE / D3FEND / DLP / RFC / framework gaps / global frameworks / zero-day lessons / exploit availability) covering 35 jurisdictions; the CVE catalog holds 427 actively-exploited and high-priority entries, each carrying behavioral indicators, an ATT&CK technique mapping, and a defense-chain zero-day lesson. 24 investigation playbooks (kernel, MCP, AI-API, framework, SBOM, runtime, hardening, secrets, cred-stores, containers, crypto, plus `webhook-callback-abuse`, `cicd-pipeline-compromise`, `identity-sso-compromise`, `llm-tool-use-exfil`, `post-quantum-migration`, `ai-discovered-cve-triage`, `supply-chain-recovery`, `citation-hygiene`, and more), a CLI for discovery and investigation built around `discover → brief → run → attest` (each run executes the playbook's seven-phase contract), and a nightly auto-refresh job that pulls KEV / NVD / EPSS / GHSA / OSV / IETF deltas plus 15 primary-source advisory, research-blog, and tech-press feeds (Qualys TRU, Red Hat RHSA, Ubuntu USN, ZDI, kernel.org, oss-security, JFrog, CISA, Microsoft Security Blog, Sysdig, Trail of Bits, Embrace the Red, BleepingComputer security, and The Hacker News) into auto-PRs for editorial review, alongside a silent-regression watcher that flags historical CVEs re-broken without a new identifier.
33
+ Pre-1.0. Latest release lives on [GitHub Releases](https://github.com/blamejs/exceptd-skills/releases) and on npm as [`@blamejs/exceptd-skills`](https://www.npmjs.com/package/@blamejs/exceptd-skills) with signed npm provenance attestation and Ed25519-signed skill bodies. The package ships 43 skills across kernel LPE, MCP supply chain, AI-as-C2, prompt injection, post-quantum crypto, SBOM integrity, identity-incident response, and 35 other AI/security domains, plus 11 intelligence catalogs (CVE / ATLAS / ATT&CK / CWE / D3FEND / DLP / RFC / framework gaps / global frameworks / zero-day lessons / exploit availability) covering 35 jurisdictions; the CVE catalog holds 439 actively-exploited and high-priority entries, each carrying behavioral indicators, an ATT&CK technique mapping, and a defense-chain zero-day lesson. 25 investigation playbooks (kernel, MCP, AI-API, framework, SBOM, runtime, hardening, secrets, cred-stores, containers, crypto, plus `webhook-callback-abuse`, `cicd-pipeline-compromise`, `identity-sso-compromise`, `llm-tool-use-exfil`, `post-quantum-migration`, `ai-discovered-cve-triage`, `supply-chain-recovery`, `citation-hygiene`, `vc-wallet-trust`, and more), a CLI for discovery and investigation built around `discover → brief → run → attest` (each run executes the playbook's seven-phase contract), and a nightly auto-refresh job that pulls KEV / NVD / EPSS / GHSA / OSV / IETF deltas plus 15 primary-source advisory, research-blog, and tech-press feeds (Qualys TRU, Red Hat RHSA, Ubuntu USN, ZDI, kernel.org, oss-security, JFrog, CISA, Microsoft Security Blog, Sysdig, Trail of Bits, Embrace the Red, BleepingComputer security, and The Hacker News) into auto-PRs for editorial review, alongside a silent-regression watcher that flags historical CVEs re-broken without a new identifier.
34
34
 
35
35
  ---
36
36
 
@@ -144,7 +144,7 @@ exceptd help
144
144
  First run — verify the signing chain and pin the public-key fingerprint for out-of-band checks:
145
145
 
146
146
  ```bash
147
- exceptd doctor --signatures # verify Ed25519 chains (42/42 expected)
147
+ exceptd doctor --signatures # verify Ed25519 chains (43/43 expected)
148
148
  cat $(exceptd path)/keys/EXPECTED_FINGERPRINT # pin fingerprint for OOB verify
149
149
  ```
150
150
 
@@ -162,7 +162,7 @@ GitHub repo-pattern monitoring: `exceptd watchlist --org-scan --org <login>` pro
162
162
 
163
163
  AI-assistant config-file audit: `exceptd doctor --ai-config` walks `~/.claude`, `~/.cursor`, `~/.codeium`, `~/.aider`, and `~/.continue`, flagging sensitive files (`settings.json`, `mcp.json`, `*.mcp_config.json`, `api_key*`, `*.token`, `*.credentials`) not at mode 0600 on POSIX. On Windows the mode bits aren't load-bearing; each finding is surfaced with an info-level "manual ACL review" note. Catches the AI-config-credential-exfil class that the Shai-Hulud framework targets. Opt-in — does not run as part of the default no-flag `doctor` pass.
164
164
 
165
- Evidence-collection layer: `exceptd collect <playbook>` invokes a companion script under `lib/collectors/<playbook>.js` that walks cwd, applies the catalogued regex set, stats permissions, and emits the submission JSON in the same shape `exceptd run --evidence -` accepts. 14 of 24 playbooks have collectors today (`ai-api`, `cicd-pipeline-compromise`, `citation-hygiene`, `containers`, `cred-stores`, `crypto`, `crypto-codebase`, `hardening`, `kernel`, `library-author`, `mcp`, `runtime`, `sbom`, `secrets`); the remaining 10 are policy-skipped per AGENTS.md (judgement-shaped incident / governance / pure-analyze playbooks where AI-driven evidence collection is the design). Canonical operator pipe: `exceptd collect <pb> | exceptd run <pb> --evidence -`. `exceptd doctor --collectors` enumerates the layer; `exceptd discover` tags applicable playbooks with `[collector]` when one ships. `cicd-pipeline-compromise` requires `--attest-ownership` on the collect call (the playbook's `operator-owns-ci-fleet` precondition is opt-in to prevent unauthorized CI assessments).
165
+ Evidence-collection layer: `exceptd collect <playbook>` invokes a companion script under `lib/collectors/<playbook>.js` that walks cwd, applies the catalogued regex set, stats permissions, and emits the submission JSON in the same shape `exceptd run --evidence -` accepts. 14 of 25 playbooks have collectors today (`ai-api`, `cicd-pipeline-compromise`, `citation-hygiene`, `containers`, `cred-stores`, `crypto`, `crypto-codebase`, `hardening`, `kernel`, `library-author`, `mcp`, `runtime`, `sbom`, `secrets`); the remaining 11 are policy-skipped per AGENTS.md (judgement-shaped incident / governance / pure-analyze playbooks where AI-driven evidence collection is the design). Canonical operator pipe: `exceptd collect <pb> | exceptd run <pb> --evidence -`. `exceptd doctor --collectors` enumerates the layer; `exceptd discover` tags applicable playbooks with `[collector]` when one ships. `cicd-pipeline-compromise` requires `--attest-ownership` on the collect call (the playbook's `operator-owns-ci-fleet` precondition is opt-in to prevent unauthorized CI assessments).
166
166
 
167
167
  Daily scheduled threat intake: a `routine: exceptd-threat-intake` (claude.ai remote agent) runs daily at 14:00 UTC. Sequence: `npm install` → `refresh --check-advisories` → `watchlist --alerts` → `refresh --apply` → `refresh --advisory <CVE-ID>` for up to 5 new CVE IDs from the primary-source feeds → re-sign + rebuild-indexes if the catalog mutated → commit on `intake/<YYYY-MM-DD>` branch with the full diff in the report. Closes the cadence gap that previously left fresh disclosures dependent on operator-triggered intake. Operator-managed at <https://claude.ai/code/routines>.
168
168
 
@@ -281,7 +281,7 @@ exceptd collect <playbook> Walk cwd + invoke the companion collector
281
281
  under lib/collectors/<playbook>.js. Emits
282
282
  a submission JSON ready to pipe into
283
283
  `exceptd run <playbook> --evidence -`.
284
- 14/24 playbooks have collectors; the rest
284
+ 14/25 playbooks have collectors; the rest
285
285
  are AI-driven by design (incident /
286
286
  governance / pure-analyze — see
287
287
  AGENTS.md).
package/bin/exceptd.js CHANGED
@@ -3125,6 +3125,7 @@ const POLICY_SKIPPED_PLAYBOOKS = new Set([
3125
3125
  "post-quantum-migration",
3126
3126
  "ransomware",
3127
3127
  "supply-chain-recovery",
3128
+ "vc-wallet-trust",
3128
3129
  "webhook-callback-abuse",
3129
3130
  ]);
3130
3131
 
@@ -7061,6 +7062,7 @@ function cmdDoctor(runner, args, runOpts, pretty) {
7061
7062
  "cloud-iam-incident", "idp-incident", "identity-sso-compromise",
7062
7063
  "llm-tool-use-exfil", "supply-chain-recovery",
7063
7064
  "post-quantum-migration", "webhook-callback-abuse",
7065
+ "vc-wallet-trust",
7064
7066
  ];
7065
7067
  const playbookFiles = fs.readdirSync(playbookDir)
7066
7068
  .filter(f => f.endsWith(".json") && !f.startsWith("_"))
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "schema_version": "1.1.0",
3
- "generated_at": "2026-06-02T05:46:26.678Z",
3
+ "generated_at": "2026-06-02T16:10:10.204Z",
4
4
  "generator": "scripts/build-indexes.js",
5
- "source_count": 54,
5
+ "source_count": 55,
6
6
  "source_hashes": {
7
- "manifest.json": "3dab3ebc6c86b2318f956da3e343ad7b470f05dd30e2afbee5a8e3b3a845a926",
7
+ "manifest.json": "cdd4fb5f74a72b662c5db992bb3de8d484c9c87951a40762f2b5198453747dba",
8
8
  "data/atlas-ttps.json": "f66b456cf82a3c20575d8479de41f7b11b7ee5693eb1fcf64a67e162ae1b88a2",
9
9
  "data/attack-techniques.json": "c39f28e3402ef13ad9b7076819f63fda67a22f97e3e375cfe01c4a4e0beff7c9",
10
10
  "data/cve-catalog.json": "8264da4534d39c9493cfcd18acf7e38ed47ce2a81be15afd5a3f4baf1d504929",
11
- "data/cwe-catalog.json": "5def8d82bbe51382ec55fc7186722974077e1289194e4ea002df0e3c52c6a017",
11
+ "data/cwe-catalog.json": "6fa292e00da31186d66d58cd11ee960c56d1fa7f1f6113c3b66625732a79f412",
12
12
  "data/d3fend-catalog.json": "9a54bccb9f24f84b32024216cc3f53819a053721ac8ab43c326859e68fc0ffaf",
13
13
  "data/dlp-controls.json": "d2406c482dddd30e49203879999dc4b3a7fd4d0494d6a61d86b91ee76415df19",
14
14
  "data/exploit-availability.json": "ec2656f0d9a893610e27b43eb6035fe9b18e057c9f6dfaac7e7d4959bbcbb795",
@@ -57,37 +57,38 @@
57
57
  "skills/email-security-anti-phishing/skill.md": "0965eca982e8fc633b85e70c0ba6becb8c0f5ee7bdd0be96ad73a9a222bb8816",
58
58
  "skills/age-gates-child-safety/skill.md": "6d4d29e54a115314c3c0ea9f5df47bdc2828f3b226fff4b5974d898b56c0cd73",
59
59
  "skills/cloud-iam-incident/skill.md": "6aab2e400d1e87df7ac2b6f0a17dac6aa99723b217258c4a7b446703d1521775",
60
- "skills/idp-incident-response/skill.md": "cb2f2c5b90de4592bfd66dcd55f9bf2004f370746d519cad577fcbaf36125878"
60
+ "skills/idp-incident-response/skill.md": "cb2f2c5b90de4592bfd66dcd55f9bf2004f370746d519cad577fcbaf36125878",
61
+ "skills/vc-wallet-trust/skill.md": "802dada75d934c9ab322246f650eb2eac9e2f72c1f094b0cebcfa605b56108a5"
61
62
  },
62
- "skill_count": 42,
63
+ "skill_count": 43,
63
64
  "catalog_count": 11,
64
65
  "index_stats": {
65
66
  "xref_entries": {
66
- "cwe_refs": 36,
67
+ "cwe_refs": 38,
67
68
  "d3fend_refs": 21,
68
- "framework_gaps": 80,
69
+ "framework_gaps": 81,
69
70
  "atlas_refs": 10,
70
- "attack_refs": 39,
71
+ "attack_refs": 41,
71
72
  "rfc_refs": 23,
72
73
  "dlp_refs": 0
73
74
  },
74
- "trigger_table_entries": 538,
75
+ "trigger_table_entries": 556,
75
76
  "chains_cve_entries": 426,
76
77
  "chains_cwe_entries": 174,
77
78
  "jurisdictions_indexed": 29,
78
- "handoff_dag_nodes": 42,
79
- "summary_cards": 42,
80
- "section_offsets_skills": 42,
81
- "token_budget_total_approx": 418794,
79
+ "handoff_dag_nodes": 43,
80
+ "summary_cards": 43,
81
+ "section_offsets_skills": 43,
82
+ "token_budget_total_approx": 420699,
82
83
  "recipes": 8,
83
84
  "jurisdiction_clocks": 29,
84
85
  "did_ladders": 8,
85
86
  "theater_fingerprints": 7,
86
87
  "currency_action_required": 0,
87
88
  "frequency_fields": 7,
88
- "activity_feed_events": 54,
89
+ "activity_feed_events": 55,
89
90
  "catalog_summaries": 11,
90
- "stale_content_findings": 0
91
+ "stale_content_findings": 1
91
92
  },
92
93
  "invalidation_note": "If any source file in source_hashes has a different SHA-256 than recorded here, the indexes are stale. Re-run `npm run build-indexes`."
93
94
  }
@@ -2,9 +2,16 @@
2
2
  "_meta": {
3
3
  "schema_version": "1.0.0",
4
4
  "note": "Per-artifact 'last changed' feed sorted descending by date. Skill events from manifest.last_threat_review; catalog events from data/<catalog>.json _meta.last_updated.",
5
- "event_count": 54
5
+ "event_count": 55
6
6
  },
7
7
  "events": [
8
+ {
9
+ "date": "2026-06-02",
10
+ "type": "skill_review",
11
+ "artifact": "vc-wallet-trust",
12
+ "path": "skills/vc-wallet-trust/skill.md",
13
+ "note": "Verifiable-credential / digital-wallet verifier trust for mid-2026 — SD-JWT-VC, OID4VCI/OID4VP, mdoc (ISO 18013-5), DID resolution, OAuth Token Status List revocation, OpenID Federation trust anchors, and the EUDI wallet (eIDAS 2.0) acceptance path"
14
+ },
8
15
  {
9
16
  "date": "2026-06-01",
10
17
  "type": "catalog_update",
@@ -272,7 +279,7 @@
272
279
  "type": "manifest_review",
273
280
  "artifact": "manifest.json",
274
281
  "path": "manifest.json",
275
- "note": "manifest threat_review_date — 42 skills, 11 catalogs"
282
+ "note": "manifest threat_review_date — 43 skills, 11 catalogs"
276
283
  },
277
284
  {
278
285
  "date": "2026-05-11",