@blamejs/exceptd-skills 0.16.14 → 0.16.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -1
- package/CHANGELOG.md +4 -0
- package/README.md +5 -5
- package/bin/exceptd.js +2 -1
- package/data/_indexes/_meta.json +16 -15
- package/data/_indexes/activity-feed.json +9 -2
- package/data/_indexes/chains.json +3597 -206
- package/data/_indexes/currency.json +10 -1
- package/data/_indexes/frequency.json +48 -25
- package/data/_indexes/handoff-dag.json +5 -1
- package/data/_indexes/jurisdiction-map.json +8 -4
- package/data/_indexes/section-offsets.json +85 -0
- package/data/_indexes/stale-content.json +1 -1
- package/data/_indexes/summary-cards.json +37 -0
- package/data/_indexes/token-budget.json +53 -3
- package/data/_indexes/trigger-table.json +48 -0
- package/data/_indexes/xref.json +19 -3
- package/data/cwe-catalog.json +6 -1
- package/data/playbooks/framework.json +1 -0
- package/data/playbooks/sbom.json +21 -6
- package/data/playbooks/self-update-integrity.json +636 -0
- package/manifest-snapshot.json +52 -2
- package/manifest-snapshot.sha256 +1 -1
- package/manifest.json +102 -48
- package/package.json +2 -2
- package/sbom.cdx.json +60 -30
- package/skills/self-update-integrity/skill.md +79 -0
package/sbom.cdx.json
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"bomFormat": "CycloneDX",
|
|
3
3
|
"specVersion": "1.6",
|
|
4
|
-
"serialNumber": "urn:uuid:
|
|
4
|
+
"serialNumber": "urn:uuid:ddba3c25-e008-44bd-8778-18d2b1d24f48",
|
|
5
5
|
"version": 1,
|
|
6
6
|
"metadata": {
|
|
7
|
-
"timestamp": "
|
|
7
|
+
"timestamp": "2143-11-19T04:57:09.000Z",
|
|
8
8
|
"tools": [
|
|
9
9
|
{
|
|
10
10
|
"vendor": "blamejs",
|
|
11
11
|
"name": "scripts/refresh-sbom.js",
|
|
12
|
-
"version": "0.16.
|
|
12
|
+
"version": "0.16.15"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
15
15
|
"component": {
|
|
16
|
-
"bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.16.
|
|
16
|
+
"bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.16.15",
|
|
17
17
|
"type": "application",
|
|
18
18
|
"name": "@blamejs/exceptd-skills",
|
|
19
|
-
"version": "0.16.
|
|
20
|
-
"description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation.
|
|
19
|
+
"version": "0.16.15",
|
|
20
|
+
"description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 47 skills, 11 catalogs (439 CVEs / 174 CWEs / 805 ATT&CK + ICS / 170 ATLAS / 468 D3FEND / 8888 RFCs), 35 jurisdictions, 10-class catalog gap detector + budget gate, real XML parser + canonical-form diff + content-pattern regression detection, Ed25519-signed.",
|
|
21
21
|
"licenses": [
|
|
22
22
|
{
|
|
23
23
|
"license": {
|
|
@@ -25,17 +25,17 @@
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
],
|
|
28
|
-
"purl": "pkg:npm/%40blamejs/exceptd-skills@0.16.
|
|
28
|
+
"purl": "pkg:npm/%40blamejs/exceptd-skills@0.16.15",
|
|
29
29
|
"hashes": [
|
|
30
30
|
{
|
|
31
31
|
"alg": "SHA-256",
|
|
32
|
-
"content": "
|
|
32
|
+
"content": "25697f2d58e577860cb8d7bbbbaab671c8e68f68919b2ea4f7a6d71cf964cf16"
|
|
33
33
|
}
|
|
34
34
|
],
|
|
35
35
|
"externalReferences": [
|
|
36
36
|
{
|
|
37
37
|
"type": "distribution",
|
|
38
|
-
"url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.16.
|
|
38
|
+
"url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.16.15"
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
41
|
"type": "vcs",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
56
|
"name": "exceptd:skill:count",
|
|
57
|
-
"value": "
|
|
57
|
+
"value": "47"
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
60
|
"name": "exceptd:integrity:method",
|
|
@@ -86,11 +86,11 @@
|
|
|
86
86
|
"hashes": [
|
|
87
87
|
{
|
|
88
88
|
"alg": "SHA-256",
|
|
89
|
-
"content": "
|
|
89
|
+
"content": "73316ff6fed755b6eef4882a28c7af48e341a480f19df3f79f7dd56875e3c178"
|
|
90
90
|
},
|
|
91
91
|
{
|
|
92
92
|
"alg": "SHA3-512",
|
|
93
|
-
"content": "
|
|
93
|
+
"content": "78a17ef72a8d11cdf881f78df473e8e0f0d238aee71870c19f2177b5c6dd5291948b7b51ec7df21d9af754fecc6087baba9875eacc67913971c0e67acde1d1be"
|
|
94
94
|
}
|
|
95
95
|
]
|
|
96
96
|
},
|
|
@@ -116,11 +116,11 @@
|
|
|
116
116
|
"hashes": [
|
|
117
117
|
{
|
|
118
118
|
"alg": "SHA-256",
|
|
119
|
-
"content": "
|
|
119
|
+
"content": "f9aff10e9d135c2b3ddd3b71dfaaa4852c0f4ad8315b3cc64e45d436ae061004"
|
|
120
120
|
},
|
|
121
121
|
{
|
|
122
122
|
"alg": "SHA3-512",
|
|
123
|
-
"content": "
|
|
123
|
+
"content": "fcf03767f972e9b13bd4ae04f7796e41570d563b69878274c1eba54e430e28b4c9254263c0d94615a90119a580c2f950d3f99d1f24ac52439c0e47b1bd6c00d5"
|
|
124
124
|
}
|
|
125
125
|
]
|
|
126
126
|
},
|
|
@@ -176,11 +176,11 @@
|
|
|
176
176
|
"hashes": [
|
|
177
177
|
{
|
|
178
178
|
"alg": "SHA-256",
|
|
179
|
-
"content": "
|
|
179
|
+
"content": "4b7b2d204541a053fbdd94723196f6f368a67952e30d6c941ba5419bd3f0d9c1"
|
|
180
180
|
},
|
|
181
181
|
{
|
|
182
182
|
"alg": "SHA3-512",
|
|
183
|
-
"content": "
|
|
183
|
+
"content": "fbdc8fdaf6b82992cf73d77c0678615d26618b4aa698bf71e2e69fb2f9413197ff13fcb2565041cc9b1510dbf156d3a81111b9e835ec56a555e3ac2b09899556"
|
|
184
184
|
}
|
|
185
185
|
]
|
|
186
186
|
},
|
|
@@ -281,11 +281,11 @@
|
|
|
281
281
|
"hashes": [
|
|
282
282
|
{
|
|
283
283
|
"alg": "SHA-256",
|
|
284
|
-
"content": "
|
|
284
|
+
"content": "bb83dfb133c97b8aba15bde9bf7d04ac02a52b90d4471203aff487200e7bbde1"
|
|
285
285
|
},
|
|
286
286
|
{
|
|
287
287
|
"alg": "SHA3-512",
|
|
288
|
-
"content": "
|
|
288
|
+
"content": "bb316671de5bbd311aebc34c39cd000d177bde130712ff2878cae432237337cf79d92a4fffd022d59a370adaf8fdcccfd41b69308ee8e8483330c2cb0b404531"
|
|
289
289
|
}
|
|
290
290
|
]
|
|
291
291
|
},
|
|
@@ -341,11 +341,11 @@
|
|
|
341
341
|
"hashes": [
|
|
342
342
|
{
|
|
343
343
|
"alg": "SHA-256",
|
|
344
|
-
"content": "
|
|
344
|
+
"content": "eb30305b76deddf87b5a128ab416280b0bc908c15cd3ccecd74f3cf063a8dbca"
|
|
345
345
|
},
|
|
346
346
|
{
|
|
347
347
|
"alg": "SHA3-512",
|
|
348
|
-
"content": "
|
|
348
|
+
"content": "b8cb9999b60e7fae82ce025a2a891d13e2d289f9349c3b7aac50806ba171ac772870e97182c3514b82d86b910244137de9e48e0a004aacacca431efb70f56d0a"
|
|
349
349
|
}
|
|
350
350
|
]
|
|
351
351
|
},
|
|
@@ -581,11 +581,11 @@
|
|
|
581
581
|
"hashes": [
|
|
582
582
|
{
|
|
583
583
|
"alg": "SHA-256",
|
|
584
|
-
"content": "
|
|
584
|
+
"content": "90d4c641a4d301402ba6cb9c28ba99083b3c89a5eb03ba3f78dc1a154e6e6824"
|
|
585
585
|
},
|
|
586
586
|
{
|
|
587
587
|
"alg": "SHA3-512",
|
|
588
|
-
"content": "
|
|
588
|
+
"content": "0c6e413a5a9184bc6579e85179d01c006b5f5adba28e471efb4d0c7976dccaba9a81ab942855db136820b55e9b33da38ae045db98c28bb1182feb691fb51626e"
|
|
589
589
|
}
|
|
590
590
|
]
|
|
591
591
|
},
|
|
@@ -776,11 +776,11 @@
|
|
|
776
776
|
"hashes": [
|
|
777
777
|
{
|
|
778
778
|
"alg": "SHA-256",
|
|
779
|
-
"content": "
|
|
779
|
+
"content": "30b2bcf9d032d29e4da0d2fbb372441f9a510b325818485e9135c668748ecbd9"
|
|
780
780
|
},
|
|
781
781
|
{
|
|
782
782
|
"alg": "SHA3-512",
|
|
783
|
-
"content": "
|
|
783
|
+
"content": "42f28be0b807304e39f86d3ddf75129dacf68b6dc0d341e6119c09692f4e0ede17c7d025351337deb900657ee36ced0e951981f4b81d4ea793ff79d19d2b0594"
|
|
784
784
|
}
|
|
785
785
|
]
|
|
786
786
|
},
|
|
@@ -799,6 +799,21 @@
|
|
|
799
799
|
}
|
|
800
800
|
]
|
|
801
801
|
},
|
|
802
|
+
{
|
|
803
|
+
"bom-ref": "file:data/playbooks/self-update-integrity.json",
|
|
804
|
+
"type": "file",
|
|
805
|
+
"name": "data/playbooks/self-update-integrity.json",
|
|
806
|
+
"hashes": [
|
|
807
|
+
{
|
|
808
|
+
"alg": "SHA-256",
|
|
809
|
+
"content": "f069f73dfcfa8148d585ad5976829518c1f0ca37b3a95a7011b7494f78825731"
|
|
810
|
+
},
|
|
811
|
+
{
|
|
812
|
+
"alg": "SHA3-512",
|
|
813
|
+
"content": "70ff865b8e93cad5424a0c50bf487e717c2fdeb469de7775e8f203913b32fec8c3f8ad95d07e30d27989c94db1e328d1271167531fd898e2a84c66b8ca585df2"
|
|
814
|
+
}
|
|
815
|
+
]
|
|
816
|
+
},
|
|
802
817
|
{
|
|
803
818
|
"bom-ref": "file:data/playbooks/supply-chain-recovery.json",
|
|
804
819
|
"type": "file",
|
|
@@ -1781,11 +1796,11 @@
|
|
|
1781
1796
|
"hashes": [
|
|
1782
1797
|
{
|
|
1783
1798
|
"alg": "SHA-256",
|
|
1784
|
-
"content": "
|
|
1799
|
+
"content": "ec619d5899698562c284593dd8a13d9c5045f0700caa175a0278349a3c96a3da"
|
|
1785
1800
|
},
|
|
1786
1801
|
{
|
|
1787
1802
|
"alg": "SHA3-512",
|
|
1788
|
-
"content": "
|
|
1803
|
+
"content": "efb7e3e045cd5c88a59164c8a7c8cdde01b375893d784ce09be7f3651af20417cb13473a7b5c5dea3a08ce8b64f099c221407a9d3e8c6326a0da2fc73f09ad87"
|
|
1789
1804
|
}
|
|
1790
1805
|
]
|
|
1791
1806
|
},
|
|
@@ -1796,11 +1811,11 @@
|
|
|
1796
1811
|
"hashes": [
|
|
1797
1812
|
{
|
|
1798
1813
|
"alg": "SHA-256",
|
|
1799
|
-
"content": "
|
|
1814
|
+
"content": "991feef6541fb4430b787a8426967e7df688a3941b57e2305de780d1d1c2807e"
|
|
1800
1815
|
},
|
|
1801
1816
|
{
|
|
1802
1817
|
"alg": "SHA3-512",
|
|
1803
|
-
"content": "
|
|
1818
|
+
"content": "d8258fd4821dcf21706cc2ace47597e5a3f52976fbbbebc6c20e5a00716a255ef2bcafc9ec7c68ae67cd61d935c51fcb5a320ca601c72229d62ae6623d99de79"
|
|
1804
1819
|
}
|
|
1805
1820
|
]
|
|
1806
1821
|
},
|
|
@@ -1811,11 +1826,11 @@
|
|
|
1811
1826
|
"hashes": [
|
|
1812
1827
|
{
|
|
1813
1828
|
"alg": "SHA-256",
|
|
1814
|
-
"content": "
|
|
1829
|
+
"content": "35fe3df80c4f8717e4eb397f4358a97522cd01bc375df3d1d31710ba43df603b"
|
|
1815
1830
|
},
|
|
1816
1831
|
{
|
|
1817
1832
|
"alg": "SHA3-512",
|
|
1818
|
-
"content": "
|
|
1833
|
+
"content": "b940529b951f34286b9256ee20d888cc79a026cf942f2cdd57443029c926037df48bd8e839ca04cddd6701b1106b32c75e7c2f8203e4e7a18bf30fbc75c3e5ab"
|
|
1819
1834
|
}
|
|
1820
1835
|
]
|
|
1821
1836
|
},
|
|
@@ -3199,6 +3214,21 @@
|
|
|
3199
3214
|
}
|
|
3200
3215
|
]
|
|
3201
3216
|
},
|
|
3217
|
+
{
|
|
3218
|
+
"bom-ref": "file:skills/self-update-integrity/skill.md",
|
|
3219
|
+
"type": "file",
|
|
3220
|
+
"name": "skills/self-update-integrity/skill.md",
|
|
3221
|
+
"hashes": [
|
|
3222
|
+
{
|
|
3223
|
+
"alg": "SHA-256",
|
|
3224
|
+
"content": "305d4841d7434e18812be4b8646eb7a4f7f4416e3646aad3b6e7152d16f0c8af"
|
|
3225
|
+
},
|
|
3226
|
+
{
|
|
3227
|
+
"alg": "SHA3-512",
|
|
3228
|
+
"content": "59dfe4b515245a41fb56d4420e42999ebdf53c7e5f80d491637e0ef71c23bbc1c3eda25d0e6a4e44785940446473a3784e909196d7575d636594ecd9c554e213"
|
|
3229
|
+
}
|
|
3230
|
+
]
|
|
3231
|
+
},
|
|
3202
3232
|
{
|
|
3203
3233
|
"bom-ref": "file:skills/skill-update-loop/skill.md",
|
|
3204
3234
|
"type": "file",
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: self-update-integrity
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
description: Consumer-side self-update and artifact integrity for mid-2026 — signature-verification-before-apply, out-of-band key pinning, anti-rollback/downgrade protection, channel pinning, Subresource Integrity on browser modules, and C2PA / SCITT-TSA transparency verification on received artifacts
|
|
5
|
+
triggers:
|
|
6
|
+
- self update
|
|
7
|
+
- auto update
|
|
8
|
+
- update integrity
|
|
9
|
+
- anti rollback
|
|
10
|
+
- downgrade attack
|
|
11
|
+
- code signing verification
|
|
12
|
+
- key pinning
|
|
13
|
+
- subresource integrity
|
|
14
|
+
- sri
|
|
15
|
+
- import map integrity
|
|
16
|
+
- c2pa
|
|
17
|
+
- content credentials
|
|
18
|
+
- scitt
|
|
19
|
+
- transparency log
|
|
20
|
+
- software supply chain consumer
|
|
21
|
+
- update channel
|
|
22
|
+
discovery_mode: standalone
|
|
23
|
+
data_deps:
|
|
24
|
+
- cve-catalog.json
|
|
25
|
+
- atlas-ttps.json
|
|
26
|
+
- attack-techniques.json
|
|
27
|
+
- framework-control-gaps.json
|
|
28
|
+
- cwe-catalog.json
|
|
29
|
+
- rfc-references.json
|
|
30
|
+
atlas_refs: []
|
|
31
|
+
attack_refs:
|
|
32
|
+
- T1195.002
|
|
33
|
+
- T1574
|
|
34
|
+
framework_gaps:
|
|
35
|
+
- NIST-800-53-SR-11
|
|
36
|
+
- NIS2-Art21-network-security
|
|
37
|
+
- UK-CAF-B4
|
|
38
|
+
- AU-ISM-1556
|
|
39
|
+
cwe_refs:
|
|
40
|
+
- CWE-494
|
|
41
|
+
- CWE-829
|
|
42
|
+
- CWE-353
|
|
43
|
+
- CWE-347
|
|
44
|
+
last_threat_review: "2026-06-02"
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
# Consumer-Side Self-Update & Artifact Integrity
|
|
48
|
+
|
|
49
|
+
## Threat Context (mid-2026)
|
|
50
|
+
|
|
51
|
+
The self-update loop is the highest-privilege code path most products ship: it fetches code and runs it as the application. Publisher-side posture — code signing, SBOM, SLSA attestations — is necessary but useless if the receiving client does not enforce it. The consumer-side failures are an update applied without verifying a signature, a signature verified against a key the update channel itself supplied, a signed-but-older version accepted (downgrade / no anti-rollback) that re-opens a patched CVE, an update fetched over an unauthenticated channel as the sole control, browser modules served without Subresource Integrity, and an apply step that does not gate on the verifier result. A channel compromise (poisoned CDN, mirror, MITM) then yields arbitrary code execution across the installed base.
|
|
52
|
+
|
|
53
|
+
## Framework Lag Declaration
|
|
54
|
+
|
|
55
|
+
Organisational supply-chain controls focus on the publisher: signing, SBOM generation, SLSA build levels. NIST 800-53 SR-11 (component authenticity) covers the supplier side and does not require the consumer's update path to verify signatures against a pinned key before applying or to refuse downgrades. The EU Cyber Resilience Act mandates secure updates for products with digital elements, but conformance is commonly attested by "we ship signed updates" without verifying the receiving client enforces signature + anti-rollback + key-pin. A clean "updates are signed / SLSA-attested / SBOM-published" audit is therefore NON-EVIDENCE for consumer-side update integrity; it confirms publisher posture, not signature-before-apply, key pinning, anti-rollback, or verifier-gating on the receiving client.
|
|
56
|
+
|
|
57
|
+
## TTP Mapping
|
|
58
|
+
|
|
59
|
+
The consumer-side update failures map to MITRE ATT&CK: **T1195.002 (Supply Chain Compromise: Software Supply Chain)** for an update applied without signature verification, against an in-band key, over an unauthenticated channel, or as an unverified browser module / artifact; and **T1574 (Hijack Execution Flow)** for an apply step that swaps the new code into the execution path without gating on the verifier. The weakness classes are CWE-494 (Download of Code Without Integrity Check), CWE-829 (Inclusion of Functionality from an Untrusted Control Sphere), CWE-353 (Missing Support for Integrity Check — e.g. absent SRI), and CWE-347 (Improper Verification of Cryptographic Signature — in-band or unpinned key).
|
|
60
|
+
|
|
61
|
+
## Exploit Availability Matrix
|
|
62
|
+
|
|
63
|
+
These are consumer-side validation gaps exploited from a channel-influencing position, so the exploit is the absent check, not a published CVE. Serving a tampered update to a client that applies without signature verification requires only control of a mirror or an on-path position. A downgrade requires merely a genuinely-signed older release. Substituting a key when trust is in-band requires control of the same endpoint as the update. The real-world priority is driven by the breadth of the installed base reachable through the update channel and whether a single channel compromise yields mass arbitrary-code execution — historically the highest-impact supply-chain outcome.
|
|
64
|
+
|
|
65
|
+
## Analysis Procedure
|
|
66
|
+
|
|
67
|
+
1. Identify every self-updating client/agent and every consumer of externally-sourced executable artifacts (modules, models, signed bundles). 2. Confirm the update path verifies a signature over the artifact BEFORE applying (not a server-provided hash) and fails closed. 3. Confirm the verifying root key is pinned out-of-band (in the binary / OS trust store), not fetched alongside the update. 4. Confirm anti-rollback: the updater refuses a version lower than installed. 5. Confirm the channel is TLS-pinned (defence-in-depth behind the signature). 6. Confirm browser-served modules carry SRI and the import map is integrity-protected. 7. Confirm C2PA content credentials and SCITT/TSA receipts on received artifacts are verified where relied upon, and that the apply gates on the verifier. Run the `self-update-integrity` playbook to execute these as detect indicators with false-positive checks, then score by installed-base breadth.
|
|
68
|
+
|
|
69
|
+
## Output Format
|
|
70
|
+
|
|
71
|
+
Report per update path, marking each consumer-side control enforced / missing / inconclusive (visibility gap). For every missing control, state whether a channel compromise would yield arbitrary-code execution and across how much of the installed base. Distinguish a control delegated to a verifying mechanism (OS package manager, gated verifier) from an absent one. Provide the prioritised remediation (verify signature against a pinned key before apply, enforce anti-rollback, pin the channel, enforce SRI on modules, verify provenance/transparency) and the negative validation tests that prove each fix (tampered update rejected, downgrade rejected, verifier-failure blocks apply) plus a functional test that a legitimate newer update still verifies and applies.
|
|
72
|
+
|
|
73
|
+
## Compliance Theater Check
|
|
74
|
+
|
|
75
|
+
The recurring theater is "our updates are signed, so the channel is secure," "updates come over HTTPS, so they cannot be tampered," and "we have an update verifier." Signing is the publisher side; HTTPS authenticates a CA bundle and falls to a mis-issued cert; a verifier whose output does not gate the apply is decorative. The distinguishing test: verify the client checks the signature against an out-of-band-pinned key before applying, refuses older versions, and blocks the apply on verifier failure. If a swapped artifact, an attacker-supplied key, or an older signed version would be applied, the signing did not protect the consumer and the assurance is paper.
|
|
76
|
+
|
|
77
|
+
## Defensive Countermeasure Mapping
|
|
78
|
+
|
|
79
|
+
Map findings to MITRE D3FEND: signature-before-apply with an out-of-band-pinned key realises Executable Allowlisting and Cryptographic Verification (countering T1195.002); anti-rollback realises Software Version Pinning (countering downgrade reintroduction); channel pinning realises Certificate Pinning; Subresource Integrity realises Resource Integrity Checking on browser modules; verifier-gating realises Execution Flow Integrity (countering T1574). Pair the signature check with provenance (C2PA) and transparency (SCITT/TSA) verification for non-repudiation. The residual risk after consumer-side enforcement is compromise of the publisher's signing key or build pipeline itself, which yields a validly-signed malicious update — addressed publisher-side (supply-chain-integrity) and accepted at the CISO level with key-management oversight.
|