@blamejs/exceptd-skills 0.12.7 → 0.12.9

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 (77) hide show
  1. package/AGENTS.md +15 -1
  2. package/ARCHITECTURE.md +21 -5
  3. package/CHANGELOG.md +150 -0
  4. package/README.md +1 -1
  5. package/bin/exceptd.js +416 -69
  6. package/data/_indexes/_meta.json +44 -44
  7. package/data/_indexes/activity-feed.json +34 -34
  8. package/data/_indexes/catalog-summaries.json +9 -9
  9. package/data/_indexes/chains.json +249 -11
  10. package/data/_indexes/frequency.json +63 -5
  11. package/data/_indexes/jurisdiction-map.json +13 -3
  12. package/data/_indexes/section-offsets.json +1171 -1027
  13. package/data/_indexes/summary-cards.json +2 -2
  14. package/data/_indexes/token-budget.json +232 -152
  15. package/data/atlas-ttps.json +189 -1
  16. package/data/cve-catalog.json +34 -22
  17. package/data/cwe-catalog.json +290 -1
  18. package/data/d3fend-catalog.json +163 -1
  19. package/data/framework-control-gaps.json +243 -0
  20. package/data/playbooks/containers.json +23 -5
  21. package/data/playbooks/cred-stores.json +9 -9
  22. package/data/playbooks/crypto.json +8 -8
  23. package/data/playbooks/hardening.json +46 -10
  24. package/data/playbooks/library-author.json +16 -20
  25. package/data/playbooks/mcp.json +1 -0
  26. package/data/playbooks/runtime.json +7 -7
  27. package/data/playbooks/sbom.json +11 -11
  28. package/data/playbooks/secrets.json +4 -4
  29. package/data/rfc-references.json +144 -0
  30. package/lib/playbook-runner.js +119 -35
  31. package/lib/prefetch.js +27 -6
  32. package/lib/refresh-external.js +32 -9
  33. package/lib/schemas/skill-frontmatter.schema.json +2 -2
  34. package/manifest-snapshot.json +1 -1
  35. package/manifest.json +73 -73
  36. package/orchestrator/index.js +1 -1
  37. package/package.json +2 -1
  38. package/sbom.cdx.json +6 -6
  39. package/scripts/check-sbom-currency.js +87 -0
  40. package/scripts/check-test-coverage.README.md +148 -0
  41. package/scripts/check-test-coverage.js +476 -0
  42. package/scripts/hooks/pre-commit.sh +19 -0
  43. package/scripts/predeploy.js +14 -30
  44. package/skills/age-gates-child-safety/skill.md +3 -0
  45. package/skills/ai-attack-surface/skill.md +29 -1
  46. package/skills/ai-c2-detection/skill.md +30 -1
  47. package/skills/ai-risk-management/skill.md +3 -0
  48. package/skills/api-security/skill.md +3 -0
  49. package/skills/attack-surface-pentest/skill.md +3 -0
  50. package/skills/cloud-security/skill.md +3 -0
  51. package/skills/compliance-theater/skill.md +6 -0
  52. package/skills/container-runtime-security/skill.md +3 -0
  53. package/skills/coordinated-vuln-disclosure/skill.md +8 -1
  54. package/skills/defensive-countermeasure-mapping/skill.md +1 -1
  55. package/skills/dlp-gap-analysis/skill.md +3 -0
  56. package/skills/email-security-anti-phishing/skill.md +9 -1
  57. package/skills/exploit-scoring/skill.md +6 -0
  58. package/skills/identity-assurance/skill.md +6 -1
  59. package/skills/incident-response-playbook/skill.md +8 -2
  60. package/skills/kernel-lpe-triage/skill.md +24 -4
  61. package/skills/mcp-agent-trust/skill.md +28 -1
  62. package/skills/mlops-security/skill.md +3 -0
  63. package/skills/ot-ics-security/skill.md +3 -0
  64. package/skills/policy-exception-gen/skill.md +6 -0
  65. package/skills/rag-pipeline-security/skill.md +30 -1
  66. package/skills/researcher/skill.md +6 -0
  67. package/skills/sector-energy/skill.md +3 -0
  68. package/skills/sector-federal-government/skill.md +3 -0
  69. package/skills/sector-financial/skill.md +3 -0
  70. package/skills/sector-healthcare/skill.md +3 -0
  71. package/skills/security-maturity-tiers/skill.md +25 -1
  72. package/skills/skill-update-loop/skill.md +38 -0
  73. package/skills/supply-chain-integrity/skill.md +3 -0
  74. package/skills/threat-model-currency/skill.md +4 -0
  75. package/skills/threat-modeling-methodology/skill.md +3 -0
  76. package/skills/webapp-security/skill.md +3 -0
  77. package/skills/zeroday-gap-learn/skill.md +6 -0
@@ -37,6 +37,9 @@ framework_gaps:
37
37
  - HITRUST-CSF-v11.4-09.l
38
38
  - ISO-27001-2022-A.8.30
39
39
  - NIST-800-53-AC-2
40
+ - NIS2-Art21-incident-handling
41
+ - UK-CAF-D1
42
+ - AU-Essential-8-Backup
40
43
  rfc_refs:
41
44
  - RFC-7519
42
45
  - RFC-9421
@@ -38,6 +38,12 @@ Three tiers. Each is complete, not a stepping stone to the next. An organization
38
38
 
39
39
  ---
40
40
 
41
+ ## Frontmatter Scope
42
+
43
+ The `atlas_refs`, `attack_refs`, and `framework_gaps` arrays are intentionally empty. This skill produces a roadmap shape that applies to *every* security domain the project covers (kernel patching, AI systems, cryptography, MCP, RAG, identity, supply chain, etc.). The three-tier roadmap is domain-agnostic; the domain-specific TTPs and framework gaps live in the downstream skill that owns the domain. Pinning a fixed subset here would falsely imply tier-mapping applies only to that subset.
44
+
45
+ ---
46
+
41
47
  ## How to Use This Skill
42
48
 
43
49
  This skill produces a three-column roadmap for any security domain. Tell it:
@@ -73,7 +79,7 @@ It outputs Tier 1 (MVP), Tier 2 (Practical), Tier 3 (Overkill) for that domain
73
79
  uname -r
74
80
  # Cross-reference against patched versions for your distro
75
81
  # RHEL: kernel >= 4.18.0-553.xx = patched
76
- # Ubuntu 22.04: linux-image-5.15.0-xxx (check latest USN)
82
+ # Ubuntu 22.04: linux-image-5.15.0-<patch-revision> (check latest USN)
77
83
  ```
78
84
 
79
85
  2. **Deploy live kernel patches on exposed systems** (same day)
@@ -373,6 +379,24 @@ Year 1+: Tier 3 — by domain, starting with highest-sensitivity data
373
379
 
374
380
  ---
375
381
 
382
+ ## Compliance Theater Check
383
+
384
+ Apply this check to every maturity-tier engagement before recommending a roadmap:
385
+
386
+ > "Your security program currently sits at Tier <N> by self-assessment for domain <D>. The compliance framework you cite (e.g. NIST CSF 2.0 / ISO 27001:2022 / NIS2 Art. 21 / UK-CAF / AU Essential 8) classifies your posture as <attested-tier>. If the threats now in scope for this domain (specific CVE / TTP from `data/cve-catalog.json` and `data/atlas-ttps.json`) include a class where the framework control is structurally insufficient (Hard Rule #2 framework-lag), then your attested tier and your operational tier diverge by exactly that gap. Which of the controls you would cite for your attested tier would survive a primary-source IoC test against the highest-RWEP CVE in scope?"
387
+
388
+ **Theater fingerprints for tier conflation:**
389
+
390
+ - The org has Tier 3 controls in one domain (e.g. SIEM with hundreds of alerts) but Tier 1 gaps in an adjacent domain (e.g. no kernel-LPE patch SLA on the SIEM host). The Tier 3 alert never fires because the underlying integrity is missing.
391
+ - "Mature" is asserted on the basis of tool ownership, not behavior — HSMs purchased, never operationally rotated; ZTA architecture documented, default-allow policies in force; PQC algorithms in code, no key-rotation playbook.
392
+ - The maturity model used is the org's own framework-attestation tier, not the lived operational tier — the audit report says Tier 3, the on-call says "what's that runbook again."
393
+ - Tier-3 controls audited annually, Tier-1 controls (patching, MFA on privileged identities, secrets in git) never re-audited because they "passed once."
394
+ - The roadmap promotes the org from Tier 1 to Tier 3 in a single budget cycle, skipping the Tier 2 operational work that converts point-in-time controls into continuous ones.
395
+
396
+ **Real requirement:** maturity assessed per domain, not org-wide; the assessed tier matches operational behavior (not the audit attestation); promotion happens domain-by-domain with explicit Tier-2 instrumentation between Tier-1 controls and Tier-3 sophistication; the same CVE-anchored primary-source IoC test (Hard Rule #14) applies at every tier — if a Tier-3 control cannot defend against the published PoC of the highest-RWEP CVE in scope, the tier classification is theater.
397
+
398
+ ---
399
+
376
400
  ## The Anti-Pattern: Tier 3 Security Theater
377
401
 
378
402
  Tier 3 controls without Tier 1 and Tier 2 in place is its own form of theater.
@@ -41,6 +41,44 @@ This meta-skill manages the evolution of all other exceptd skills. It is the loo
41
41
 
42
42
  ---
43
43
 
44
+ ## Frontmatter Scope
45
+
46
+ The `atlas_refs`, `attack_refs`, and `framework_gaps` arrays are intentionally empty. This skill operates on the *catalog and skill inventory itself* — it has no adversary TTP attached because its threat model is platform-currency drift, not an external adversary. Every TTP and framework-gap mapped by any other skill in the project is implicitly in scope for this loop's audit; pinning a subset would mis-bound the work.
47
+
48
+ ---
49
+
50
+ ## Threat Context
51
+
52
+ The threat context this skill defends against is not a specific adversary technique — it is the **drift attack against the platform's own currency**: an exceptd installation whose skills, catalogs, framework references, and ATLAS pins age silently between releases until the operator-facing analysis is calibrated to a threat model that no longer exists.
53
+
54
+ Real-world manifestations in mid-2026:
55
+
56
+ - ATLAS v5.1.0 (November 2025) added TTPs that bind to operational reality (AML.T0096 AI-API C2, AML.T0048 erode-integrity-via-drift). A skill pinned to ATLAS v4 cannot route these. **AML.T0010** family was expanded to cover MCP supply-chain compromise mid-cycle.
57
+ - CVE-2026-31431 (Copy Fail) joined CISA KEV in 2026-03-15. Any skill whose `last_threat_review` predates that date and whose body recommends "patch on 30-day SLA" is recommending against a threat model that KEV escalated to days, not weeks.
58
+ - NIST SP 800-63B updated PBKDF2 iteration guidance to ≥ 600,000 in 2022; many compliance attestations still cite the 2017 numbers. A skill that does not track that lag perpetuates the theater.
59
+ - IETF RFC 9116 (security.txt) and the CSAF 2.0 transition both have hard cutover signals that change how `coordinated-vuln-disclosure` should advise.
60
+
61
+ The decay is silent — no alert fires, no signature breaks, no test fails. Skill currency is only verifiable by running this update loop on a published cadence. Without it, **every other skill ships with a hidden expiration date.**
62
+
63
+ ---
64
+
65
+ ## TTP Mapping
66
+
67
+ This skill defends against drift; the TTPs that EXPLOIT a drifted skill are:
68
+
69
+ | Tactic | TTP | What drift enables |
70
+ |---|---|---|
71
+ | Defense Evasion | T1562.001 (Disable or Modify Tools) | Stale skill recommends only the controls the current adversary class already evades |
72
+ | Resource Development | AML.T0016 (Develop Capabilities) | Attacker capability outpaces the catalog the skill cites |
73
+ | Initial Access | AML.T0010 (Supply Chain Compromise) | New attack class (e.g. MCP plugin compromise) isn't yet a skill |
74
+ | Defense Evasion | T1027 (Obfuscated Files or Information) | Detection rules in a skill are for an older obfuscation generation |
75
+ | Impact | AML.T0048 (Erode ML Model Integrity) | Drift in the threat-context section means the operator's mental model is wrong by months |
76
+ | Discovery | T1518 (Software Discovery) | The catalog the skill scans doesn't recognize the adversary's current tool inventory |
77
+
78
+ The update loop does not detect these TTPs — it prevents the skill set from being *vulnerable* to them by structural staleness.
79
+
80
+ ---
81
+
44
82
  ## Why Skills Decay
45
83
 
46
84
  Security skills have a half-life. The specific decay mechanisms are:
@@ -42,6 +42,9 @@ framework_gaps:
42
42
  - SWIFT-CSCF-v2026-1.1
43
43
  - FedRAMP-Rev5-Moderate
44
44
  - CMMC-2.0-Level-2
45
+ - NIS2-Art21-incident-handling
46
+ - UK-CAF-A1
47
+ - AU-Essential-8-App-Hardening
45
48
  rfc_refs:
46
49
  - RFC-8032
47
50
  forward_watch:
@@ -27,6 +27,10 @@ last_threat_review: "2026-05-01"
27
27
 
28
28
  # Threat Model Currency Assessment
29
29
 
30
+ ## Frontmatter Scope
31
+
32
+ The `atlas_refs`, `attack_refs`, and `framework_gaps` arrays are intentionally empty. This skill is a meta-assessment of *every* threat model — its job is to surface gaps against the full 14-class mid-2026 landscape that downstream skills enumerate. Pinning a fixed TTP or framework-gap subset here would understate the assessment's actual coverage (every ATLAS / ATT&CK ID and every framework gap any other skill maps becomes an in-scope currency check). The 14 threat classes are listed in the body; each one references the downstream skill that carries the authoritative TTP and framework-gap IDs.
33
+
30
34
  ## Purpose
31
35
 
32
36
  Most organizational threat models were last substantially revised 2–4 years ago. They describe the threat landscape of 2021–2022: ransomware, supply chain (SolarWinds-era), cloud misconfiguration, credential phishing using template emails. This is not the 2026 threat landscape.
@@ -29,6 +29,9 @@ framework_gaps:
29
29
  - ISO-IEC-23894-2023-clause-7
30
30
  - ISO-IEC-42001-2023-clause-6.1.2
31
31
  - NIST-800-218-SSDF
32
+ - NIS2-Art21-incident-handling
33
+ - UK-CAF-A1
34
+ - AU-Essential-8-App-Hardening
32
35
  rfc_refs: []
33
36
  cwe_refs: []
34
37
  d3fend_refs: []
@@ -36,6 +36,9 @@ framework_gaps:
36
36
  - OWASP-LLM-Top-10-2025-LLM01
37
37
  - NIST-800-218-SSDF
38
38
  - ISO-27001-2022-A.8.28
39
+ - NIS2-Art21-incident-handling
40
+ - UK-CAF-B2
41
+ - AU-Essential-8-App-Hardening
39
42
  rfc_refs:
40
43
  - RFC-8446
41
44
  - RFC-9114
@@ -34,6 +34,12 @@ This skill runs the full learning loop: zero-day description → attack vector e
34
34
 
35
35
  ---
36
36
 
37
+ ## Frontmatter Scope
38
+
39
+ The `atlas_refs`, `attack_refs`, and `framework_gaps` arrays are intentionally empty. This skill exists to *generate* TTP-to-gap mappings from incoming zero-days, not to consume a fixed set — its output flows back into `data/atlas-ttps.json` and `data/framework-control-gaps.json` as new entries. Pinning a static reference set here would mis-frame the loop: every TTP and gap mapped by any other skill is a legitimate input, and the skill's job is to produce the *next* entries, not to inherit a fixed subset.
40
+
41
+ ---
42
+
37
43
  ## Threat Context (mid-2026)
38
44
 
39
45
  The zero-day learning cycle has compressed. The frameworks have not.