@blamejs/exceptd-skills 0.16.16 → 0.16.18
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 +16 -14
- package/data/_indexes/activity-feed.json +17 -3
- package/data/_indexes/catalog-summaries.json +1 -1
- package/data/_indexes/chains.json +26271 -1538
- package/data/_indexes/currency.json +19 -1
- package/data/_indexes/frequency.json +154 -92
- package/data/_indexes/handoff-dag.json +9 -1
- package/data/_indexes/jurisdiction-map.json +9 -3
- package/data/_indexes/section-offsets.json +170 -0
- package/data/_indexes/stale-content.json +1 -1
- package/data/_indexes/summary-cards.json +80 -0
- package/data/_indexes/token-budget.json +103 -3
- package/data/_indexes/trigger-table.json +91 -0
- package/data/_indexes/xref.json +41 -3
- package/data/cwe-catalog.json +75 -3
- package/data/playbooks/audit-log-integrity.json +3 -0
- package/data/playbooks/crypto-codebase.json +31 -8
- package/data/playbooks/decompression-dos.json +626 -0
- package/data/playbooks/framework.json +2 -0
- package/data/playbooks/log-injection-telemetry.json +619 -0
- package/data/playbooks/secrets.json +1 -0
- package/manifest-snapshot.json +107 -2
- package/manifest-snapshot.sha256 +1 -1
- package/manifest.json +163 -50
- package/package.json +2 -2
- package/sbom.cdx.json +94 -34
- package/skills/decompression-dos/skill.md +83 -0
- package/skills/log-injection-telemetry/skill.md +80 -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:6c7238d3-3b76-45b0-a769-c339ae4e6bd7",
|
|
5
5
|
"version": 1,
|
|
6
6
|
"metadata": {
|
|
7
|
-
"timestamp": "
|
|
7
|
+
"timestamp": "2083-08-28T03:49:39.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.18"
|
|
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.18",
|
|
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.18",
|
|
20
|
+
"description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 50 skills, 11 catalogs (439 CVEs / 177 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.18",
|
|
29
29
|
"hashes": [
|
|
30
30
|
{
|
|
31
31
|
"alg": "SHA-256",
|
|
32
|
-
"content": "
|
|
32
|
+
"content": "0e20181565be6e9177ab95e6157883529660eb0b0542deb24b612fd270fe52f9"
|
|
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.18"
|
|
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": "50"
|
|
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": "8a446d298a41eacd959171a497d67f6f8f5902548cbf552b8840c14b3a3b37ba"
|
|
90
90
|
},
|
|
91
91
|
{
|
|
92
92
|
"alg": "SHA3-512",
|
|
93
|
-
"content": "
|
|
93
|
+
"content": "69d82952344fadd98667fbf1680aa5696c79a7e79f69a833737ef4d8cc8076bddb09dacb62ffbe2c585ca6055259ce6a53868d38a8eeb3dbe1c008275e317245"
|
|
94
94
|
}
|
|
95
95
|
]
|
|
96
96
|
},
|
|
@@ -116,11 +116,11 @@
|
|
|
116
116
|
"hashes": [
|
|
117
117
|
{
|
|
118
118
|
"alg": "SHA-256",
|
|
119
|
-
"content": "
|
|
119
|
+
"content": "9a3d7f16071119255f5bfc892af21e9357770d177a71df8aff3052e30ce543f0"
|
|
120
120
|
},
|
|
121
121
|
{
|
|
122
122
|
"alg": "SHA3-512",
|
|
123
|
-
"content": "
|
|
123
|
+
"content": "cfbb10e0c10ff6ec6ef73342d90dae4b9bf9e7abbb4858e41cdd9a9ec0ef8b1ba0594b2d082eba9e3a5ae7c930c995c0361abc0667498b573f0e934f5678f13c"
|
|
124
124
|
}
|
|
125
125
|
]
|
|
126
126
|
},
|
|
@@ -176,11 +176,11 @@
|
|
|
176
176
|
"hashes": [
|
|
177
177
|
{
|
|
178
178
|
"alg": "SHA-256",
|
|
179
|
-
"content": "
|
|
179
|
+
"content": "ccad8930d48991c13579c7519033e58d333b2bff9787aed40636fe1a2aaad61a"
|
|
180
180
|
},
|
|
181
181
|
{
|
|
182
182
|
"alg": "SHA3-512",
|
|
183
|
-
"content": "
|
|
183
|
+
"content": "cd4421111c438bf97815873a138d5e1dba1d181b7fad8992c3b81bfb3f46379b3034ff59b4a3200850f83042b1236aa648bfae18635fd740fdd4409bcedcace9"
|
|
184
184
|
}
|
|
185
185
|
]
|
|
186
186
|
},
|
|
@@ -281,11 +281,11 @@
|
|
|
281
281
|
"hashes": [
|
|
282
282
|
{
|
|
283
283
|
"alg": "SHA-256",
|
|
284
|
-
"content": "
|
|
284
|
+
"content": "e0977976ace4e9ae498b2b7a4b3c943eb2fb2eedfb19983ae38d74e1eaf628d2"
|
|
285
285
|
},
|
|
286
286
|
{
|
|
287
287
|
"alg": "SHA3-512",
|
|
288
|
-
"content": "
|
|
288
|
+
"content": "fa48b90fb049a58fd21253b0d8ce1b82de21cb1e2a853a6e89b1ff68ac2a57f0c84738d9dc4a25edc2790890fd9b21f5a8af6f29de5169c480379496bcd32d58"
|
|
289
289
|
}
|
|
290
290
|
]
|
|
291
291
|
},
|
|
@@ -341,11 +341,11 @@
|
|
|
341
341
|
"hashes": [
|
|
342
342
|
{
|
|
343
343
|
"alg": "SHA-256",
|
|
344
|
-
"content": "
|
|
344
|
+
"content": "62d9e55c9f887047fd2781ba2e81ad98e3a08ab51e173d0cd3262aee3d5eb940"
|
|
345
345
|
},
|
|
346
346
|
{
|
|
347
347
|
"alg": "SHA3-512",
|
|
348
|
-
"content": "
|
|
348
|
+
"content": "20d9d6754c1967c017abea1e6f7c5d4c60acbb25bbfb9f80ae6b73aaf5d2d838cfb67df680ec9012867e04466ad56ba39e09375c1d0616c6e9b46d14b855d88a"
|
|
349
349
|
}
|
|
350
350
|
]
|
|
351
351
|
},
|
|
@@ -461,11 +461,11 @@
|
|
|
461
461
|
"hashes": [
|
|
462
462
|
{
|
|
463
463
|
"alg": "SHA-256",
|
|
464
|
-
"content": "
|
|
464
|
+
"content": "add0916cbecb3c4e0481a544ab1fc6d6b03627f6b2014a4165d28c5e55910cf3"
|
|
465
465
|
},
|
|
466
466
|
{
|
|
467
467
|
"alg": "SHA3-512",
|
|
468
|
-
"content": "
|
|
468
|
+
"content": "a513e1065f7c644b99eb31d8d08aa15dc3dbfce38ce0171ea121c9b9c96ed5d9086be8d6d0b096a0add570e471462c9587b46298aa9db3c9fb33a81d0d531b3a"
|
|
469
469
|
}
|
|
470
470
|
]
|
|
471
471
|
},
|
|
@@ -551,11 +551,11 @@
|
|
|
551
551
|
"hashes": [
|
|
552
552
|
{
|
|
553
553
|
"alg": "SHA-256",
|
|
554
|
-
"content": "
|
|
554
|
+
"content": "d89790d5c22f8c07fa5179431ff843ccffba1a4fc41a1b4f9d6e1b4beb9b3c0d"
|
|
555
555
|
},
|
|
556
556
|
{
|
|
557
557
|
"alg": "SHA3-512",
|
|
558
|
-
"content": "
|
|
558
|
+
"content": "0ead245a65ac5305fd611a6d5aeee12a3e0435254c76d5bbe2a62db9128c44c76337774d41ceeaa5c3b619eadfc86dc645ee33a7255515e24feecbf349c48a59"
|
|
559
559
|
}
|
|
560
560
|
]
|
|
561
561
|
},
|
|
@@ -574,6 +574,21 @@
|
|
|
574
574
|
}
|
|
575
575
|
]
|
|
576
576
|
},
|
|
577
|
+
{
|
|
578
|
+
"bom-ref": "file:data/playbooks/decompression-dos.json",
|
|
579
|
+
"type": "file",
|
|
580
|
+
"name": "data/playbooks/decompression-dos.json",
|
|
581
|
+
"hashes": [
|
|
582
|
+
{
|
|
583
|
+
"alg": "SHA-256",
|
|
584
|
+
"content": "8ddb14a525bed58fcbacd10c0ccfab096fd11772d77078dadfd4e43f6055dda7"
|
|
585
|
+
},
|
|
586
|
+
{
|
|
587
|
+
"alg": "SHA3-512",
|
|
588
|
+
"content": "068092f64dcd34576b0fb7ec3ebc1cedae8f98c991bb1190fea5fc1fa34c1de3d7e230b016a509fce30c4e53dda34c798cfd2b4f511a1a6d484e1ab29f1e3ebf"
|
|
589
|
+
}
|
|
590
|
+
]
|
|
591
|
+
},
|
|
577
592
|
{
|
|
578
593
|
"bom-ref": "file:data/playbooks/framework.json",
|
|
579
594
|
"type": "file",
|
|
@@ -581,11 +596,11 @@
|
|
|
581
596
|
"hashes": [
|
|
582
597
|
{
|
|
583
598
|
"alg": "SHA-256",
|
|
584
|
-
"content": "
|
|
599
|
+
"content": "eae787bda27ade8c99e41de10181ffc8ef917661115066bb199cecc5b4a5dbf3"
|
|
585
600
|
},
|
|
586
601
|
{
|
|
587
602
|
"alg": "SHA3-512",
|
|
588
|
-
"content": "
|
|
603
|
+
"content": "0fbcbb7d77022fa4b7d57fdcc747d50d36d1c5403f7db18cfdb65fc491b5330c02a37e78ede6d61d37618b24ad72920e8fa7757cd3c321616503c366cb19b098"
|
|
589
604
|
}
|
|
590
605
|
]
|
|
591
606
|
},
|
|
@@ -679,6 +694,21 @@
|
|
|
679
694
|
}
|
|
680
695
|
]
|
|
681
696
|
},
|
|
697
|
+
{
|
|
698
|
+
"bom-ref": "file:data/playbooks/log-injection-telemetry.json",
|
|
699
|
+
"type": "file",
|
|
700
|
+
"name": "data/playbooks/log-injection-telemetry.json",
|
|
701
|
+
"hashes": [
|
|
702
|
+
{
|
|
703
|
+
"alg": "SHA-256",
|
|
704
|
+
"content": "bf1e61d9bba54722e466d6e2d186137337379c148c82e06380dae24f24a1008b"
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
"alg": "SHA3-512",
|
|
708
|
+
"content": "09b0cc1faee50235b7d0d5d2f42f25dbbf288f1ed5310d3bb5660a2b2cefd3b868a506c30335e6b7ab3f2a4b1927b468d1c83c0388607f56aacef0639c70ea8d"
|
|
709
|
+
}
|
|
710
|
+
]
|
|
711
|
+
},
|
|
682
712
|
{
|
|
683
713
|
"bom-ref": "file:data/playbooks/mail-server-hardening.json",
|
|
684
714
|
"type": "file",
|
|
@@ -806,11 +836,11 @@
|
|
|
806
836
|
"hashes": [
|
|
807
837
|
{
|
|
808
838
|
"alg": "SHA-256",
|
|
809
|
-
"content": "
|
|
839
|
+
"content": "468a961bf742b16acc2b0b33836d2c23cab00a137a24f52b6f3c38b10cb8e9de"
|
|
810
840
|
},
|
|
811
841
|
{
|
|
812
842
|
"alg": "SHA3-512",
|
|
813
|
-
"content": "
|
|
843
|
+
"content": "4ce105608fefd603bb493ad2d02c24279110c39011b5392cf2f218c2db2fbc22c86e3a3d1de24af3bc6319447599557df88be6c728cf8f81af86ad028458f58a"
|
|
814
844
|
}
|
|
815
845
|
]
|
|
816
846
|
},
|
|
@@ -1811,11 +1841,11 @@
|
|
|
1811
1841
|
"hashes": [
|
|
1812
1842
|
{
|
|
1813
1843
|
"alg": "SHA-256",
|
|
1814
|
-
"content": "
|
|
1844
|
+
"content": "0a7aeedea3de4627ed5e602ad12f7ca954c29dffed57a4d7ba57f0af72410fba"
|
|
1815
1845
|
},
|
|
1816
1846
|
{
|
|
1817
1847
|
"alg": "SHA3-512",
|
|
1818
|
-
"content": "
|
|
1848
|
+
"content": "12838d29a8aac5fa30d23b143815362bb8852e8f3621252bf15d0eaf774f37edd4c6616f6400e66c719330605cf36e48ee5c3e7ff7960b04b7ddae70f7596983"
|
|
1819
1849
|
}
|
|
1820
1850
|
]
|
|
1821
1851
|
},
|
|
@@ -1826,11 +1856,11 @@
|
|
|
1826
1856
|
"hashes": [
|
|
1827
1857
|
{
|
|
1828
1858
|
"alg": "SHA-256",
|
|
1829
|
-
"content": "
|
|
1859
|
+
"content": "26beb1496ee222282f6c864e802848d8c9d5b4090488ee62f5f7aa2890840494"
|
|
1830
1860
|
},
|
|
1831
1861
|
{
|
|
1832
1862
|
"alg": "SHA3-512",
|
|
1833
|
-
"content": "
|
|
1863
|
+
"content": "67abe106be4853460aa184d0a19821438db687b80a774bda7b4dfb6d4c0392192c75b59593c1d09930629512b52c475d85297f0571b2e2614fc2af5211b1d957"
|
|
1834
1864
|
}
|
|
1835
1865
|
]
|
|
1836
1866
|
},
|
|
@@ -1841,11 +1871,11 @@
|
|
|
1841
1871
|
"hashes": [
|
|
1842
1872
|
{
|
|
1843
1873
|
"alg": "SHA-256",
|
|
1844
|
-
"content": "
|
|
1874
|
+
"content": "2833faf5965d078166553874a1bf42b944e2ff4d1738eddf50806eaba56e1eb7"
|
|
1845
1875
|
},
|
|
1846
1876
|
{
|
|
1847
1877
|
"alg": "SHA3-512",
|
|
1848
|
-
"content": "
|
|
1878
|
+
"content": "e548f6dc97746b9f842e0e3a5567b5eb42bd19cf6eae31b4817029514b0e842047c84c6c5d62d5667e80a03757230ce0e10778980bd9a1ec991e9dc9444a264d"
|
|
1849
1879
|
}
|
|
1850
1880
|
]
|
|
1851
1881
|
},
|
|
@@ -2824,6 +2854,21 @@
|
|
|
2824
2854
|
}
|
|
2825
2855
|
]
|
|
2826
2856
|
},
|
|
2857
|
+
{
|
|
2858
|
+
"bom-ref": "file:skills/decompression-dos/skill.md",
|
|
2859
|
+
"type": "file",
|
|
2860
|
+
"name": "skills/decompression-dos/skill.md",
|
|
2861
|
+
"hashes": [
|
|
2862
|
+
{
|
|
2863
|
+
"alg": "SHA-256",
|
|
2864
|
+
"content": "53fd0a90ccc0e7ac6056e9c9fd40f3ab3342d30739399079b5e644eef6405d88"
|
|
2865
|
+
},
|
|
2866
|
+
{
|
|
2867
|
+
"alg": "SHA3-512",
|
|
2868
|
+
"content": "f8f1a70fc4ee809300c1b5da98548463d732f7a27b0e49d0776f197f4aefaf7d6106da411259c5bdea6a17d76c6b52579b58677bad05b312c622e7e83cf7b6ab"
|
|
2869
|
+
}
|
|
2870
|
+
]
|
|
2871
|
+
},
|
|
2827
2872
|
{
|
|
2828
2873
|
"bom-ref": "file:skills/defensive-countermeasure-mapping/skill.md",
|
|
2829
2874
|
"type": "file",
|
|
@@ -2989,6 +3034,21 @@
|
|
|
2989
3034
|
}
|
|
2990
3035
|
]
|
|
2991
3036
|
},
|
|
3037
|
+
{
|
|
3038
|
+
"bom-ref": "file:skills/log-injection-telemetry/skill.md",
|
|
3039
|
+
"type": "file",
|
|
3040
|
+
"name": "skills/log-injection-telemetry/skill.md",
|
|
3041
|
+
"hashes": [
|
|
3042
|
+
{
|
|
3043
|
+
"alg": "SHA-256",
|
|
3044
|
+
"content": "69c4e65c6f78703b923c2455a5ecf5a6d79fcc28d56fff57acb2605639231104"
|
|
3045
|
+
},
|
|
3046
|
+
{
|
|
3047
|
+
"alg": "SHA3-512",
|
|
3048
|
+
"content": "5bc5fb49f8c899647a1dea53c657f96a712b7c1e2dc20416152a3a28a9573fd46201310514f4c64c0495519bf24247477fff59083e7f920dfe7ea77bfa2ff8d6"
|
|
3049
|
+
}
|
|
3050
|
+
]
|
|
3051
|
+
},
|
|
2992
3052
|
{
|
|
2993
3053
|
"bom-ref": "file:skills/mail-server-hardening/skill.md",
|
|
2994
3054
|
"type": "file",
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: decompression-dos
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
description: Decompression-bomb, parser-DoS, and ReDoS resistance for mid-2026 — decompression size/ratio caps, Zip Slip path confinement, XML entity-expansion disabling, linear-time regex on untrusted input, parse-depth limits, and length-field allocation bounds against single-input amplification denial of service
|
|
5
|
+
triggers:
|
|
6
|
+
- decompression bomb
|
|
7
|
+
- zip bomb
|
|
8
|
+
- zip slip
|
|
9
|
+
- redos
|
|
10
|
+
- regular expression denial of service
|
|
11
|
+
- catastrophic backtracking
|
|
12
|
+
- billion laughs
|
|
13
|
+
- xml entity expansion
|
|
14
|
+
- xxe
|
|
15
|
+
- parser dos
|
|
16
|
+
- resource exhaustion
|
|
17
|
+
- amplification attack
|
|
18
|
+
- nested archive
|
|
19
|
+
- recursion depth
|
|
20
|
+
- length field allocation
|
|
21
|
+
- input amplification
|
|
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
|
+
- T1499
|
|
33
|
+
- T1499.001
|
|
34
|
+
- T1059
|
|
35
|
+
framework_gaps:
|
|
36
|
+
- NIST-800-53-SI-2
|
|
37
|
+
- NIS2-Art21-network-security
|
|
38
|
+
- UK-CAF-B4
|
|
39
|
+
- AU-ISM-1556
|
|
40
|
+
cwe_refs:
|
|
41
|
+
- CWE-409
|
|
42
|
+
- CWE-1333
|
|
43
|
+
- CWE-400
|
|
44
|
+
- CWE-776
|
|
45
|
+
- CWE-22
|
|
46
|
+
- CWE-834
|
|
47
|
+
- CWE-770
|
|
48
|
+
last_threat_review: "2026-06-02"
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
# Decompression-Bomb / Parser-DoS / ReDoS Resistance
|
|
52
|
+
|
|
53
|
+
## Threat Context (mid-2026)
|
|
54
|
+
|
|
55
|
+
Amplification denial of service turns a tiny, structurally-valid input into ruinous server work. A 42 KB zip bomb expands to petabytes; a few lines of nested XML entities expand to gigabytes (the billion-laughs attack); a crafted string pins a CPU core for seconds-to-minutes on a backtracking regular expression (ReDoS); a binary parser that reads a declared 2 GB length field allocates a 2 GB buffer from a 10-byte message. A Zip Slip archive entry named `../../x` escapes the extraction directory to overwrite a binary on the execution path. Input-format validation passes all of these because each input is valid — the amplification lives in how it is processed, not in its shape. The defence is a resource bound at the parser, not validation or autoscaling.
|
|
56
|
+
|
|
57
|
+
## Framework Lag Declaration
|
|
58
|
+
|
|
59
|
+
Organisational controls treat "we validate all input" and "the cloud autoscales" as denial-of-service protection. NIST 800-53 SI-10 (information input validation) is satisfied by validating format and does not require bounding decompression ratio, entity expansion, or regex complexity. SC-5 (denial-of-service protection) is framed at the network tier and is not operationalised for single-request, asymmetric application-layer DoS. A clean "we validate input / have a WAF / autoscale" audit is therefore NON-EVIDENCE for amplification-DoS resistance; it confirms format validation and elastic infra, not the decompression caps, entity disabling, regex-complexity bounds, parse-depth limits, and length-field allocation bounds that actually stop a single crafted input from exhausting the instance.
|
|
60
|
+
|
|
61
|
+
## TTP Mapping
|
|
62
|
+
|
|
63
|
+
The amplification-DoS failures map to MITRE ATT&CK: **T1499 (Endpoint Denial of Service)** for ReDoS and circuit-style resource exhaustion; **T1499.001 (OS Exhaustion Flood)** for decompression bombs, billion-laughs entity expansion, deep-recursion parsing, and length-field over-allocation that exhaust memory/CPU from a single input; and **T1059 (Command/Execution)** for Zip Slip path traversal that overwrites an executable or config to gain code execution. The weakness classes are CWE-409 (improper handling of highly compressed data), CWE-1333 (inefficient regular expression complexity / ReDoS), CWE-776 (XML entity expansion), CWE-834 (excessive iteration / unbounded recursion), CWE-22 (path traversal — Zip Slip), CWE-400 (uncontrolled resource consumption), and CWE-770 (allocation without limits).
|
|
64
|
+
|
|
65
|
+
## Exploit Availability Matrix
|
|
66
|
+
|
|
67
|
+
These are processing-bound gaps exploited by a single small input, so the exploit is the absent bound, not a published CVE. Zip bombs (42.zip), billion-laughs XML, and ReDoS strings are public, well-documented, and trivially reproduced; Zip Slip has public proof-of-concept archives. None require a network position beyond an endpoint that accepts an upload or a string. The real-world priority is set by whether the ingest is internet-facing and whether a single crafted input can exhaust the whole instance (one-shot DoS) or, for Zip Slip, write outside the extraction target — the latter escalating from DoS to arbitrary file write and code execution.
|
|
68
|
+
|
|
69
|
+
## Analysis Procedure
|
|
70
|
+
|
|
71
|
+
1. Enumerate every code path that decompresses an archive, parses XML/JSON/CBOR/protobuf/ASN.1/MIME, or applies a regex to attacker-suppliable input. 2. Confirm decompression caps total output size and per-entry ratio, and caps cumulative output + recursion depth for nested archives. 3. Confirm archive extraction normalises and confines each entry path within the target (Zip Slip). 4. Confirm the XML parser disables DTDs and external/general entities. 5. Confirm regexes on untrusted input are linear-time (RE2) or length-capped with no catastrophic-backtracking patterns. 6. Confirm structured parsers enforce a maximum nesting depth and validate declared length/count fields against remaining input before allocating. Run the `decompression-dos` playbook to execute these as detect indicators with false-positive checks, then score by internet-reachability and one-shot-exhaustion potential.
|
|
72
|
+
|
|
73
|
+
## Output Format
|
|
74
|
+
|
|
75
|
+
Report per parser/decompression path, marking each resource bound enforced / missing / inconclusive (visibility gap). For every missing bound, state whether the ingest is internet-facing and whether a single crafted input could exhaust the instance (or, for Zip Slip, write outside the target). Distinguish a bound enforced at a lower layer (streaming runtime, RE2 engine, size-limited proxy) from an absent one, and a path that ingests only trusted fixed-size input from one that ingests attacker input. Provide the prioritised remediation (cap decompression size/ratio/nesting, confine extraction paths, disable XML entities, bound regex complexity, limit parse depth + length-field allocation) and the negative validation tests (zip bomb rejected, Zip Slip rejected, billion-laughs rejected, ReDoS bounded) plus a functional test that legitimate inputs still parse.
|
|
76
|
+
|
|
77
|
+
## Compliance Theater Check
|
|
78
|
+
|
|
79
|
+
The recurring theater is "we validate all input, so malformed data is handled," "our WAF blocks malicious uploads," and "the service autoscales, so resource exhaustion is handled." Format validation does not bound amplification; a zip bomb and a ReDoS string are structurally valid and small, so a WAF rarely catches them; autoscaling pays for the amplification without stopping it. The distinguishing test: feed a zip bomb, a billion-laughs XML, and a ReDoS string. If any expands unbounded, pins a CPU, or allocates from a declared length, validation, the WAF, and autoscaling did not bound the amplification, and the assurance is paper.
|
|
80
|
+
|
|
81
|
+
## Defensive Countermeasure Mapping
|
|
82
|
+
|
|
83
|
+
Map findings to MITRE D3FEND: decompression size/ratio caps and length-field bounds realise Resource Consumption Limiting and Input-Size Restriction (countering T1499.001); XML entity disabling realises Document Parser Hardening (countering billion-laughs / XXE); linear-time regex realises Algorithmic-Complexity Limiting (countering ReDoS / T1499); extraction path confinement realises Path-Traversal Prevention (countering Zip Slip / T1059); parse-depth limits realise Recursion Bounding. Pair the static bounds with continuous coverage-guided fuzzing (the fuzz-testing-strategy skill) as the regression control for novel amplification inputs. The residual risk after bounding the known classes is an unforeseen pathological input, caught by the fuzzer rather than the caps, accepted at the CISO level.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: log-injection-telemetry
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
description: Telemetry-pipeline integrity for mid-2026 — CR/LF log-injection neutralization across every sink, secret/PII redaction before shipping, authenticated metrics endpoints, and exporter destination allowlisting, secret-store credentials, verified TLS, and webhook SSRF guarding
|
|
5
|
+
triggers:
|
|
6
|
+
- log injection
|
|
7
|
+
- crlf injection
|
|
8
|
+
- log forging
|
|
9
|
+
- telemetry integrity
|
|
10
|
+
- secrets in logs
|
|
11
|
+
- log redaction
|
|
12
|
+
- metrics endpoint exposure
|
|
13
|
+
- prometheus exposure
|
|
14
|
+
- otlp exporter
|
|
15
|
+
- cloudwatch
|
|
16
|
+
- webhook sink
|
|
17
|
+
- exporter ssrf
|
|
18
|
+
- observability security
|
|
19
|
+
- log sink
|
|
20
|
+
- telemetry exfiltration
|
|
21
|
+
discovery_mode: standalone
|
|
22
|
+
data_deps:
|
|
23
|
+
- cve-catalog.json
|
|
24
|
+
- atlas-ttps.json
|
|
25
|
+
- attack-techniques.json
|
|
26
|
+
- framework-control-gaps.json
|
|
27
|
+
- cwe-catalog.json
|
|
28
|
+
- rfc-references.json
|
|
29
|
+
atlas_refs: []
|
|
30
|
+
attack_refs:
|
|
31
|
+
- T1565.001
|
|
32
|
+
- T1530
|
|
33
|
+
- T1213
|
|
34
|
+
framework_gaps:
|
|
35
|
+
- NIST-800-53-SI-2
|
|
36
|
+
- ISO-27001-2022-A.8.15
|
|
37
|
+
- NIS2-Art21-network-security
|
|
38
|
+
- UK-CAF-B4
|
|
39
|
+
- AU-ISM-1556
|
|
40
|
+
cwe_refs:
|
|
41
|
+
- CWE-117
|
|
42
|
+
- CWE-532
|
|
43
|
+
- CWE-918
|
|
44
|
+
- CWE-200
|
|
45
|
+
last_threat_review: "2026-06-02"
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
# Telemetry-Pipeline Integrity (Log Injection + Sink Confidentiality)
|
|
49
|
+
|
|
50
|
+
## Threat Context (mid-2026)
|
|
51
|
+
|
|
52
|
+
The telemetry pipeline is both an integrity target and a confidentiality leak that "we centralize all logs" does not address. Integrity: un-sanitized CR/LF in interpolated log values lets an attacker forge or split log entries — injecting fake lines, breaking the log parser, or hiding their own actions — corrupting the observability record incident response depends on. Confidentiality: secrets and PII logged without a redaction pass persist in every downstream sink (SIEM, cloud log service); an unauthenticated /metrics or debug endpoint leaks internal topology and operational state; exporters (OTLP, CloudWatch, webhook) that ship to un-inventoried or input-derived destinations become exfiltration and SSRF channels; embedded sink credentials and plaintext export widen the exposure. These are pipeline-posture gaps, not log-volume gaps.
|
|
53
|
+
|
|
54
|
+
## Framework Lag Declaration
|
|
55
|
+
|
|
56
|
+
Organisational logging controls require events be recorded, centralized, and access-controlled. NIST 800-53 AU-9 (protection of audit information) is attested by access controls on the log store and does not address CR/LF log injection that forges entries before they reach the store. SI-11 (error handling / output neutralization) is named generally but not operationalised as per-sink CR/LF neutralization or secret redaction. ISO 27001 A.8.15 is met with "we log and protect logs." None address telemetry-exporter egress, SSRF, or unauthenticated metrics. A clean "we centralize logs to a SIEM with access controls" audit is therefore NON-EVIDENCE for telemetry-pipeline integrity; it confirms log presence and store ACLs, not neutralization, redaction, metrics auth, or exporter posture.
|
|
57
|
+
|
|
58
|
+
## TTP Mapping
|
|
59
|
+
|
|
60
|
+
The telemetry-pipeline failures map to MITRE ATT&CK: **T1565.001 (Stored Data Manipulation)** for CR/LF log forging that rewrites or splits the audit record; **T1530 (Data from Cloud Storage / shipped telemetry)** for secrets/PII leaking through logs, exporter exfiltration, and webhook-sink SSRF reaching internal services; and **T1213 (Data from Information Repositories)** for an unauthenticated metrics/debug endpoint disclosing internal state. The weakness classes are CWE-117 (improper output neutralization for logs — log injection), CWE-532 (insertion of sensitive information into log files), CWE-918 (server-side request forgery — exporter/webhook egress), and CWE-200 (exposure of sensitive information — unauthenticated metrics).
|
|
61
|
+
|
|
62
|
+
## Exploit Availability Matrix
|
|
63
|
+
|
|
64
|
+
These are pipeline-posture gaps, so the exploit is the absent control. CR/LF log injection requires only a request field that reaches a line-oriented sink un-neutralized — trivially reproduced. Secrets in logs are harvested wherever the logs land. An unauthenticated /metrics is a single unauthenticated GET. A webhook sink pointed at the cloud metadata endpoint is an SSRF with commodity payloads. The real-world priority is set by whether secrets/PII leak across every downstream sink (credential/PII breach), whether the audit record can be forged (defeating incident response), or whether the telemetry process can be turned into an SSRF channel to the internal network or metadata service.
|
|
65
|
+
|
|
66
|
+
## Analysis Procedure
|
|
67
|
+
|
|
68
|
+
1. Enumerate every log/trace/metric sink and exporter, and every metrics/debug endpoint. 2. Confirm each sink neutralizes CR/LF + control characters in interpolated values (or uses a structured format that cannot be line-split) — note any sink other than syslog that does not. 3. Confirm a redaction pass strips secrets/PII before values reach any sink. 4. Confirm metrics/debug endpoints require authentication or are bound to a private scrape network. 5. Confirm exporter destinations are an inventoried allowlist (not input-derived), credentials come from a secret store, and export uses verified TLS. 6. Confirm webhook sinks allowlist their URL and refuse private/link-local/metadata addresses. Run the `log-injection-telemetry` playbook to execute these as detect indicators with false-positive checks, then score by leakage breadth, audit-record corruptibility, and SSRF reach.
|
|
69
|
+
|
|
70
|
+
## Output Format
|
|
71
|
+
|
|
72
|
+
Report per sink/exporter/endpoint, marking each control enforced / missing / inconclusive (visibility gap). For every missing control, state whether it leaks secrets/PII across sinks, allows forging the audit record, or enables exfil/SSRF from the telemetry process, and whether the surface is internet-reachable. Distinguish a control enforced at a lower layer (a sanitizing collector/sidecar, a private scrape network) from an absent one. Provide the prioritised remediation (neutralize CR/LF + redact per sink, authenticate/private metrics, allowlist exporters with secret-store credentials over verified TLS, SSRF-guard webhook sinks) and the negative validation tests (CR/LF neutralized, secret redacted, metrics requires auth, webhook SSRF blocked) plus a functional test that legitimate telemetry still flows.
|
|
73
|
+
|
|
74
|
+
## Compliance Theater Check
|
|
75
|
+
|
|
76
|
+
The recurring theater is "we centralize all logs to a SIEM, so logging is handled," "the log store has access controls, so logs are protected," and "our metrics are internal-only." Centralization is not integrity or confidentiality; store ACLs do not stop injection at write time; an "internal" /metrics is often reachable via a default all-interfaces bind or an exposed ingress. The distinguishing test: inject CR/LF into a logged value and check for a forged line; log a secret and check redaction; reach /metrics unauthenticated; inspect exporter destinations, credentials, and TLS. If forging, secret leakage, or exfil/SSRF succeeds, centralization did not protect the pipeline and the assurance is paper.
|
|
77
|
+
|
|
78
|
+
## Defensive Countermeasure Mapping
|
|
79
|
+
|
|
80
|
+
Map findings to MITRE D3FEND: per-sink CR/LF neutralization realises Message Encoding / Output Neutralization (countering T1565.001 log forging); secret/PII redaction realises Sensitive-Data Scrubbing (countering T1530 leakage); metrics-endpoint authentication realises Network Traffic Filtering and Authentication Enforcement (countering T1213 disclosure); exporter destination allowlisting, secret-store credentials, verified TLS, and webhook SSRF guards realise Outbound Traffic Filtering and Resolution-Trust (countering T1530 exfil / SSRF). Pair the redaction pass with the dlp-gap-analysis skill for the broader data-egress picture, without duplicating its LLM/RAG focus. The residual risk is the inherent sensitivity of telemetry held in a legitimate access-controlled store, accepted at the CISO level.
|