@blamejs/exceptd-skills 0.12.34 → 0.12.35
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/CHANGELOG.md +33 -0
- package/bin/exceptd.js +25 -7
- package/data/_indexes/_meta.json +34 -34
- package/data/_indexes/activity-feed.json +1 -1
- package/data/_indexes/catalog-summaries.json +1 -1
- package/data/_indexes/recipes.json +1 -1
- package/data/_indexes/section-offsets.json +64 -64
- package/data/_indexes/summary-cards.json +1 -1
- package/data/_indexes/token-budget.json +14 -14
- package/lib/playbook-runner.js +16 -1
- package/lib/schemas/skill-frontmatter.schema.json +1 -1
- package/manifest-snapshot.json +1 -1
- package/manifest-snapshot.sha256 +1 -1
- package/manifest.json +79 -79
- package/package.json +1 -1
- package/sbom.cdx.json +48 -48
- package/scripts/builders/catalog-summaries.js +1 -1
- package/scripts/builders/recipes.js +1 -1
- package/skills/age-gates-child-safety/skill.md +4 -4
- package/skills/ai-attack-surface/skill.md +3 -3
- package/skills/ai-c2-detection/skill.md +4 -4
- package/skills/api-security/skill.md +1 -1
- package/skills/attack-surface-pentest/skill.md +3 -3
- package/skills/cloud-security/skill.md +2 -2
- package/skills/compliance-theater/skill.md +2 -2
- package/skills/container-runtime-security/skill.md +2 -2
- package/skills/coordinated-vuln-disclosure/skill.md +1 -1
- package/skills/dlp-gap-analysis/skill.md +4 -4
- package/skills/exploit-scoring/skill.md +1 -1
- package/skills/framework-gap-analysis/skill.md +3 -3
- package/skills/fuzz-testing-strategy/skill.md +1 -1
- package/skills/incident-response-playbook/skill.md +1 -1
- package/skills/mcp-agent-trust/skill.md +1 -1
- package/skills/mlops-security/skill.md +2 -2
- package/skills/ot-ics-security/skill.md +2 -2
- package/skills/policy-exception-gen/skill.md +2 -2
- package/skills/rag-pipeline-security/skill.md +3 -3
- package/skills/ransomware-response/skill.md +1 -1
- package/skills/sector-energy/skill.md +2 -2
- package/skills/sector-federal-government/skill.md +1 -1
- package/skills/sector-financial/skill.md +3 -3
- package/skills/sector-healthcare/skill.md +2 -2
- package/skills/security-maturity-tiers/skill.md +1 -1
- package/skills/skill-update-loop/skill.md +4 -4
- package/skills/supply-chain-integrity/skill.md +1 -1
- package/skills/threat-model-currency/skill.md +7 -7
- package/skills/threat-modeling-methodology/skill.md +1 -1
- package/skills/webapp-security/skill.md +1 -1
- package/skills/zeroday-gap-learn/skill.md +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.12.35 — 2026-05-16
|
|
4
|
+
|
|
5
|
+
Cycle 15 audit pass — security hardening + ATLAS pin sweep across skills + forward-watch backfill. Three angles audited in parallel (performance, exceptd's own input-handling security, forward-watch staleness); two surfaced P1 fixes that ship here.
|
|
6
|
+
|
|
7
|
+
### Security
|
|
8
|
+
|
|
9
|
+
**`--evidence -` (stdin) now enforces the 32 MiB cap.** Pre-fix the stdin branch did `fs.readFileSync(0, "utf8")` with no length limit while the file-path branch enforced `MAX_EVIDENCE_BYTES`. An attacker piping multi-GB JSON would OOM the runner. Stdin now reads in 1 MB chunks and bails at the cap with a structured `ok:false` error + exit 1. New `tests/evidence-input-hardening.test.js` pins both the cap and the small-payload happy path.
|
|
10
|
+
|
|
11
|
+
**Prototype-pollution defense on operator-submitted `precondition_checks`.** Pre-fix `Object.assign(out.precondition_checks, submission.precondition_checks)` re-invoked the `__proto__` setter when the operator's JSON contained a `__proto__` key. JSON.parse keeps `__proto__` as an own data property (CreateDataProperty), but Object.assign reads via `[[Get]]` and writes via `[[Set]]`, which triggers the prototype-rebinding setter. Global `Object.prototype` stayed clean (Node confines the rebind to the assignment target), but the polluted local prototype was a defense-in-depth gap — any future code path calling `.hasOwnProperty()` directly on the bag would observe pollution. Switched to own-key iteration that explicitly skips `__proto__` / `constructor` / `prototype` keys.
|
|
12
|
+
|
|
13
|
+
### Bugs
|
|
14
|
+
|
|
15
|
+
**ATLAS v5.1.0 → v5.4.0 sweep across operator-facing surface.** v0.12.34 fixed README + ARCHITECTURE but cycle 15 found 27 skill bodies, 2 builder scripts, the skill-frontmatter schema, and 17 derived indexes all still citing the stale pin. 30 files modified; canonical pin string `ATLAS v5.4.0 (February 2026)` used uniformly. NYDFS rollout reference "phased in through November 2025" in sector-financial intentionally preserved (different context). The extended docs-pin test now scans `skills/` + `data/_indexes/` + `scripts/` for ATLAS-context mismatches in addition to README + ARCHITECTURE.
|
|
16
|
+
|
|
17
|
+
**5 past-due forward_watch entries re-dated with realized backfill.**
|
|
18
|
+
- *mlops-security* — predicted "ATLAS v5.2 — track AML.T0010 sub-technique expansion." ATLAS shipped v5.4.0 on 2026-02-06; the expansion landed plus "Publish Poisoned AI Agent Tool" and "Escape to Host" techniques. Backfilled with the realized state + re-anchored to ATLAS v5.5 / v6.0 horizon.
|
|
19
|
+
- *age-gates-child-safety AU under-16 ban* — predicted "implementation deferred to late 2025." AU Online Safety Amendment (Social Media Minimum Age) Act 2024 entered force 2025-12-10; 4.7M+ accounts deactivated by mid-Jan 2026; 31 March 2026 formal investigations of Facebook / Instagram / Snapchat / TikTok / YouTube. Backfilled + re-anchored to first civil-penalty proceedings (H2 2026).
|
|
20
|
+
- *age-gates-child-safety UK OSA enforcement* — predicted "first enforcement decisions expected late 2025 / 2026." Ofcom has 80+ investigations open; first £1M OSA fine issued for age-assurance failure. Backfilled + re-anchored to the April / July / November 2026 OSA milestones.
|
|
21
|
+
- *age-gates-child-safety eSafety actions* — same shape; backfilled to the 31 March 2026 formal investigations.
|
|
22
|
+
- *sector-energy TSA Pipeline SD* — predicted "next reissue cycle anticipated mid-2026." Current cadence: SD-Pipeline-2021-02F expires 2 May 2026; expected 02G now overdue as of cycle 15. Updated to reflect current series + re-anchored to H2 2026.
|
|
23
|
+
|
|
24
|
+
### Features
|
|
25
|
+
|
|
26
|
+
**Extended `tests/docs-catalog-counts-pinned.test.js`** to scan `skills/**/*.md`, `data/_indexes/*.json`, and `scripts/**/*.js` for ATLAS version mentions in addition to README + ARCHITECTURE. A future stale-pin in any of those operator-facing files now fails the gate at CI time. Closes the cycle 15 P2 F6 finding which revealed v0.12.34's docs-pin gate was scoped too narrowly.
|
|
27
|
+
|
|
28
|
+
### Internal
|
|
29
|
+
|
|
30
|
+
- Cycle 15 audit: 3 read-only agents dispatched (performance, security, forward-watch). Performance audit confirmed no regression — every CLI op within budget; `cross-ref-api.js` mtime-keyed catalog cache + per-run playbook cache prevent N+1 patterns. Watchlist verb at 99ms has a 30-40ms caching opportunity (deferred to v0.13 backlog).
|
|
31
|
+
- 16/16 playbooks now validate clean (no warnings) — same green state as v0.12.33's cred-stores cleanup.
|
|
32
|
+
- Test count 1125 → 1131 (4 new evidence-input-hardening tests + 1 extended docs-pin test + 1 sanity sweep).
|
|
33
|
+
- 14/14 predeploy gates green.
|
|
34
|
+
|
|
35
|
+
|
|
3
36
|
## 0.12.34 — 2026-05-15
|
|
4
37
|
|
|
5
38
|
Documentation accuracy pass. README.md + ARCHITECTURE.md were still pinning ATLAS v5.1.0 and ATT&CK v17 — outdated for nine releases. v0.12.29 fixed the manifest.json pin (cycle 9 Hard Rule #8 audit) but the operator-facing docs weren't updated. Plus catalog count drift (38 skills → 42; 28 D3FEND entries → 29).
|
package/bin/exceptd.js
CHANGED
|
@@ -732,16 +732,34 @@ function readJsonFile(filePath) {
|
|
|
732
732
|
|
|
733
733
|
function readEvidence(evidenceFlag) {
|
|
734
734
|
if (!evidenceFlag) return {};
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
if (!buf.trim()) return {};
|
|
738
|
-
return JSON.parse(buf);
|
|
739
|
-
}
|
|
740
|
-
// v0.12.12: read enforces a max size to defend against an operator
|
|
741
|
-
// accidentally passing a multi-gigabyte file (binary, log, or
|
|
735
|
+
// v0.12.12: file-path branch enforces a max size to defend against an
|
|
736
|
+
// operator accidentally passing a multi-gigabyte file (binary, log, or
|
|
742
737
|
// adversarial JSON bomb). 32 MB is well beyond any legitimate
|
|
743
738
|
// submission and still drains in a single read on modern hardware.
|
|
739
|
+
// v0.12.35 (cycle 15 security F1): apply the SAME cap to the stdin
|
|
740
|
+
// branch. Pre-fix `--evidence -` was uncapped — an attacker piping
|
|
741
|
+
// multi-GB JSON would OOM the runner. Read in 1 MB chunks and bail
|
|
742
|
+
// at the limit rather than letting Node grow the heap unbounded.
|
|
744
743
|
const MAX_EVIDENCE_BYTES = 32 * 1024 * 1024;
|
|
744
|
+
if (evidenceFlag === "-") {
|
|
745
|
+
// fs.readFileSync(0) does NOT respect a maxBuffer option, so we read
|
|
746
|
+
// incrementally to enforce the cap. Stdin is a pipe / fifo on every
|
|
747
|
+
// platform; reading until EOF in chunks is correct.
|
|
748
|
+
const chunks = [];
|
|
749
|
+
let total = 0;
|
|
750
|
+
const buf = Buffer.alloc(1024 * 1024);
|
|
751
|
+
let n;
|
|
752
|
+
while ((n = fs.readSync(0, buf, 0, buf.length, null)) > 0) {
|
|
753
|
+
total += n;
|
|
754
|
+
if (total > MAX_EVIDENCE_BYTES) {
|
|
755
|
+
throw new Error(`evidence on stdin exceeds size limit: ${total}+ bytes > ${MAX_EVIDENCE_BYTES} byte limit. Pipe a smaller submission, or split into multiple playbook runs.`);
|
|
756
|
+
}
|
|
757
|
+
chunks.push(Buffer.from(buf.subarray(0, n)));
|
|
758
|
+
}
|
|
759
|
+
const text = Buffer.concat(chunks).toString("utf8");
|
|
760
|
+
if (!text.trim()) return {};
|
|
761
|
+
return JSON.parse(text);
|
|
762
|
+
}
|
|
745
763
|
let stat;
|
|
746
764
|
try { stat = fs.statSync(evidenceFlag); }
|
|
747
765
|
catch (e) { throw new Error(`evidence path not readable: ${e.message}`); }
|
package/data/_indexes/_meta.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.1.0",
|
|
3
|
-
"generated_at": "2026-05-
|
|
3
|
+
"generated_at": "2026-05-16T06:44:58.896Z",
|
|
4
4
|
"generator": "scripts/build-indexes.js",
|
|
5
5
|
"source_count": 54,
|
|
6
6
|
"source_hashes": {
|
|
7
|
-
"manifest.json": "
|
|
7
|
+
"manifest.json": "2132d625977bfc7e5715ba150c82dc432460db46b9063e562d4bad44608a244a",
|
|
8
8
|
"data/atlas-ttps.json": "259e76e4252c7a56c17bbe96982a5e37ac89131c2d37a547fe38d64dcacfd763",
|
|
9
9
|
"data/attack-techniques.json": "51f60819aef36e960fd768e44dcc725e137781534fbbb028e5ef6baa21defa1d",
|
|
10
10
|
"data/cve-catalog.json": "55aa571423fd254e6581b22a189a1c0eeb76d467b0ef645d1dfa39f74b28c569",
|
|
@@ -17,45 +17,45 @@
|
|
|
17
17
|
"data/rfc-references.json": "e253a548c8a829d178d5aea601e268724b85c936ccbfa51c2e5d80c5f8efe2b0",
|
|
18
18
|
"data/zeroday-lessons.json": "c927653e6d9d86d1a36c23a3d782b099a49675ccd928cdc204887c79b0cfbbf1",
|
|
19
19
|
"skills/kernel-lpe-triage/skill.md": "8e94bfd38d6db47342fbbe95a0c8df8f7c38743982c13e9de6a1c59cd3783d33",
|
|
20
|
-
"skills/ai-attack-surface/skill.md": "
|
|
21
|
-
"skills/mcp-agent-trust/skill.md": "
|
|
22
|
-
"skills/framework-gap-analysis/skill.md": "
|
|
23
|
-
"skills/compliance-theater/skill.md": "
|
|
24
|
-
"skills/exploit-scoring/skill.md": "
|
|
25
|
-
"skills/rag-pipeline-security/skill.md": "
|
|
26
|
-
"skills/ai-c2-detection/skill.md": "
|
|
27
|
-
"skills/policy-exception-gen/skill.md": "
|
|
28
|
-
"skills/threat-model-currency/skill.md": "
|
|
20
|
+
"skills/ai-attack-surface/skill.md": "853ea46b500fa60b5f5db1137629f8b64447b5df2c8346c15c6cbd1e59285532",
|
|
21
|
+
"skills/mcp-agent-trust/skill.md": "b09a33e71a0cc13ec70e7e750ac4b91887b657d293d92c3cdb49a4e094adcfea",
|
|
22
|
+
"skills/framework-gap-analysis/skill.md": "4994b47c2618d24e5557f2a23de21960f6f12a6d66d1b8780b4de6d9d3735dfe",
|
|
23
|
+
"skills/compliance-theater/skill.md": "5fa6207256d002c42a28a90d15b9a9ef0503ae7dba9b55b4098e2e52607377f4",
|
|
24
|
+
"skills/exploit-scoring/skill.md": "91bab353257383bd21e49005c1c8188b98b46642184dea29729ad45fc732d698",
|
|
25
|
+
"skills/rag-pipeline-security/skill.md": "96d26b90539bda836032c2fc2935e0d5736f40bcd286165979c0ed34f47f3ce6",
|
|
26
|
+
"skills/ai-c2-detection/skill.md": "4f986ac65d4cba36ef9173d204acaf81646a9f7c42623ebba0973ea0108133c0",
|
|
27
|
+
"skills/policy-exception-gen/skill.md": "78a8623700eab1801387e4792611529089b6248ff3faef15d70c0093609ec323",
|
|
28
|
+
"skills/threat-model-currency/skill.md": "9fcddaa06334d104cb160bace92c92cdcb6b2881f579b82970e42fbd3d213a05",
|
|
29
29
|
"skills/global-grc/skill.md": "e0487de49679172347653d8c191d1f269193de6f444f6b0c6396d326e45bd72e",
|
|
30
|
-
"skills/zeroday-gap-learn/skill.md": "
|
|
30
|
+
"skills/zeroday-gap-learn/skill.md": "59a0d7cd85b923b3f5633bdc15c1a88eef7dea6332480d93b0bb0ae93a4cd0fe",
|
|
31
31
|
"skills/pqc-first/skill.md": "a5eb776e1ea3bb422a4c18a3bdf39ad2ec1651b3c25e65c89428ba319141b275",
|
|
32
|
-
"skills/skill-update-loop/skill.md": "
|
|
33
|
-
"skills/security-maturity-tiers/skill.md": "
|
|
32
|
+
"skills/skill-update-loop/skill.md": "0d5b08f71e4853a634344eaf260da90bd7a29d4df48200ee75be878dce3467e2",
|
|
33
|
+
"skills/security-maturity-tiers/skill.md": "2027161ab0a3382ba506cca7be1966e11367bbdf861de316facd54e25fef5761",
|
|
34
34
|
"skills/researcher/skill.md": "51d03d9eaea52d2bbbdd67709035db494d44819ce58931ca025cab3025c9fad7",
|
|
35
|
-
"skills/attack-surface-pentest/skill.md": "
|
|
36
|
-
"skills/fuzz-testing-strategy/skill.md": "
|
|
37
|
-
"skills/dlp-gap-analysis/skill.md": "
|
|
38
|
-
"skills/supply-chain-integrity/skill.md": "
|
|
35
|
+
"skills/attack-surface-pentest/skill.md": "9cb02d9d428ef674ba8af8c935f86ddca197f0ba1f7d216d76ce1b268ae4bb6a",
|
|
36
|
+
"skills/fuzz-testing-strategy/skill.md": "eaab866236c8cb8a6c8ddc5e65d786ee6d598682de6014ed4e83c6cd163a2128",
|
|
37
|
+
"skills/dlp-gap-analysis/skill.md": "ee9fd4928d96b2e9957d8db9dec90c844443fbcf2a292e69040bfa47c78a4f4b",
|
|
38
|
+
"skills/supply-chain-integrity/skill.md": "b44a8704e37d8efcd97d8e998e6b2b454e1bc3ba956c6aaf105aa155ffffd2a8",
|
|
39
39
|
"skills/defensive-countermeasure-mapping/skill.md": "e62c71ba3be2b4d0f7dfa529fec007cba6bee3013f76b93756e3e6310f2d22ab",
|
|
40
40
|
"skills/identity-assurance/skill.md": "6fd734d5cf8eed031537c9ccb1ad11c09ec4e88d31c45d86046a2154a6770990",
|
|
41
|
-
"skills/ot-ics-security/skill.md": "
|
|
42
|
-
"skills/coordinated-vuln-disclosure/skill.md": "
|
|
43
|
-
"skills/threat-modeling-methodology/skill.md": "
|
|
44
|
-
"skills/webapp-security/skill.md": "
|
|
41
|
+
"skills/ot-ics-security/skill.md": "2a30c888e515bed3c121e7396f841e15cad53fe443b3f0a1c3f2670c8c317339",
|
|
42
|
+
"skills/coordinated-vuln-disclosure/skill.md": "0e875953bb8a38a89c8ec5d2a9ef967b12e9a9f166dc9356723f10304fd0535e",
|
|
43
|
+
"skills/threat-modeling-methodology/skill.md": "bb34933a1eee2cd1da98da5a5dada2c7fc7ebb0bddf5afb39e1f6ee26064d151",
|
|
44
|
+
"skills/webapp-security/skill.md": "6fdae41856963df0f8655fb52df7cd26b6b47031f55dfe897003ed9647a73ab5",
|
|
45
45
|
"skills/ai-risk-management/skill.md": "10d31ca594449e1fef4c34ea45448ab30a6ffdc2fe1faf4ccaf0a1dd05d67774",
|
|
46
|
-
"skills/sector-healthcare/skill.md": "
|
|
47
|
-
"skills/sector-financial/skill.md": "
|
|
48
|
-
"skills/sector-federal-government/skill.md": "
|
|
49
|
-
"skills/sector-energy/skill.md": "
|
|
46
|
+
"skills/sector-healthcare/skill.md": "217066e5961fbc3fcd1b5e3df42f299d7aeaf3b5f25e913152836b77f211f96d",
|
|
47
|
+
"skills/sector-financial/skill.md": "77f6355eb7672f2157bf3d18bfe1d6042efe302468ebddd48ffc385655bf4d10",
|
|
48
|
+
"skills/sector-federal-government/skill.md": "4b5b2f46c97a1571eecbb1c92ca40ac69a8cafc9f74f39539a08cb539ee65f39",
|
|
49
|
+
"skills/sector-energy/skill.md": "b3f1a979beab4f22d689ea74c6aa43b7f1b9017a9b2110310adc2af8305fa134",
|
|
50
50
|
"skills/sector-telecom/skill.md": "3489410b0905cbf6b392ea7f7cde35ccd4b03de0d22d2d1b0c671e46d70962c9",
|
|
51
|
-
"skills/api-security/skill.md": "
|
|
52
|
-
"skills/cloud-security/skill.md": "
|
|
53
|
-
"skills/container-runtime-security/skill.md": "
|
|
54
|
-
"skills/mlops-security/skill.md": "
|
|
55
|
-
"skills/incident-response-playbook/skill.md": "
|
|
56
|
-
"skills/ransomware-response/skill.md": "
|
|
51
|
+
"skills/api-security/skill.md": "75dcb1b9395de2be4ca60e53f900692721b7ef66ded3e510a20d17f35daf982d",
|
|
52
|
+
"skills/cloud-security/skill.md": "56f0d5d6cf182d347e84baa95a04c39be51e82da3360dac48fcf5d8c4e56a9c3",
|
|
53
|
+
"skills/container-runtime-security/skill.md": "7e0806b9e13db120f9b65d5f48b33db9f1026c4c2d719838ef0f0c8778ec4365",
|
|
54
|
+
"skills/mlops-security/skill.md": "cb6871691028f55d59e3efe47be2f1d6bf65fa8c6f3cf301e78d5d119fe3616d",
|
|
55
|
+
"skills/incident-response-playbook/skill.md": "0695ee43881527459f657a90276748922347f16dd494ae2b98e2a9396c570a44",
|
|
56
|
+
"skills/ransomware-response/skill.md": "15de039c5679215b7ceb9a55494f614b06fe618aa0f69ce8aff004dc9a841fa4",
|
|
57
57
|
"skills/email-security-anti-phishing/skill.md": "b5a7693b3ddbd6cd83303d092bc5e324db431245d25c4945d9f65fcffa1995e7",
|
|
58
|
-
"skills/age-gates-child-safety/skill.md": "
|
|
58
|
+
"skills/age-gates-child-safety/skill.md": "66c7f6537077e4e949214ebf3864cb75de0f50f80fa25d25365c6d7fe485dc7a",
|
|
59
59
|
"skills/cloud-iam-incident/skill.md": "10e2af2cf8292f457cd3877bcee37f6ee30c80037a3ef5b367fba25195c7a791",
|
|
60
60
|
"skills/idp-incident-response/skill.md": "3d75d7a0fc5b9a3c584ac5c6510f8b6bd63b7b780488541eb193250ae795b4e2"
|
|
61
61
|
},
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"handoff_dag_nodes": 42,
|
|
79
79
|
"summary_cards": 42,
|
|
80
80
|
"section_offsets_skills": 42,
|
|
81
|
-
"token_budget_total_approx":
|
|
81
|
+
"token_budget_total_approx": 397777,
|
|
82
82
|
"recipes": 8,
|
|
83
83
|
"jurisdiction_clocks": 29,
|
|
84
84
|
"did_ladders": 8,
|
|
@@ -301,7 +301,7 @@
|
|
|
301
301
|
"type": "skill_review",
|
|
302
302
|
"artifact": "ai-attack-surface",
|
|
303
303
|
"path": "skills/ai-attack-surface/skill.md",
|
|
304
|
-
"note": "Comprehensive AI/ML attack surface assessment mapped to MITRE ATLAS v5.
|
|
304
|
+
"note": "Comprehensive AI/ML attack surface assessment mapped to MITRE ATLAS v5.4.0 with gap flags"
|
|
305
305
|
},
|
|
306
306
|
{
|
|
307
307
|
"date": "2026-05-01",
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"catalogs": {
|
|
8
8
|
"atlas-ttps.json": {
|
|
9
9
|
"path": "data/atlas-ttps.json",
|
|
10
|
-
"purpose": "MITRE ATLAS TTPs (AML.T0xxx) cited by skills, with tactic, name, description. Pinned to ATLAS v5.
|
|
10
|
+
"purpose": "MITRE ATLAS TTPs (AML.T0xxx) cited by skills, with tactic, name, description. Pinned to ATLAS v5.4.0 (February 2026).",
|
|
11
11
|
"schema_version": "1.0.0",
|
|
12
12
|
"last_updated": "2026-05-15",
|
|
13
13
|
"tlp": "CLEAR",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"steps": [
|
|
20
20
|
{
|
|
21
21
|
"skill": "ai-attack-surface",
|
|
22
|
-
"why": "Comprehensive attack-surface inventory mapped to ATLAS v5.
|
|
22
|
+
"why": "Comprehensive attack-surface inventory mapped to ATLAS v5.4.0 with gap flags."
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
25
|
"skill": "ai-c2-detection",
|
|
@@ -150,7 +150,7 @@
|
|
|
150
150
|
"h3_count": 0
|
|
151
151
|
},
|
|
152
152
|
{
|
|
153
|
-
"name": "TTP Mapping (MITRE ATLAS v5.
|
|
153
|
+
"name": "TTP Mapping (MITRE ATLAS v5.4.0)",
|
|
154
154
|
"normalized_name": "ttp-mapping",
|
|
155
155
|
"line": 166,
|
|
156
156
|
"byte_start": 13330,
|
|
@@ -329,7 +329,7 @@
|
|
|
329
329
|
"h3_count": 1
|
|
330
330
|
},
|
|
331
331
|
{
|
|
332
|
-
"name": "TTP Mapping (MITRE ATLAS v5.
|
|
332
|
+
"name": "TTP Mapping (MITRE ATLAS v5.4.0 and ATT&CK)",
|
|
333
333
|
"normalized_name": "ttp-mapping",
|
|
334
334
|
"line": 70,
|
|
335
335
|
"byte_start": 5908,
|
|
@@ -432,7 +432,7 @@
|
|
|
432
432
|
"h3_count": 0
|
|
433
433
|
},
|
|
434
434
|
{
|
|
435
|
-
"name": "TTP Mapping (MITRE ATLAS v5.
|
|
435
|
+
"name": "TTP Mapping (MITRE ATLAS v5.4.0 and ATT&CK)",
|
|
436
436
|
"normalized_name": "ttp-mapping",
|
|
437
437
|
"line": 73,
|
|
438
438
|
"byte_start": 7766,
|
|
@@ -674,7 +674,7 @@
|
|
|
674
674
|
"h3_count": 0
|
|
675
675
|
},
|
|
676
676
|
{
|
|
677
|
-
"name": "TTP Mapping (MITRE ATLAS v5.
|
|
677
|
+
"name": "TTP Mapping (MITRE ATLAS v5.4.0)",
|
|
678
678
|
"normalized_name": "ttp-mapping",
|
|
679
679
|
"line": 183,
|
|
680
680
|
"byte_start": 12490,
|
|
@@ -795,7 +795,7 @@
|
|
|
795
795
|
"h3_count": 2
|
|
796
796
|
},
|
|
797
797
|
{
|
|
798
|
-
"name": "TTP Mapping (MITRE ATLAS v5.
|
|
798
|
+
"name": "TTP Mapping (MITRE ATLAS v5.4.0 + MITRE ATT&CK)",
|
|
799
799
|
"normalized_name": "ttp-mapping",
|
|
800
800
|
"line": 324,
|
|
801
801
|
"byte_start": 14009,
|
|
@@ -898,7 +898,7 @@
|
|
|
898
898
|
"h3_count": 0
|
|
899
899
|
},
|
|
900
900
|
{
|
|
901
|
-
"name": "TTP Mapping (MITRE ATLAS v5.
|
|
901
|
+
"name": "TTP Mapping (MITRE ATLAS v5.4.0 and ATT&CK)",
|
|
902
902
|
"normalized_name": "ttp-mapping",
|
|
903
903
|
"line": 83,
|
|
904
904
|
"byte_start": 6689,
|
|
@@ -1812,7 +1812,7 @@
|
|
|
1812
1812
|
"h3_count": 0
|
|
1813
1813
|
},
|
|
1814
1814
|
{
|
|
1815
|
-
"name": "TTP Mapping (MITRE ATLAS v5.
|
|
1815
|
+
"name": "TTP Mapping (MITRE ATLAS v5.4.0 + MITRE ATT&CK v17)",
|
|
1816
1816
|
"normalized_name": "ttp-mapping",
|
|
1817
1817
|
"line": 124,
|
|
1818
1818
|
"byte_start": 10961,
|
|
@@ -1897,7 +1897,7 @@
|
|
|
1897
1897
|
"h3_count": 0
|
|
1898
1898
|
},
|
|
1899
1899
|
{
|
|
1900
|
-
"name": "TTP Mapping (MITRE ATLAS v5.
|
|
1900
|
+
"name": "TTP Mapping (MITRE ATLAS v5.4.0 + MITRE ATT&CK Enterprise)",
|
|
1901
1901
|
"normalized_name": "ttp-mapping",
|
|
1902
1902
|
"line": 90,
|
|
1903
1903
|
"byte_start": 9741,
|
|
@@ -1982,7 +1982,7 @@
|
|
|
1982
1982
|
"h3_count": 1
|
|
1983
1983
|
},
|
|
1984
1984
|
{
|
|
1985
|
-
"name": "TTP Mapping (MITRE ATLAS v5.
|
|
1985
|
+
"name": "TTP Mapping (MITRE ATLAS v5.4.0 + MITRE ATT&CK)",
|
|
1986
1986
|
"normalized_name": "ttp-mapping",
|
|
1987
1987
|
"line": 128,
|
|
1988
1988
|
"byte_start": 15001,
|
|
@@ -2622,7 +2622,7 @@
|
|
|
2622
2622
|
"h3_count": 0
|
|
2623
2623
|
},
|
|
2624
2624
|
{
|
|
2625
|
-
"name": "TTP Mapping (MITRE ATT&CK Enterprise + ATLAS v5.
|
|
2625
|
+
"name": "TTP Mapping (MITRE ATT&CK Enterprise + ATLAS v5.4.0)",
|
|
2626
2626
|
"normalized_name": "ttp-mapping",
|
|
2627
2627
|
"line": 112,
|
|
2628
2628
|
"byte_start": 8673,
|
|
@@ -3073,21 +3073,21 @@
|
|
|
3073
3073
|
},
|
|
3074
3074
|
"sector-energy": {
|
|
3075
3075
|
"path": "skills/sector-energy/skill.md",
|
|
3076
|
-
"total_bytes":
|
|
3076
|
+
"total_bytes": 54006,
|
|
3077
3077
|
"total_lines": 413,
|
|
3078
3078
|
"frontmatter": {
|
|
3079
3079
|
"line_start": 1,
|
|
3080
3080
|
"line_end": 64,
|
|
3081
3081
|
"byte_start": 0,
|
|
3082
|
-
"byte_end":
|
|
3082
|
+
"byte_end": 2547
|
|
3083
3083
|
},
|
|
3084
3084
|
"sections": [
|
|
3085
3085
|
{
|
|
3086
3086
|
"name": "Threat Context (mid-2026)",
|
|
3087
3087
|
"normalized_name": "threat-context",
|
|
3088
3088
|
"line": 70,
|
|
3089
|
-
"byte_start":
|
|
3090
|
-
"byte_end":
|
|
3089
|
+
"byte_start": 3283,
|
|
3090
|
+
"byte_end": 8636,
|
|
3091
3091
|
"bytes": 5353,
|
|
3092
3092
|
"h3_count": 0
|
|
3093
3093
|
},
|
|
@@ -3095,8 +3095,8 @@
|
|
|
3095
3095
|
"name": "Framework Lag Declaration",
|
|
3096
3096
|
"normalized_name": "framework-lag-declaration",
|
|
3097
3097
|
"line": 96,
|
|
3098
|
-
"byte_start":
|
|
3099
|
-
"byte_end":
|
|
3098
|
+
"byte_start": 8636,
|
|
3099
|
+
"byte_end": 16973,
|
|
3100
3100
|
"bytes": 8337,
|
|
3101
3101
|
"h3_count": 0
|
|
3102
3102
|
},
|
|
@@ -3104,8 +3104,8 @@
|
|
|
3104
3104
|
"name": "TTP Mapping",
|
|
3105
3105
|
"normalized_name": "ttp-mapping",
|
|
3106
3106
|
"line": 121,
|
|
3107
|
-
"byte_start":
|
|
3108
|
-
"byte_end":
|
|
3107
|
+
"byte_start": 16973,
|
|
3108
|
+
"byte_end": 23349,
|
|
3109
3109
|
"bytes": 6376,
|
|
3110
3110
|
"h3_count": 0
|
|
3111
3111
|
},
|
|
@@ -3113,8 +3113,8 @@
|
|
|
3113
3113
|
"name": "Exploit Availability Matrix",
|
|
3114
3114
|
"normalized_name": "exploit-availability-matrix",
|
|
3115
3115
|
"line": 147,
|
|
3116
|
-
"byte_start":
|
|
3117
|
-
"byte_end":
|
|
3116
|
+
"byte_start": 23349,
|
|
3117
|
+
"byte_end": 27355,
|
|
3118
3118
|
"bytes": 4006,
|
|
3119
3119
|
"h3_count": 0
|
|
3120
3120
|
},
|
|
@@ -3122,8 +3122,8 @@
|
|
|
3122
3122
|
"name": "Analysis Procedure",
|
|
3123
3123
|
"normalized_name": "analysis-procedure",
|
|
3124
3124
|
"line": 165,
|
|
3125
|
-
"byte_start":
|
|
3126
|
-
"byte_end":
|
|
3125
|
+
"byte_start": 27355,
|
|
3126
|
+
"byte_end": 38301,
|
|
3127
3127
|
"bytes": 10946,
|
|
3128
3128
|
"h3_count": 13
|
|
3129
3129
|
},
|
|
@@ -3131,8 +3131,8 @@
|
|
|
3131
3131
|
"name": "Output Format",
|
|
3132
3132
|
"normalized_name": "output-format",
|
|
3133
3133
|
"line": 277,
|
|
3134
|
-
"byte_start":
|
|
3135
|
-
"byte_end":
|
|
3134
|
+
"byte_start": 38301,
|
|
3135
|
+
"byte_end": 41089,
|
|
3136
3136
|
"bytes": 2788,
|
|
3137
3137
|
"h3_count": 13
|
|
3138
3138
|
},
|
|
@@ -3140,8 +3140,8 @@
|
|
|
3140
3140
|
"name": "Compliance Theater Check",
|
|
3141
3141
|
"normalized_name": "compliance-theater-check",
|
|
3142
3142
|
"line": 342,
|
|
3143
|
-
"byte_start":
|
|
3144
|
-
"byte_end":
|
|
3143
|
+
"byte_start": 41089,
|
|
3144
|
+
"byte_end": 46080,
|
|
3145
3145
|
"bytes": 4991,
|
|
3146
3146
|
"h3_count": 0
|
|
3147
3147
|
},
|
|
@@ -3149,8 +3149,8 @@
|
|
|
3149
3149
|
"name": "Defensive Countermeasure Mapping",
|
|
3150
3150
|
"normalized_name": "defensive-countermeasure-mapping",
|
|
3151
3151
|
"line": 380,
|
|
3152
|
-
"byte_start":
|
|
3153
|
-
"byte_end":
|
|
3152
|
+
"byte_start": 46080,
|
|
3153
|
+
"byte_end": 50631,
|
|
3154
3154
|
"bytes": 4551,
|
|
3155
3155
|
"h3_count": 0
|
|
3156
3156
|
},
|
|
@@ -3158,8 +3158,8 @@
|
|
|
3158
3158
|
"name": "Hand-Off / Related Skills",
|
|
3159
3159
|
"normalized_name": "hand-off",
|
|
3160
3160
|
"line": 396,
|
|
3161
|
-
"byte_start":
|
|
3162
|
-
"byte_end":
|
|
3161
|
+
"byte_start": 50631,
|
|
3162
|
+
"byte_end": 54006,
|
|
3163
3163
|
"bytes": 3375,
|
|
3164
3164
|
"h3_count": 0
|
|
3165
3165
|
}
|
|
@@ -3289,7 +3289,7 @@
|
|
|
3289
3289
|
"h3_count": 0
|
|
3290
3290
|
},
|
|
3291
3291
|
{
|
|
3292
|
-
"name": "TTP Mapping (MITRE ATT&CK Enterprise + ATLAS v5.
|
|
3292
|
+
"name": "TTP Mapping (MITRE ATT&CK Enterprise + ATLAS v5.4.0)",
|
|
3293
3293
|
"normalized_name": "ttp-mapping",
|
|
3294
3294
|
"line": 124,
|
|
3295
3295
|
"byte_start": 10439,
|
|
@@ -3543,21 +3543,21 @@
|
|
|
3543
3543
|
},
|
|
3544
3544
|
"mlops-security": {
|
|
3545
3545
|
"path": "skills/mlops-security/skill.md",
|
|
3546
|
-
"total_bytes":
|
|
3546
|
+
"total_bytes": 45439,
|
|
3547
3547
|
"total_lines": 330,
|
|
3548
3548
|
"frontmatter": {
|
|
3549
3549
|
"line_start": 1,
|
|
3550
3550
|
"line_end": 66,
|
|
3551
3551
|
"byte_start": 0,
|
|
3552
|
-
"byte_end":
|
|
3552
|
+
"byte_end": 2398
|
|
3553
3553
|
},
|
|
3554
3554
|
"sections": [
|
|
3555
3555
|
{
|
|
3556
3556
|
"name": "Threat Context (mid-2026)",
|
|
3557
3557
|
"normalized_name": "threat-context",
|
|
3558
3558
|
"line": 70,
|
|
3559
|
-
"byte_start":
|
|
3560
|
-
"byte_end":
|
|
3559
|
+
"byte_start": 2437,
|
|
3560
|
+
"byte_end": 8267,
|
|
3561
3561
|
"bytes": 5830,
|
|
3562
3562
|
"h3_count": 0
|
|
3563
3563
|
},
|
|
@@ -3565,8 +3565,8 @@
|
|
|
3565
3565
|
"name": "Framework Lag Declaration",
|
|
3566
3566
|
"normalized_name": "framework-lag-declaration",
|
|
3567
3567
|
"line": 88,
|
|
3568
|
-
"byte_start":
|
|
3569
|
-
"byte_end":
|
|
3568
|
+
"byte_start": 8267,
|
|
3569
|
+
"byte_end": 14049,
|
|
3570
3570
|
"bytes": 5782,
|
|
3571
3571
|
"h3_count": 0
|
|
3572
3572
|
},
|
|
@@ -3574,8 +3574,8 @@
|
|
|
3574
3574
|
"name": "TTP Mapping",
|
|
3575
3575
|
"normalized_name": "ttp-mapping",
|
|
3576
3576
|
"line": 112,
|
|
3577
|
-
"byte_start":
|
|
3578
|
-
"byte_end":
|
|
3577
|
+
"byte_start": 14049,
|
|
3578
|
+
"byte_end": 18425,
|
|
3579
3579
|
"bytes": 4376,
|
|
3580
3580
|
"h3_count": 0
|
|
3581
3581
|
},
|
|
@@ -3583,8 +3583,8 @@
|
|
|
3583
3583
|
"name": "Exploit Availability Matrix",
|
|
3584
3584
|
"normalized_name": "exploit-availability-matrix",
|
|
3585
3585
|
"line": 137,
|
|
3586
|
-
"byte_start":
|
|
3587
|
-
"byte_end":
|
|
3586
|
+
"byte_start": 18425,
|
|
3587
|
+
"byte_end": 23911,
|
|
3588
3588
|
"bytes": 5486,
|
|
3589
3589
|
"h3_count": 0
|
|
3590
3590
|
},
|
|
@@ -3592,8 +3592,8 @@
|
|
|
3592
3592
|
"name": "Analysis Procedure",
|
|
3593
3593
|
"normalized_name": "analysis-procedure",
|
|
3594
3594
|
"line": 163,
|
|
3595
|
-
"byte_start":
|
|
3596
|
-
"byte_end":
|
|
3595
|
+
"byte_start": 23911,
|
|
3596
|
+
"byte_end": 32980,
|
|
3597
3597
|
"bytes": 9069,
|
|
3598
3598
|
"h3_count": 4
|
|
3599
3599
|
},
|
|
@@ -3601,8 +3601,8 @@
|
|
|
3601
3601
|
"name": "Output Format",
|
|
3602
3602
|
"normalized_name": "output-format",
|
|
3603
3603
|
"line": 228,
|
|
3604
|
-
"byte_start":
|
|
3605
|
-
"byte_end":
|
|
3604
|
+
"byte_start": 32980,
|
|
3605
|
+
"byte_end": 35658,
|
|
3606
3606
|
"bytes": 2678,
|
|
3607
3607
|
"h3_count": 10
|
|
3608
3608
|
},
|
|
@@ -3610,8 +3610,8 @@
|
|
|
3610
3610
|
"name": "Compliance Theater Check",
|
|
3611
3611
|
"normalized_name": "compliance-theater-check",
|
|
3612
3612
|
"line": 281,
|
|
3613
|
-
"byte_start":
|
|
3614
|
-
"byte_end":
|
|
3613
|
+
"byte_start": 35658,
|
|
3614
|
+
"byte_end": 38589,
|
|
3615
3615
|
"bytes": 2931,
|
|
3616
3616
|
"h3_count": 0
|
|
3617
3617
|
},
|
|
@@ -3619,8 +3619,8 @@
|
|
|
3619
3619
|
"name": "Defensive Countermeasure Mapping",
|
|
3620
3620
|
"normalized_name": "defensive-countermeasure-mapping",
|
|
3621
3621
|
"line": 297,
|
|
3622
|
-
"byte_start":
|
|
3623
|
-
"byte_end":
|
|
3622
|
+
"byte_start": 38589,
|
|
3623
|
+
"byte_end": 42509,
|
|
3624
3624
|
"bytes": 3920,
|
|
3625
3625
|
"h3_count": 0
|
|
3626
3626
|
},
|
|
@@ -3628,8 +3628,8 @@
|
|
|
3628
3628
|
"name": "Hand-Off / Related Skills",
|
|
3629
3629
|
"normalized_name": "hand-off",
|
|
3630
3630
|
"line": 317,
|
|
3631
|
-
"byte_start":
|
|
3632
|
-
"byte_end":
|
|
3631
|
+
"byte_start": 42509,
|
|
3632
|
+
"byte_end": 45439,
|
|
3633
3633
|
"bytes": 2930,
|
|
3634
3634
|
"h3_count": 0
|
|
3635
3635
|
}
|
|
@@ -3919,7 +3919,7 @@
|
|
|
3919
3919
|
},
|
|
3920
3920
|
"age-gates-child-safety": {
|
|
3921
3921
|
"path": "skills/age-gates-child-safety/skill.md",
|
|
3922
|
-
"total_bytes":
|
|
3922
|
+
"total_bytes": 69650,
|
|
3923
3923
|
"total_lines": 460,
|
|
3924
3924
|
"frontmatter": {
|
|
3925
3925
|
"line_start": 1,
|
|
@@ -3960,16 +3960,16 @@
|
|
|
3960
3960
|
"normalized_name": "exploit-availability-matrix",
|
|
3961
3961
|
"line": 144,
|
|
3962
3962
|
"byte_start": 27288,
|
|
3963
|
-
"byte_end":
|
|
3964
|
-
"bytes":
|
|
3963
|
+
"byte_end": 35354,
|
|
3964
|
+
"bytes": 8066,
|
|
3965
3965
|
"h3_count": 0
|
|
3966
3966
|
},
|
|
3967
3967
|
{
|
|
3968
3968
|
"name": "Analysis Procedure",
|
|
3969
3969
|
"normalized_name": "analysis-procedure",
|
|
3970
3970
|
"line": 167,
|
|
3971
|
-
"byte_start":
|
|
3972
|
-
"byte_end":
|
|
3971
|
+
"byte_start": 35354,
|
|
3972
|
+
"byte_end": 49487,
|
|
3973
3973
|
"bytes": 14133,
|
|
3974
3974
|
"h3_count": 4
|
|
3975
3975
|
},
|
|
@@ -3977,8 +3977,8 @@
|
|
|
3977
3977
|
"name": "Output Format",
|
|
3978
3978
|
"normalized_name": "output-format",
|
|
3979
3979
|
"line": 291,
|
|
3980
|
-
"byte_start":
|
|
3981
|
-
"byte_end":
|
|
3980
|
+
"byte_start": 49487,
|
|
3981
|
+
"byte_end": 54090,
|
|
3982
3982
|
"bytes": 4603,
|
|
3983
3983
|
"h3_count": 14
|
|
3984
3984
|
},
|
|
@@ -3986,8 +3986,8 @@
|
|
|
3986
3986
|
"name": "Compliance Theater Check",
|
|
3987
3987
|
"normalized_name": "compliance-theater-check",
|
|
3988
3988
|
"line": 372,
|
|
3989
|
-
"byte_start":
|
|
3990
|
-
"byte_end":
|
|
3989
|
+
"byte_start": 54090,
|
|
3990
|
+
"byte_end": 60175,
|
|
3991
3991
|
"bytes": 6085,
|
|
3992
3992
|
"h3_count": 0
|
|
3993
3993
|
},
|
|
@@ -3995,8 +3995,8 @@
|
|
|
3995
3995
|
"name": "Defensive Countermeasure Mapping",
|
|
3996
3996
|
"normalized_name": "defensive-countermeasure-mapping",
|
|
3997
3997
|
"line": 422,
|
|
3998
|
-
"byte_start":
|
|
3999
|
-
"byte_end":
|
|
3998
|
+
"byte_start": 60175,
|
|
3999
|
+
"byte_end": 65317,
|
|
4000
4000
|
"bytes": 5142,
|
|
4001
4001
|
"h3_count": 0
|
|
4002
4002
|
},
|
|
@@ -4004,8 +4004,8 @@
|
|
|
4004
4004
|
"name": "Hand-Off / Related Skills",
|
|
4005
4005
|
"normalized_name": "hand-off",
|
|
4006
4006
|
"line": 442,
|
|
4007
|
-
"byte_start":
|
|
4008
|
-
"byte_end":
|
|
4007
|
+
"byte_start": 65317,
|
|
4008
|
+
"byte_end": 69650,
|
|
4009
4009
|
"bytes": 4333,
|
|
4010
4010
|
"h3_count": 0
|
|
4011
4011
|
}
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
]
|
|
61
61
|
},
|
|
62
62
|
"ai-attack-surface": {
|
|
63
|
-
"description": "Comprehensive AI/ML attack surface assessment mapped to MITRE ATLAS v5.
|
|
63
|
+
"description": "Comprehensive AI/ML attack surface assessment mapped to MITRE ATLAS v5.4.0 with gap flags",
|
|
64
64
|
"threat_context_excerpt": "The AI attack surface is not speculative. It is actively exploited. The following are confirmed, documented threats as of mid-2026.",
|
|
65
65
|
"produces": "```\n## AI Attack Surface Assessment\n\n**Assessment Date:** YYYY-MM-DD\n**Scope:** [systems/applications assessed]\n\n### Surface Inventory\n| Component | Type | External Input | Tool Use | Risk Level |\n|-----------|------|---------------|----------|------------|\n| [name] | [LLM app / MCP server / coding assistant] | [Yes/No] | [Yes/No] | [Critical/High/Medium/Low] |\n\n### Prompt Injection Exposure\n[Per component: injection surface score, current defenses, estimated bypass rate, recommended controls]\n\n### MCP Trust Assessment\n[Per installed MCP server: signed/unsigned, allowlist status, auth status, ...",
|
|
66
66
|
"key_xrefs": {
|