@blamejs/exceptd-skills 0.16.13 → 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 +3 -1
- package/CHANGELOG.md +8 -0
- package/README.md +5 -5
- package/bin/exceptd.js +3 -0
- package/data/_indexes/_meta.json +17 -15
- package/data/_indexes/activity-feed.json +16 -2
- package/data/_indexes/chains.json +17453 -1207
- package/data/_indexes/currency.json +19 -1
- package/data/_indexes/frequency.json +103 -41
- package/data/_indexes/handoff-dag.json +9 -1
- package/data/_indexes/jurisdiction-map.json +9 -4
- package/data/_indexes/section-offsets.json +170 -0
- package/data/_indexes/stale-content.json +1 -1
- package/data/_indexes/summary-cards.json +75 -0
- package/data/_indexes/token-budget.json +103 -3
- package/data/_indexes/trigger-table.json +96 -0
- package/data/_indexes/xref.json +40 -3
- package/data/cwe-catalog.json +13 -2
- package/data/playbooks/audit-log-integrity.json +637 -0
- package/data/playbooks/cred-stores.json +1 -0
- package/data/playbooks/framework.json +2 -0
- package/data/playbooks/mail-server-hardening.json +3 -1
- package/data/playbooks/network-trust.json +2 -1
- package/data/playbooks/sbom.json +21 -6
- package/data/playbooks/self-update-integrity.json +636 -0
- package/data/playbooks/vc-wallet-trust.json +2 -1
- package/manifest-snapshot.json +103 -2
- package/manifest-snapshot.sha256 +1 -1
- package/manifest.json +156 -47
- package/package.json +2 -2
- package/sbom.cdx.json +98 -38
- package/skills/audit-log-integrity/skill.md +80 -0
- 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
|
},
|
|
@@ -454,6 +454,21 @@
|
|
|
454
454
|
}
|
|
455
455
|
]
|
|
456
456
|
},
|
|
457
|
+
{
|
|
458
|
+
"bom-ref": "file:data/playbooks/audit-log-integrity.json",
|
|
459
|
+
"type": "file",
|
|
460
|
+
"name": "data/playbooks/audit-log-integrity.json",
|
|
461
|
+
"hashes": [
|
|
462
|
+
{
|
|
463
|
+
"alg": "SHA-256",
|
|
464
|
+
"content": "0ed3f7e7eb38c7c6c21335de82fea68a7392de298d7d407fd2ce9f41cd94d87d"
|
|
465
|
+
},
|
|
466
|
+
{
|
|
467
|
+
"alg": "SHA3-512",
|
|
468
|
+
"content": "2199f512f25067b732318e1aa8bb4418b50800e5bd8c7cd230da991733ca7ebd388429e1ad15a84708ed0e1b958cb0257fe0c44624b90b136ce4ab73ad787949"
|
|
469
|
+
}
|
|
470
|
+
]
|
|
471
|
+
},
|
|
457
472
|
{
|
|
458
473
|
"bom-ref": "file:data/playbooks/cicd-pipeline-compromise.json",
|
|
459
474
|
"type": "file",
|
|
@@ -521,11 +536,11 @@
|
|
|
521
536
|
"hashes": [
|
|
522
537
|
{
|
|
523
538
|
"alg": "SHA-256",
|
|
524
|
-
"content": "
|
|
539
|
+
"content": "45d8392bdce3b384d3b88e02b196898ddb65fab44b975a34ab6b14eefdb5f858"
|
|
525
540
|
},
|
|
526
541
|
{
|
|
527
542
|
"alg": "SHA3-512",
|
|
528
|
-
"content": "
|
|
543
|
+
"content": "60a616fb7c19a395558b14823b59d59b43ce318a33eca61111602caee349153de0a7a6dff0c3b220ea5e7adb519e9c3ee64c7ab0907d4c60cd112fcb84f3fa74"
|
|
529
544
|
}
|
|
530
545
|
]
|
|
531
546
|
},
|
|
@@ -566,11 +581,11 @@
|
|
|
566
581
|
"hashes": [
|
|
567
582
|
{
|
|
568
583
|
"alg": "SHA-256",
|
|
569
|
-
"content": "
|
|
584
|
+
"content": "90d4c641a4d301402ba6cb9c28ba99083b3c89a5eb03ba3f78dc1a154e6e6824"
|
|
570
585
|
},
|
|
571
586
|
{
|
|
572
587
|
"alg": "SHA3-512",
|
|
573
|
-
"content": "
|
|
588
|
+
"content": "0c6e413a5a9184bc6579e85179d01c006b5f5adba28e471efb4d0c7976dccaba9a81ab942855db136820b55e9b33da38ae045db98c28bb1182feb691fb51626e"
|
|
574
589
|
}
|
|
575
590
|
]
|
|
576
591
|
},
|
|
@@ -671,11 +686,11 @@
|
|
|
671
686
|
"hashes": [
|
|
672
687
|
{
|
|
673
688
|
"alg": "SHA-256",
|
|
674
|
-
"content": "
|
|
689
|
+
"content": "544af47dcaf49d0f1d3d5e97cfba7d3af4ff35943b8fab50b96e19463d3bc2f4"
|
|
675
690
|
},
|
|
676
691
|
{
|
|
677
692
|
"alg": "SHA3-512",
|
|
678
|
-
"content": "
|
|
693
|
+
"content": "a960542d708e486a45f76c1e38e1a2a8fc8d49cd7e41992f4b7a86432bc42648fb3e2d0d5cbf20b28548be6324b482188c848644425fefb9f9af2338087d055c"
|
|
679
694
|
}
|
|
680
695
|
]
|
|
681
696
|
},
|
|
@@ -701,11 +716,11 @@
|
|
|
701
716
|
"hashes": [
|
|
702
717
|
{
|
|
703
718
|
"alg": "SHA-256",
|
|
704
|
-
"content": "
|
|
719
|
+
"content": "26d83f6139cf6e3c9b0dafac67058dbe9126986693b31b2d4a89baa9e8f7969a"
|
|
705
720
|
},
|
|
706
721
|
{
|
|
707
722
|
"alg": "SHA3-512",
|
|
708
|
-
"content": "
|
|
723
|
+
"content": "c0a3b4f00fc802d7f2a6b4020febce29b0c1ce4838cbb8f871f5750340619b9238c86eec19ee96e2570ea8b634b3978f55f68a54d1faefd8bf479014a55c2917"
|
|
709
724
|
}
|
|
710
725
|
]
|
|
711
726
|
},
|
|
@@ -761,11 +776,11 @@
|
|
|
761
776
|
"hashes": [
|
|
762
777
|
{
|
|
763
778
|
"alg": "SHA-256",
|
|
764
|
-
"content": "
|
|
779
|
+
"content": "30b2bcf9d032d29e4da0d2fbb372441f9a510b325818485e9135c668748ecbd9"
|
|
765
780
|
},
|
|
766
781
|
{
|
|
767
782
|
"alg": "SHA3-512",
|
|
768
|
-
"content": "
|
|
783
|
+
"content": "42f28be0b807304e39f86d3ddf75129dacf68b6dc0d341e6119c09692f4e0ede17c7d025351337deb900657ee36ced0e951981f4b81d4ea793ff79d19d2b0594"
|
|
769
784
|
}
|
|
770
785
|
]
|
|
771
786
|
},
|
|
@@ -784,6 +799,21 @@
|
|
|
784
799
|
}
|
|
785
800
|
]
|
|
786
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
|
+
},
|
|
787
817
|
{
|
|
788
818
|
"bom-ref": "file:data/playbooks/supply-chain-recovery.json",
|
|
789
819
|
"type": "file",
|
|
@@ -806,11 +836,11 @@
|
|
|
806
836
|
"hashes": [
|
|
807
837
|
{
|
|
808
838
|
"alg": "SHA-256",
|
|
809
|
-
"content": "
|
|
839
|
+
"content": "66a1bd01c4cb71d2d71576879afa097000cfe50042bdacb91ec4df235f5a03a1"
|
|
810
840
|
},
|
|
811
841
|
{
|
|
812
842
|
"alg": "SHA3-512",
|
|
813
|
-
"content": "
|
|
843
|
+
"content": "5dcc55ff361134da75ef806154c2a2f4a93d94bde59895053541ebc2f11ffdf91c8ab324b10b8fcb1fe940b1acbe59e152c571ddf55064d75827347a1366fc9e"
|
|
814
844
|
}
|
|
815
845
|
]
|
|
816
846
|
},
|
|
@@ -1766,11 +1796,11 @@
|
|
|
1766
1796
|
"hashes": [
|
|
1767
1797
|
{
|
|
1768
1798
|
"alg": "SHA-256",
|
|
1769
|
-
"content": "
|
|
1799
|
+
"content": "ec619d5899698562c284593dd8a13d9c5045f0700caa175a0278349a3c96a3da"
|
|
1770
1800
|
},
|
|
1771
1801
|
{
|
|
1772
1802
|
"alg": "SHA3-512",
|
|
1773
|
-
"content": "
|
|
1803
|
+
"content": "efb7e3e045cd5c88a59164c8a7c8cdde01b375893d784ce09be7f3651af20417cb13473a7b5c5dea3a08ce8b64f099c221407a9d3e8c6326a0da2fc73f09ad87"
|
|
1774
1804
|
}
|
|
1775
1805
|
]
|
|
1776
1806
|
},
|
|
@@ -1781,11 +1811,11 @@
|
|
|
1781
1811
|
"hashes": [
|
|
1782
1812
|
{
|
|
1783
1813
|
"alg": "SHA-256",
|
|
1784
|
-
"content": "
|
|
1814
|
+
"content": "991feef6541fb4430b787a8426967e7df688a3941b57e2305de780d1d1c2807e"
|
|
1785
1815
|
},
|
|
1786
1816
|
{
|
|
1787
1817
|
"alg": "SHA3-512",
|
|
1788
|
-
"content": "
|
|
1818
|
+
"content": "d8258fd4821dcf21706cc2ace47597e5a3f52976fbbbebc6c20e5a00716a255ef2bcafc9ec7c68ae67cd61d935c51fcb5a320ca601c72229d62ae6623d99de79"
|
|
1789
1819
|
}
|
|
1790
1820
|
]
|
|
1791
1821
|
},
|
|
@@ -1796,11 +1826,11 @@
|
|
|
1796
1826
|
"hashes": [
|
|
1797
1827
|
{
|
|
1798
1828
|
"alg": "SHA-256",
|
|
1799
|
-
"content": "
|
|
1829
|
+
"content": "35fe3df80c4f8717e4eb397f4358a97522cd01bc375df3d1d31710ba43df603b"
|
|
1800
1830
|
},
|
|
1801
1831
|
{
|
|
1802
1832
|
"alg": "SHA3-512",
|
|
1803
|
-
"content": "
|
|
1833
|
+
"content": "b940529b951f34286b9256ee20d888cc79a026cf942f2cdd57443029c926037df48bd8e839ca04cddd6701b1106b32c75e7c2f8203e4e7a18bf30fbc75c3e5ab"
|
|
1804
1834
|
}
|
|
1805
1835
|
]
|
|
1806
1836
|
},
|
|
@@ -2689,6 +2719,21 @@
|
|
|
2689
2719
|
}
|
|
2690
2720
|
]
|
|
2691
2721
|
},
|
|
2722
|
+
{
|
|
2723
|
+
"bom-ref": "file:skills/audit-log-integrity/skill.md",
|
|
2724
|
+
"type": "file",
|
|
2725
|
+
"name": "skills/audit-log-integrity/skill.md",
|
|
2726
|
+
"hashes": [
|
|
2727
|
+
{
|
|
2728
|
+
"alg": "SHA-256",
|
|
2729
|
+
"content": "72485e8df55dea8df80b675f04f32de2d32b8ee17d5e0aa96e61cd9bcb831193"
|
|
2730
|
+
},
|
|
2731
|
+
{
|
|
2732
|
+
"alg": "SHA3-512",
|
|
2733
|
+
"content": "0acacd972f7e798d3501a4a2149c09031db97c5873e80d26d8eb7b37b9b6be33d102d544f697d01ca2ad88adc29ecebc0b9a3d64b15cde7c25aa562b8bc923fd"
|
|
2734
|
+
}
|
|
2735
|
+
]
|
|
2736
|
+
},
|
|
2692
2737
|
{
|
|
2693
2738
|
"bom-ref": "file:skills/cloud-iam-incident/skill.md",
|
|
2694
2739
|
"type": "file",
|
|
@@ -3169,6 +3214,21 @@
|
|
|
3169
3214
|
}
|
|
3170
3215
|
]
|
|
3171
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
|
+
},
|
|
3172
3232
|
{
|
|
3173
3233
|
"bom-ref": "file:skills/skill-update-loop/skill.md",
|
|
3174
3234
|
"type": "file",
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: audit-log-integrity
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
description: Audit-log integrity for mid-2026 — tamper-evident hash-chaining, off-host signing, compliance-mode WORM immutability, legal-hold-vs-retention enforcement, writer/custodian separation, and deception (honeytoken) coverage that resist the privileged attacker most likely to tamper with the trail
|
|
5
|
+
triggers:
|
|
6
|
+
- audit log integrity
|
|
7
|
+
- tamper evident logging
|
|
8
|
+
- hash chain
|
|
9
|
+
- worm
|
|
10
|
+
- object lock
|
|
11
|
+
- immutable storage
|
|
12
|
+
- legal hold
|
|
13
|
+
- retention
|
|
14
|
+
- honeytoken
|
|
15
|
+
- canary token
|
|
16
|
+
- break glass
|
|
17
|
+
- dual control
|
|
18
|
+
- anti forensics
|
|
19
|
+
- log deletion
|
|
20
|
+
- separation of duties
|
|
21
|
+
- audit trail
|
|
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
|
+
- T1070
|
|
33
|
+
- T1565.001
|
|
34
|
+
- T1562.008
|
|
35
|
+
framework_gaps:
|
|
36
|
+
- NIST-800-53-SI-2
|
|
37
|
+
- ISO-27001-2022-A.8.15
|
|
38
|
+
- NIS2-Art21-network-security
|
|
39
|
+
- SOC2-CC7-anomaly-detection
|
|
40
|
+
cwe_refs:
|
|
41
|
+
- CWE-345
|
|
42
|
+
- CWE-347
|
|
43
|
+
- CWE-284
|
|
44
|
+
- CWE-778
|
|
45
|
+
last_threat_review: "2026-06-02"
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
# Audit-Log Integrity (Tamper-Evidence, WORM, Deception)
|
|
49
|
+
|
|
50
|
+
## Threat Context (mid-2026)
|
|
51
|
+
|
|
52
|
+
An audit trail is a security control only if it survives the attacker who wants it gone. Anti-forensic tampering (T1070 indicator removal) and stored-data manipulation (T1565.001) target precisely the log that would expose an intrusion, and the most capable adversary is a compromised privileged or insider identity. Logging volume is not integrity: a complete log that a sufficiently privileged credential can rewrite, re-chain, or delete is not a trail. The integrity properties that resist this are a hash chain actually verified on read, entries signed with a key held off the log-writing host, compliance-mode (not governance/override) WORM, legal holds that block the retention purge, separation of the log writer from its custodian, and honeytokens that catch the foraging access in the first place.
|
|
53
|
+
|
|
54
|
+
## Framework Lag Declaration
|
|
55
|
+
|
|
56
|
+
Organisational logging controls require that events are recorded, protected, and monitored — and stop there. ISO 27001 A.8.15 (logging) is commonly attested by "we log and protect logs" without verifying hash-chain continuity, independent signing, or immutability against a privileged attacker. SOC 2 CC7 monitoring is satisfied by the presence of logs and alerts. NIS2 Art.21 names monitoring for essential services but not the integrity model. None require the audit trail be immutable to the very identity most likely to tamper with it. A clean "we log and monitor" audit is therefore NON-EVIDENCE for audit-log integrity; it confirms log presence and alerting, not verified-chain continuity, off-host signing, compliance-WORM, or writer/custodian separation.
|
|
57
|
+
|
|
58
|
+
## TTP Mapping
|
|
59
|
+
|
|
60
|
+
The audit-log integrity failures map to MITRE ATT&CK: **T1070 (Indicator Removal)** for deleting/rotating/truncating the trail, defeated by compliance-WORM + writer/custodian separation + honeytokens; **T1565.001 (Stored Data Manipulation)** for rewriting entries, defeated by verified hash-chaining + off-host signing; and **T1562.008 (Disable or Modify Cloud Logs / abuse of privileged access)** for break-glass misuse, defeated by dual control + independent alerting. The weakness classes are CWE-345 (insufficient verification of data authenticity — unverified chain), CWE-347 (improper signature verification — co-located/absent signing), CWE-284 (improper access control — governance-WORM, writer-can-delete), and CWE-778 (insufficient logging/detection — absent or untriaged honeytokens).
|
|
61
|
+
|
|
62
|
+
## Exploit Availability Matrix
|
|
63
|
+
|
|
64
|
+
These are posture gaps exploited from a privileged or insider position, so the "exploit" is the absent control, not a published CVE. Rewriting a hash chain that is never verified, or recomputing it after editing history, requires only write access. Deleting from governance-mode WORM requires the admin credential the mode explicitly trusts. Purging records under an advisory-only legal hold requires nothing beyond the normal lifecycle job. The real-world priority is set by whether a single compromised identity can rewrite or delete the system-of-record trail without detection, and whether any external anchor or honeytoken would surface the tampering after the fact.
|
|
65
|
+
|
|
66
|
+
## Analysis Procedure
|
|
67
|
+
|
|
68
|
+
1. Identify the system-of-record audit trail (not just ephemeral operational logs). 2. Confirm the hash chain is VERIFIED on read/replay/export and fails closed on a break. 3. Confirm entries/checkpoints are signed with a key held off the log-writing host (separate identity / KMS / HSM). 4. Confirm the store is compliance-mode immutable (no role, including root, can delete before expiry) and that legal holds gate the retention purge. 5. Confirm the writing identity is append-only and a separate custodian holds delete rights. 6. Confirm honeytokens are seeded on high-value surfaces and a trip is alerted + triaged, and that break-glass requires dual control + audit. Run the `audit-log-integrity` playbook to execute these as detect indicators with false-positive checks, then score by whether one compromised identity can erase the trail undetected.
|
|
69
|
+
|
|
70
|
+
## Output Format
|
|
71
|
+
|
|
72
|
+
Report per integrity property (chain verification, signing, WORM mode, legal-hold gate, writer/custodian separation, deception), marking each enforced / missing / inconclusive (visibility gap). For every missing property, state whether a single compromised privileged or application identity could rewrite or delete the system-of-record trail undetected, and whether any external anchor or honeytoken would catch it. Distinguish a control enforced externally (external WORM/notary, KMS-held key) from an absent one. Provide the prioritised remediation (verify chain + sign off-host, compliance-WORM + hold gate, separate writer from custodian, deploy + triage honeytokens, dual-control break-glass) and the negative validation tests that prove each fix (chain-break detected, privileged delete refused, hold blocks purge) plus a functional test that legitimate writes still chain, sign, and verify.
|
|
73
|
+
|
|
74
|
+
## Compliance Theater Check
|
|
75
|
+
|
|
76
|
+
The recurring theater is "we log everything, so we have an audit trail," "our storage is immutable/WORM," and "records under legal hold are preserved." Logging volume is not integrity; "immutable" without naming the mode hides governance-mode reversibility; a hold flag that does not gate the purge preserves nothing. The distinguishing test: verify the chain is checked on read, the signing key is off-host, the WORM mode is compliance (root/admin cannot delete before expiry), and the purge job honors the hold. If a single privileged identity can rewrite or delete the trail undetected, the logging is not an audit trail and the assurance is paper.
|
|
77
|
+
|
|
78
|
+
## Defensive Countermeasure Mapping
|
|
79
|
+
|
|
80
|
+
Map findings to MITRE D3FEND: verified hash-chaining and off-host signing realise Message Authentication and Log Integrity (countering T1565.001); compliance-mode WORM and writer/custodian separation realise File Access Pattern Analysis and Access Modeling against deletion (countering T1070); dual-control + alerting on break-glass realises Administrative Account Monitoring (countering T1562.008); honeytokens realise Decoy Object / Connected Honeynet detection (high-fidelity evidence of the foraging access). Pair an external WORM/notary anchor with the on-host chain so even host compromise cannot rewrite history unobserved. The residual risk after these controls is multi-party collusion or compromise of the signing key / WORM authority itself, accepted at the CISO level with key-management oversight.
|
|
@@ -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.
|