@blamejs/exceptd-skills 0.12.20 → 0.12.22
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 +137 -6
- package/bin/exceptd.js +835 -70
- package/data/_indexes/_meta.json +14 -14
- package/data/_indexes/activity-feed.json +3 -3
- package/data/_indexes/catalog-summaries.json +3 -3
- package/data/_indexes/chains.json +15 -0
- package/data/_indexes/jurisdiction-map.json +3 -2
- package/data/_indexes/section-offsets.json +175 -175
- package/data/_indexes/summary-cards.json +1 -1
- package/data/_indexes/token-budget.json +83 -83
- package/data/cve-catalog.json +169 -2
- package/data/exploit-availability.json +16 -0
- package/data/playbooks/ai-api.json +18 -0
- package/data/playbooks/containers.json +30 -0
- package/data/playbooks/cred-stores.json +18 -0
- package/data/playbooks/crypto.json +18 -0
- package/data/playbooks/hardening.json +26 -1
- package/data/playbooks/kernel.json +22 -2
- package/data/playbooks/mcp.json +18 -0
- package/data/playbooks/runtime.json +22 -1
- package/data/playbooks/sbom.json +18 -0
- package/data/playbooks/secrets.json +6 -0
- package/data/zeroday-lessons.json +102 -0
- package/lib/auto-discovery.js +9 -9
- package/lib/cross-ref-api.js +43 -10
- package/lib/cve-curation.js +4 -4
- package/lib/playbook-runner.js +529 -70
- package/lib/prefetch.js +3 -3
- package/lib/refresh-external.js +13 -2
- package/lib/refresh-network.js +22 -17
- package/lib/scoring.js +22 -13
- package/lib/sign.js +5 -5
- package/lib/validate-catalog-meta.js +1 -1
- package/lib/validate-cve-catalog.js +2 -2
- package/lib/validate-indexes.js +2 -2
- package/lib/verify.js +63 -13
- package/manifest.json +47 -47
- package/package.json +1 -1
- package/sbom.cdx.json +6 -6
- package/scripts/check-manifest-snapshot.js +1 -1
- package/scripts/check-sbom-currency.js +1 -1
- package/scripts/predeploy.js +6 -6
- package/scripts/refresh-manifest-snapshot.js +2 -2
- package/scripts/validate-vendor-online.js +1 -1
- package/scripts/verify-shipped-tarball.js +15 -12
- package/skills/compliance-theater/skill.md +4 -1
- package/skills/exploit-scoring/skill.md +20 -1
- package/skills/framework-gap-analysis/skill.md +6 -2
- package/skills/kernel-lpe-triage/skill.md +50 -3
- package/skills/threat-model-currency/skill.md +7 -5
- package/skills/webapp-security/skill.md +1 -1
- package/skills/zeroday-gap-learn/skill.md +44 -1
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"kernel-lpe-triage": {
|
|
8
8
|
"description": "Assess Linux kernel LPE exposure — Copy Fail, Dirty Frag, live-patch vs. reboot remediation",
|
|
9
9
|
"threat_context_excerpt": "An AI system discovered this vulnerability in approximately one hour. It is a page-cache copy-on-write (CoW) primitive in the Linux kernel affecting all major distributions since kernel 4.14 (2017). Every major Linux distribution is affected: RHEL 7–9, Ubuntu 18.04–24.04, Debian 9–12, CentOS, Fedora, Amazon Linux 2/2023, SUSE 12/15, Alpine, and derivatives.",
|
|
10
|
-
"produces": "Produce this structure:\n\n```\n## Kernel LPE Exposure Assessment\n\n**Assessment Date:** YYYY-MM-DD \n**Kernel Version:** x.x.x \n**Distribution:** [name + version]\n\n### Exposure Summary\n| CVE | Status | Severity |\n|-----|--------|----------|\n| CVE-2026-31431 (Copy Fail) | [Exposed / Live-patched / Patched] | [Critical/High/Medium/Low] |\n| CVE-2026-43284 (Dirty Frag ESP) | [Exposed / Patched] | [Critical/High/Medium/Low] |\n| CVE-2026-43500 (Dirty Frag RxRPC) | [Exposed / Patched] | [Critical/High/Medium/Low] |\n
|
|
10
|
+
"produces": "Produce this structure:\n\n```\n## Kernel LPE Exposure Assessment\n\n**Assessment Date:** YYYY-MM-DD \n**Kernel Version:** x.x.x \n**Distribution:** [name + version]\n\n### Exposure Summary\n| CVE | Status | Severity |\n|-----|--------|----------|\n| CVE-2026-31431 (Copy Fail) | [Exposed / Live-patched / Patched] | [Critical/High/Medium/Low] |\n| CVE-2026-43284 (Dirty Frag ESP) | [Exposed / Patched] | [Critical/High/Medium/Low] |\n| CVE-2026-43500 (Dirty Frag RxRPC) | [Exposed / Patched] | [Critical/High/Medium/Low] |\n| CVE-2026-46300 (Fragnesia) | [Exposed / Module-unloaded / Live-patched / Patched] | [C ...",
|
|
11
11
|
"key_xrefs": {
|
|
12
12
|
"cwe_refs": [
|
|
13
13
|
"CWE-125",
|
|
@@ -3,23 +3,23 @@
|
|
|
3
3
|
"schema_version": "1.0.0",
|
|
4
4
|
"tokenizer_note": "Character-density approximation: 1 token ≈ 4 chars. This is the canonical rule-of-thumb for OpenAI tokenizers on English+technical text. Claude's tokenizer is typically more efficient on prose; treat this as an upper-bound budget for both. Consumers with stricter precision needs should re-tokenize with their own tokenizer.",
|
|
5
5
|
"approx_chars_per_token": 4,
|
|
6
|
-
"total_chars":
|
|
7
|
-
"total_approx_tokens":
|
|
6
|
+
"total_chars": 1420930,
|
|
7
|
+
"total_approx_tokens": 355238,
|
|
8
8
|
"skill_count": 38
|
|
9
9
|
},
|
|
10
10
|
"skills": {
|
|
11
11
|
"kernel-lpe-triage": {
|
|
12
12
|
"path": "skills/kernel-lpe-triage/skill.md",
|
|
13
|
-
"bytes":
|
|
14
|
-
"chars":
|
|
15
|
-
"lines":
|
|
16
|
-
"approx_tokens":
|
|
13
|
+
"bytes": 29740,
|
|
14
|
+
"chars": 29580,
|
|
15
|
+
"lines": 390,
|
|
16
|
+
"approx_tokens": 7395,
|
|
17
17
|
"approx_chars_per_token": 4,
|
|
18
18
|
"sections": {
|
|
19
19
|
"threat-context": {
|
|
20
|
-
"bytes":
|
|
21
|
-
"chars":
|
|
22
|
-
"approx_tokens":
|
|
20
|
+
"bytes": 5569,
|
|
21
|
+
"chars": 5521,
|
|
22
|
+
"approx_tokens": 1380
|
|
23
23
|
},
|
|
24
24
|
"framework-lag-declaration": {
|
|
25
25
|
"bytes": 2519,
|
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
"approx_tokens": 722
|
|
33
33
|
},
|
|
34
34
|
"exploit-availability-matrix": {
|
|
35
|
-
"bytes":
|
|
36
|
-
"chars":
|
|
37
|
-
"approx_tokens":
|
|
35
|
+
"bytes": 885,
|
|
36
|
+
"chars": 881,
|
|
37
|
+
"approx_tokens": 220
|
|
38
38
|
},
|
|
39
39
|
"compliance-theater-check": {
|
|
40
40
|
"bytes": 2072,
|
|
@@ -42,14 +42,14 @@
|
|
|
42
42
|
"approx_tokens": 516
|
|
43
43
|
},
|
|
44
44
|
"analysis-procedure": {
|
|
45
|
-
"bytes":
|
|
46
|
-
"chars":
|
|
47
|
-
"approx_tokens":
|
|
45
|
+
"bytes": 5300,
|
|
46
|
+
"chars": 5296,
|
|
47
|
+
"approx_tokens": 1324
|
|
48
48
|
},
|
|
49
49
|
"output-format": {
|
|
50
|
-
"bytes":
|
|
51
|
-
"chars":
|
|
52
|
-
"approx_tokens":
|
|
50
|
+
"bytes": 1796,
|
|
51
|
+
"chars": 1784,
|
|
52
|
+
"approx_tokens": 446
|
|
53
53
|
},
|
|
54
54
|
"detection-rules": {
|
|
55
55
|
"bytes": 689,
|
|
@@ -175,10 +175,10 @@
|
|
|
175
175
|
},
|
|
176
176
|
"framework-gap-analysis": {
|
|
177
177
|
"path": "skills/framework-gap-analysis/skill.md",
|
|
178
|
-
"bytes":
|
|
179
|
-
"chars":
|
|
180
|
-
"lines":
|
|
181
|
-
"approx_tokens":
|
|
178
|
+
"bytes": 27420,
|
|
179
|
+
"chars": 27364,
|
|
180
|
+
"lines": 379,
|
|
181
|
+
"approx_tokens": 6841,
|
|
182
182
|
"approx_chars_per_token": 4,
|
|
183
183
|
"sections": {
|
|
184
184
|
"threat-context": {
|
|
@@ -192,19 +192,19 @@
|
|
|
192
192
|
"approx_tokens": 818
|
|
193
193
|
},
|
|
194
194
|
"ttp-mapping": {
|
|
195
|
-
"bytes":
|
|
196
|
-
"chars":
|
|
197
|
-
"approx_tokens":
|
|
195
|
+
"bytes": 2089,
|
|
196
|
+
"chars": 2087,
|
|
197
|
+
"approx_tokens": 522
|
|
198
198
|
},
|
|
199
199
|
"exploit-availability-matrix": {
|
|
200
|
-
"bytes":
|
|
201
|
-
"chars":
|
|
202
|
-
"approx_tokens":
|
|
200
|
+
"bytes": 1536,
|
|
201
|
+
"chars": 1536,
|
|
202
|
+
"approx_tokens": 384
|
|
203
203
|
},
|
|
204
204
|
"built-in-gap-catalog": {
|
|
205
|
-
"bytes":
|
|
206
|
-
"chars":
|
|
207
|
-
"approx_tokens":
|
|
205
|
+
"bytes": 10679,
|
|
206
|
+
"chars": 10647,
|
|
207
|
+
"approx_tokens": 2662
|
|
208
208
|
},
|
|
209
209
|
"analysis-procedure": {
|
|
210
210
|
"bytes": 1718,
|
|
@@ -222,18 +222,18 @@
|
|
|
222
222
|
"approx_tokens": 483
|
|
223
223
|
},
|
|
224
224
|
"compliance-theater-check": {
|
|
225
|
-
"bytes":
|
|
226
|
-
"chars":
|
|
227
|
-
"approx_tokens":
|
|
225
|
+
"bytes": 2461,
|
|
226
|
+
"chars": 2461,
|
|
227
|
+
"approx_tokens": 615
|
|
228
228
|
}
|
|
229
229
|
}
|
|
230
230
|
},
|
|
231
231
|
"compliance-theater": {
|
|
232
232
|
"path": "skills/compliance-theater/skill.md",
|
|
233
|
-
"bytes":
|
|
234
|
-
"chars":
|
|
235
|
-
"lines":
|
|
236
|
-
"approx_tokens":
|
|
233
|
+
"bytes": 29641,
|
|
234
|
+
"chars": 29575,
|
|
235
|
+
"lines": 375,
|
|
236
|
+
"approx_tokens": 7394,
|
|
237
237
|
"approx_chars_per_token": 4,
|
|
238
238
|
"sections": {
|
|
239
239
|
"frontmatter-scope": {
|
|
@@ -257,14 +257,14 @@
|
|
|
257
257
|
"approx_tokens": 549
|
|
258
258
|
},
|
|
259
259
|
"exploit-availability-matrix": {
|
|
260
|
-
"bytes":
|
|
261
|
-
"chars":
|
|
262
|
-
"approx_tokens":
|
|
260
|
+
"bytes": 2006,
|
|
261
|
+
"chars": 2006,
|
|
262
|
+
"approx_tokens": 502
|
|
263
263
|
},
|
|
264
264
|
"theater-pattern-library": {
|
|
265
|
-
"bytes":
|
|
266
|
-
"chars":
|
|
267
|
-
"approx_tokens":
|
|
265
|
+
"bytes": 12737,
|
|
266
|
+
"chars": 12719,
|
|
267
|
+
"approx_tokens": 3180
|
|
268
268
|
},
|
|
269
269
|
"analysis-procedure": {
|
|
270
270
|
"bytes": 943,
|
|
@@ -285,10 +285,10 @@
|
|
|
285
285
|
},
|
|
286
286
|
"exploit-scoring": {
|
|
287
287
|
"path": "skills/exploit-scoring/skill.md",
|
|
288
|
-
"bytes":
|
|
289
|
-
"chars":
|
|
290
|
-
"lines":
|
|
291
|
-
"approx_tokens":
|
|
288
|
+
"bytes": 23932,
|
|
289
|
+
"chars": 23794,
|
|
290
|
+
"lines": 357,
|
|
291
|
+
"approx_tokens": 5949,
|
|
292
292
|
"approx_chars_per_token": 4,
|
|
293
293
|
"sections": {
|
|
294
294
|
"frontmatter-scope": {
|
|
@@ -312,9 +312,9 @@
|
|
|
312
312
|
"approx_tokens": 305
|
|
313
313
|
},
|
|
314
314
|
"exploit-availability-matrix": {
|
|
315
|
-
"bytes":
|
|
316
|
-
"chars":
|
|
317
|
-
"approx_tokens":
|
|
315
|
+
"bytes": 1744,
|
|
316
|
+
"chars": 1740,
|
|
317
|
+
"approx_tokens": 435
|
|
318
318
|
},
|
|
319
319
|
"rwep-formula": {
|
|
320
320
|
"bytes": 2866,
|
|
@@ -322,9 +322,9 @@
|
|
|
322
322
|
"approx_tokens": 714
|
|
323
323
|
},
|
|
324
324
|
"pre-calculated-rwep-scores": {
|
|
325
|
-
"bytes":
|
|
326
|
-
"chars":
|
|
327
|
-
"approx_tokens":
|
|
325
|
+
"bytes": 5716,
|
|
326
|
+
"chars": 5675,
|
|
327
|
+
"approx_tokens": 1419
|
|
328
328
|
},
|
|
329
329
|
"rwep-vs-cvss-delta-analysis": {
|
|
330
330
|
"bytes": 1509,
|
|
@@ -555,10 +555,10 @@
|
|
|
555
555
|
},
|
|
556
556
|
"threat-model-currency": {
|
|
557
557
|
"path": "skills/threat-model-currency/skill.md",
|
|
558
|
-
"bytes":
|
|
559
|
-
"chars":
|
|
560
|
-
"lines":
|
|
561
|
-
"approx_tokens":
|
|
558
|
+
"bytes": 27335,
|
|
559
|
+
"chars": 27223,
|
|
560
|
+
"lines": 411,
|
|
561
|
+
"approx_tokens": 6806,
|
|
562
562
|
"approx_chars_per_token": 4,
|
|
563
563
|
"sections": {
|
|
564
564
|
"frontmatter-scope": {
|
|
@@ -572,9 +572,9 @@
|
|
|
572
572
|
"approx_tokens": 135
|
|
573
573
|
},
|
|
574
574
|
"the-14-threat-class-checklist": {
|
|
575
|
-
"bytes":
|
|
576
|
-
"chars":
|
|
577
|
-
"approx_tokens":
|
|
575
|
+
"bytes": 11120,
|
|
576
|
+
"chars": 11106,
|
|
577
|
+
"approx_tokens": 2777
|
|
578
578
|
},
|
|
579
579
|
"threat-context": {
|
|
580
580
|
"bytes": 1831,
|
|
@@ -587,14 +587,14 @@
|
|
|
587
587
|
"approx_tokens": 646
|
|
588
588
|
},
|
|
589
589
|
"ttp-mapping": {
|
|
590
|
-
"bytes":
|
|
591
|
-
"chars":
|
|
592
|
-
"approx_tokens":
|
|
590
|
+
"bytes": 3097,
|
|
591
|
+
"chars": 3059,
|
|
592
|
+
"approx_tokens": 765
|
|
593
593
|
},
|
|
594
594
|
"exploit-availability-matrix": {
|
|
595
|
-
"bytes":
|
|
596
|
-
"chars":
|
|
597
|
-
"approx_tokens":
|
|
595
|
+
"bytes": 2349,
|
|
596
|
+
"chars": 2331,
|
|
597
|
+
"approx_tokens": 583
|
|
598
598
|
},
|
|
599
599
|
"compliance-theater-check": {
|
|
600
600
|
"bytes": 1568,
|
|
@@ -680,10 +680,10 @@
|
|
|
680
680
|
},
|
|
681
681
|
"zeroday-gap-learn": {
|
|
682
682
|
"path": "skills/zeroday-gap-learn/skill.md",
|
|
683
|
-
"bytes":
|
|
684
|
-
"chars":
|
|
685
|
-
"lines":
|
|
686
|
-
"approx_tokens":
|
|
683
|
+
"bytes": 37109,
|
|
684
|
+
"chars": 36955,
|
|
685
|
+
"lines": 444,
|
|
686
|
+
"approx_tokens": 9239,
|
|
687
687
|
"approx_chars_per_token": 4,
|
|
688
688
|
"sections": {
|
|
689
689
|
"frontmatter-scope": {
|
|
@@ -707,9 +707,9 @@
|
|
|
707
707
|
"approx_tokens": 298
|
|
708
708
|
},
|
|
709
709
|
"exploit-availability-matrix": {
|
|
710
|
-
"bytes":
|
|
711
|
-
"chars":
|
|
712
|
-
"approx_tokens":
|
|
710
|
+
"bytes": 2802,
|
|
711
|
+
"chars": 2780,
|
|
712
|
+
"approx_tokens": 695
|
|
713
713
|
},
|
|
714
714
|
"the-learning-loop": {
|
|
715
715
|
"bytes": 1417,
|
|
@@ -717,9 +717,9 @@
|
|
|
717
717
|
"approx_tokens": 343
|
|
718
718
|
},
|
|
719
719
|
"pre-run-lessons-encoded-from-documented-zero-days": {
|
|
720
|
-
"bytes":
|
|
721
|
-
"chars":
|
|
722
|
-
"approx_tokens":
|
|
720
|
+
"bytes": 20851,
|
|
721
|
+
"chars": 20807,
|
|
722
|
+
"approx_tokens": 5202
|
|
723
723
|
},
|
|
724
724
|
"analysis-procedure": {
|
|
725
725
|
"bytes": 2122,
|
|
@@ -1510,16 +1510,16 @@
|
|
|
1510
1510
|
},
|
|
1511
1511
|
"webapp-security": {
|
|
1512
1512
|
"path": "skills/webapp-security/skill.md",
|
|
1513
|
-
"bytes":
|
|
1514
|
-
"chars":
|
|
1513
|
+
"bytes": 28798,
|
|
1514
|
+
"chars": 28626,
|
|
1515
1515
|
"lines": 285,
|
|
1516
|
-
"approx_tokens":
|
|
1516
|
+
"approx_tokens": 7157,
|
|
1517
1517
|
"approx_chars_per_token": 4,
|
|
1518
1518
|
"sections": {
|
|
1519
1519
|
"threat-context": {
|
|
1520
|
-
"bytes":
|
|
1521
|
-
"chars":
|
|
1522
|
-
"approx_tokens":
|
|
1520
|
+
"bytes": 3450,
|
|
1521
|
+
"chars": 3438,
|
|
1522
|
+
"approx_tokens": 860
|
|
1523
1523
|
},
|
|
1524
1524
|
"framework-lag-declaration": {
|
|
1525
1525
|
"bytes": 3561,
|
package/data/cve-catalog.json
CHANGED
|
@@ -656,7 +656,7 @@
|
|
|
656
656
|
"live_patch_available": 0,
|
|
657
657
|
"reboot_required": 5
|
|
658
658
|
},
|
|
659
|
-
"epss_score":
|
|
659
|
+
"epss_score": 7e-05,
|
|
660
660
|
"epss_percentile": 0.0051,
|
|
661
661
|
"epss_date": "2026-05-13",
|
|
662
662
|
"epss_source": "https://api.first.org/data/v1/epss?cve=CVE-2026-43284",
|
|
@@ -1225,5 +1225,172 @@
|
|
|
1225
1225
|
]
|
|
1226
1226
|
},
|
|
1227
1227
|
"last_updated": "2026-05-13"
|
|
1228
|
+
},
|
|
1229
|
+
"CVE-2026-46300": {
|
|
1230
|
+
"name": "Fragnesia",
|
|
1231
|
+
"type": "LPE",
|
|
1232
|
+
"cvss_score": 7.8,
|
|
1233
|
+
"cvss_vector": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
|
|
1234
|
+
"cisa_kev": false,
|
|
1235
|
+
"cisa_kev_date": null,
|
|
1236
|
+
"cisa_kev_due_date": null,
|
|
1237
|
+
"poc_available": true,
|
|
1238
|
+
"poc_description": "Public PoC released alongside disclosure on the V12 security team's GitHub. One-line invocation against /usr/bin/su yields a root shell. No race condition — the page-cache write primitive is deterministic.",
|
|
1239
|
+
"ai_discovered": false,
|
|
1240
|
+
"ai_assisted_weaponization": false,
|
|
1241
|
+
"active_exploitation": "none",
|
|
1242
|
+
"affected": "Linux kernel — all distributions shipping kernel >= 5.10 with the XFRM ESP-in-TCP path enabled (default on RHEL 8/9, Ubuntu 20.04+, Debian 11+, Amazon Linux 2/2023, SUSE 15, AlmaLinux 8/9, CloudLinux 8/9, Rocky Linux 8/9, Alpine, and derivatives). Containers inherit host-kernel exposure regardless of image patch level.",
|
|
1243
|
+
"affected_versions": [
|
|
1244
|
+
"linux-kernel >= 5.10",
|
|
1245
|
+
"linux-kernel < 6.8.11"
|
|
1246
|
+
],
|
|
1247
|
+
"vector": "Page-cache corruption via XFRM ESP-in-TCP skb coalescing. skb_try_coalesce() fails to propagate the SKBFL_SHARED_FRAG marker when transferring paged fragments between socket buffers, so the kernel loses track of externally-backed fragments (page-cache pages spliced from a file). An unprivileged local user can deterministically overwrite read-only file data in the kernel page cache without touching the on-disk file. The canonical payload targets /usr/bin/su; any read-only setuid binary resident in the page cache is reachable.",
|
|
1248
|
+
"complexity": "deterministic",
|
|
1249
|
+
"complexity_notes": "No race condition. No heap spray. Same primitive class as Dirty Frag (CVE-2026-43284 / CVE-2026-43500) — Fragnesia is the sibling bug surfaced by the Dirty Frag patch. Mitigation set is identical: unloading esp4 / esp6 / rxrpc removes the vulnerable code path without a reboot.",
|
|
1250
|
+
"patch_available": true,
|
|
1251
|
+
"patch_required_reboot": false,
|
|
1252
|
+
"live_patch_available": true,
|
|
1253
|
+
"live_patch_tools": [
|
|
1254
|
+
"kpatch",
|
|
1255
|
+
"canonical-livepatch",
|
|
1256
|
+
"kGraft",
|
|
1257
|
+
"CloudLinux KernelCare",
|
|
1258
|
+
"AlmaLinux kernel-secureboot update (testing)",
|
|
1259
|
+
"CloudLinux kernel update (testing)"
|
|
1260
|
+
],
|
|
1261
|
+
"live_patch_notes": "Live patches in vendor pipelines as of 2026-05-13: AlmaLinux + CloudLinux published kernels to their testing channels the same day; Rocky Linux community discussion open; Canonical Livepatch + kpatch follow standard cadence. Module-unload mitigation (esp4 / esp6 / rxrpc) is non-reboot and identical to the Dirty Frag mitigation set, so any host already mitigated for CVE-2026-43284 / CVE-2026-43500 by module blacklist is already mitigated for Fragnesia.",
|
|
1262
|
+
"framework_control_gaps": {
|
|
1263
|
+
"NIST-800-53-SI-2": "30-day critical patch SLA is an exploitation window for a deterministic LPE with a public PoC. Module-unload mitigation is non-reboot and available immediately, but no SI-2 implementation requires it as a compensating control.",
|
|
1264
|
+
"ISO-27001-2022-A.8.8": "'Appropriate timescales' undefined; standard 30-day interpretation is unsafe for deterministic LPE with public PoC. No requirement to track kernel-module-blacklist as a compensating control.",
|
|
1265
|
+
"NIS2-Art21-patch-management": "Art. 21(2)(c) patch-management measures are undefined for fast-cycle kernel LPEs with public PoC. No guidance on module-blacklist as an interim measure.",
|
|
1266
|
+
"DORA-Art9": "ICT incident management presumes vendor-patch cadence; module-unload as immediate mitigation has no place in the typical DORA evidence pack.",
|
|
1267
|
+
"UK-CAF-B4": "System security principle is silent on subsystem module disable as a compensating control for unpatched kernel LPE.",
|
|
1268
|
+
"AU-ISM-1546": "Essential 8 patch-applications maturity ladder anchors on advisory date, not on PoC availability. ML3 48h is still long for a deterministic public exploit.",
|
|
1269
|
+
"ISO-27001-2022-A.5.7": "Threat-intelligence control collects feeds but does not require the operational pivot (module unload) when intel shows a same-family sequel to a previously-patched bug."
|
|
1270
|
+
},
|
|
1271
|
+
"atlas_refs": [],
|
|
1272
|
+
"attack_refs": [
|
|
1273
|
+
"T1068"
|
|
1274
|
+
],
|
|
1275
|
+
"rwep_score": 20,
|
|
1276
|
+
"rwep_factors": {
|
|
1277
|
+
"cisa_kev": 0,
|
|
1278
|
+
"poc_available": 20,
|
|
1279
|
+
"ai_factor": 0,
|
|
1280
|
+
"active_exploitation": 0,
|
|
1281
|
+
"blast_radius": 25,
|
|
1282
|
+
"patch_available": -15,
|
|
1283
|
+
"live_patch_available": -10,
|
|
1284
|
+
"reboot_required": 0
|
|
1285
|
+
},
|
|
1286
|
+
"rwep_notes": "RWEP 20 today. Score will jump to 55+ on CISA KEV listing (+25 KEV) and to 65+ if active exploitation is confirmed. Blast radius 25 reflects every Linux host with esp4/esp6 (common in IPsec deployments) or rxrpc (Kerberos/AFS environments) loaded — not all hosts but a large fraction of enterprise fleets.",
|
|
1287
|
+
"cwe_refs": [
|
|
1288
|
+
"CWE-672",
|
|
1289
|
+
"CWE-787"
|
|
1290
|
+
],
|
|
1291
|
+
"source_verified": "2026-05-14",
|
|
1292
|
+
"verification_sources": [
|
|
1293
|
+
"https://nvd.nist.gov/vuln/detail/CVE-2026-46300",
|
|
1294
|
+
"https://almalinux.org/blog/2026-05-13-fragnesia-cve-2026-46300/",
|
|
1295
|
+
"https://blog.cloudlinux.com/fragnesia-mitigation-and-kernel-update",
|
|
1296
|
+
"https://www.microsoft.com/en-us/security/blog/2026/05/08/active-attack-dirty-frag-page-cache-lpe-family/",
|
|
1297
|
+
"https://www.wiz.io/vulnerability-database/cve/cve-2026-46300",
|
|
1298
|
+
"https://www.helpnetsecurity.com/2026/05/14/fragnesia-cve-2026-46300-linux-kernel-lpe/",
|
|
1299
|
+
"https://thehackernews.com/2026/05/new-fragnesia-linux-kernel-lpe-grants.html",
|
|
1300
|
+
"https://www.theregister.com/security/2026/05/14/dirty-frag-gets-a-sequel-as-fragnesia/",
|
|
1301
|
+
"https://securityaffairs.com/192145/uncategorized/linux-kernel-bug-fragnesia-allows-local-root-access-attacks.html",
|
|
1302
|
+
"https://securityonline.info/fragnesia-linux-kernel-lpe-exploit-poc-disclosure/",
|
|
1303
|
+
"https://www.bleepingcomputer.com/news/security/new-fragnesia-linux-kernel-bug-allows-local-root-access/",
|
|
1304
|
+
"https://www.securityweek.com/fragnesia-linux-kernel-lpe-page-cache-corruption/",
|
|
1305
|
+
"https://forums.rockylinux.org/t/fragnesia-cve-2026-46300-mitigation-thread"
|
|
1306
|
+
],
|
|
1307
|
+
"vendor_advisories": [
|
|
1308
|
+
{
|
|
1309
|
+
"vendor": "kernel.org",
|
|
1310
|
+
"advisory_id": null,
|
|
1311
|
+
"url": "https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-46300",
|
|
1312
|
+
"severity": "high",
|
|
1313
|
+
"published_date": "2026-05-13"
|
|
1314
|
+
},
|
|
1315
|
+
{
|
|
1316
|
+
"vendor": "AlmaLinux",
|
|
1317
|
+
"advisory_id": null,
|
|
1318
|
+
"url": "https://almalinux.org/blog/2026-05-13-fragnesia-cve-2026-46300/",
|
|
1319
|
+
"severity": "high",
|
|
1320
|
+
"published_date": "2026-05-13"
|
|
1321
|
+
},
|
|
1322
|
+
{
|
|
1323
|
+
"vendor": "CloudLinux",
|
|
1324
|
+
"advisory_id": null,
|
|
1325
|
+
"url": "https://blog.cloudlinux.com/fragnesia-mitigation-and-kernel-update",
|
|
1326
|
+
"severity": "high",
|
|
1327
|
+
"published_date": "2026-05-13"
|
|
1328
|
+
},
|
|
1329
|
+
{
|
|
1330
|
+
"vendor": "Rocky Linux",
|
|
1331
|
+
"advisory_id": null,
|
|
1332
|
+
"url": "https://forums.rockylinux.org/t/fragnesia-cve-2026-46300-mitigation-thread",
|
|
1333
|
+
"severity": "high",
|
|
1334
|
+
"published_date": "2026-05-13"
|
|
1335
|
+
},
|
|
1336
|
+
{
|
|
1337
|
+
"vendor": "Red Hat",
|
|
1338
|
+
"advisory_id": null,
|
|
1339
|
+
"url": "https://access.redhat.com/security/cve/CVE-2026-46300",
|
|
1340
|
+
"severity": "important",
|
|
1341
|
+
"published_date": "2026-05-13"
|
|
1342
|
+
},
|
|
1343
|
+
{
|
|
1344
|
+
"vendor": "Canonical (Ubuntu)",
|
|
1345
|
+
"advisory_id": null,
|
|
1346
|
+
"url": "https://ubuntu.com/security/CVE-2026-46300",
|
|
1347
|
+
"severity": "high",
|
|
1348
|
+
"published_date": "2026-05-13"
|
|
1349
|
+
},
|
|
1350
|
+
{
|
|
1351
|
+
"vendor": "SUSE",
|
|
1352
|
+
"advisory_id": null,
|
|
1353
|
+
"url": "https://www.suse.com/security/cve/CVE-2026-46300.html",
|
|
1354
|
+
"severity": "important",
|
|
1355
|
+
"published_date": "2026-05-13"
|
|
1356
|
+
},
|
|
1357
|
+
{
|
|
1358
|
+
"vendor": "Debian",
|
|
1359
|
+
"advisory_id": null,
|
|
1360
|
+
"url": "https://security-tracker.debian.org/tracker/CVE-2026-46300",
|
|
1361
|
+
"severity": "high",
|
|
1362
|
+
"published_date": "2026-05-14"
|
|
1363
|
+
}
|
|
1364
|
+
],
|
|
1365
|
+
"iocs": {
|
|
1366
|
+
"payload_artifacts": [
|
|
1367
|
+
"Setuid-root binary in /usr/bin, /usr/sbin, /bin, /sbin whose sha256 differs from distro package-manager (`rpm -Va`, `debsums -c`, `dpkg --verify`) — Fragnesia's page-cache write primitive corrupts the in-cache copy without modifying on-disk bytes; `sha256sum /usr/bin/su` against a freshly-read-from-disk copy will mismatch the page-cache-resident copy",
|
|
1368
|
+
"/usr/bin/su / /usr/bin/sudo / /usr/bin/passwd / /usr/bin/chsh / /usr/bin/chfn / /usr/bin/newgrp / /usr/bin/mount in page cache (`vmtouch -v <path>`) but verification against on-disk bytes (`echo 3 > /proc/sys/vm/drop_caches; sha256sum <path>`) shows the disk copy is clean — primary forensic signature of page-cache-resident corruption",
|
|
1369
|
+
"Process whose /proc/<pid>/status transitions Uid: 1000 1000 1000 1000 -> Uid: 0 0 0 0 within 60s of an execve of a previously-cached setuid binary"
|
|
1370
|
+
],
|
|
1371
|
+
"runtime_syscall": [
|
|
1372
|
+
"splice(2) or vmsplice(2) syscall by uid >= 1000 with source fd opened O_RDONLY against a setuid file and target fd an AF_INET / AF_INET6 socket with ESP-in-TCP encap set — primary Fragnesia exploitation primitive",
|
|
1373
|
+
"setsockopt(2) with SOL_IP / SOL_IPV6 + UDP_ENCAP / TCP_ULP setting xfrm encap modes from an unprivileged process that has no IPsec-relevant workload",
|
|
1374
|
+
"sendmsg(2) / sendmmsg(2) on a socket configured for ESP-in-TCP encap with MSG_ZEROCOPY and a source iovec pointing into a read-only mmap of a setuid binary"
|
|
1375
|
+
],
|
|
1376
|
+
"kernel_trace": [
|
|
1377
|
+
"ftrace tracepoint skb_try_coalesce or __skb_grow firing with destination skb missing the SKBFL_SHARED_FRAG flag while source skb has paged frags backed by externally-mapped pages",
|
|
1378
|
+
"eBPF kprobe on skb_try_coalesce / xfrm_input / esp_input_done with caller_uid != 0 and the resulting skb's shinfo->flags lacking SKBFL_SHARED_FRAG",
|
|
1379
|
+
"dmesg BUG: or WARN_ON from net/xfrm/, net/ipv4/esp4.c, net/ipv6/esp6.c, or net/rxrpc/ within 60s of an unprivileged-process privilege transition"
|
|
1380
|
+
],
|
|
1381
|
+
"behavioral": [
|
|
1382
|
+
"Unprivileged process spliced data from a setuid binary into an XFRM-configured socket without a corresponding IPsec policy in /proc/net/xfrm_stat",
|
|
1383
|
+
"Root-uid shell (bash, sh, dash, zsh) whose PPid resolves to a non-setuid, non-root parent (python, ruby, node, user-owned /tmp or /home binary) following recent splice/sendmsg activity on AF_INET sockets with ESP encap",
|
|
1384
|
+
"Kernel module esp4 / esp6 / rxrpc loaded on a host whose configured workload has no IPsec / no Kerberos-AFS dependency — exposure-without-purpose signature"
|
|
1385
|
+
],
|
|
1386
|
+
"mitigation_state": [
|
|
1387
|
+
"Kernel version in affected_versions range AND `modprobe -n -v esp4` shows the module is loadable AND no `blacklist esp4` / `install esp4 /bin/false` line in /etc/modprobe.d/*.conf — module-unload mitigation NOT applied",
|
|
1388
|
+
"Kernel version in affected_versions range AND /sys/kernel/livepatch/*/cve-ids does NOT contain CVE-2026-46300 — treat as EXPOSED regardless of generic livepatch-active flag",
|
|
1389
|
+
"RHEL/AlmaLinux/CloudLinux: kpatch-livepatch-*-CVE-2026-46300 RPM installed but not in `kpatch list` Loaded patch modules section — package-installed-without-load silent exposure",
|
|
1390
|
+
"Ubuntu: `canonical-livepatch status --verbose` 'fixes:' list does not include CVE-2026-46300 while kernel in affected range"
|
|
1391
|
+
],
|
|
1392
|
+
"forensic_note": "Fragnesia corrupts page-cache pages without touching disk. File-integrity tools that hash on-disk bytes (AIDE, Tripwire, IMA in measure-only mode) cannot detect the corruption — the on-disk file is unchanged. Detection requires either (a) reading the binary through the page cache (`vmtouch` + `sha256sum`) and comparing to a freshly-read-from-disk copy after `echo 3 > /proc/sys/vm/drop_caches`, or (b) the runtime_syscall + kernel_trace indicators above. Operators who blacklisted esp4 / esp6 / rxrpc for CVE-2026-43284 / CVE-2026-43500 (Dirty Frag) are already mitigated for Fragnesia — the mitigation set is identical."
|
|
1393
|
+
},
|
|
1394
|
+
"last_updated": "2026-05-14"
|
|
1228
1395
|
}
|
|
1229
|
-
}
|
|
1396
|
+
}
|
|
@@ -111,5 +111,21 @@
|
|
|
111
111
|
"active_exploitation": "confirmed",
|
|
112
112
|
"last_verified": "2026-05-13",
|
|
113
113
|
"verification_source": "OSV.dev MAL-2026-3083, Snyk SNYK-PYTHON-ELEMENTARYDATA-16316110, StepSecurity forensic writeup, Elementary Data incident report"
|
|
114
|
+
},
|
|
115
|
+
"CVE-2026-46300": {
|
|
116
|
+
"poc_status": "public",
|
|
117
|
+
"poc_description": "PoC published alongside disclosure on the V12 security team's GitHub. One-liner targets /usr/bin/su; the exploit primitive is deterministic page-cache corruption via XFRM ESP-in-TCP skb coalescing. No race condition, no kernel fingerprinting beyond version-range check.",
|
|
118
|
+
"weaponization_stage": "demonstrated",
|
|
119
|
+
"exploit_class": "deterministic LPE primitive",
|
|
120
|
+
"maturity_tier": "PoC",
|
|
121
|
+
"ai_discovery_confirmed": false,
|
|
122
|
+
"ai_assisted_weaponization": false,
|
|
123
|
+
"exploit_complexity": "low",
|
|
124
|
+
"complexity_notes": "Single-stage, deterministic. Same primitive class as Dirty Frag (CVE-2026-43284 / CVE-2026-43500) — the bug was introduced by the patch for Dirty Frag, so existing module-unload mitigations for esp4 / esp6 / rxrpc also mitigate Fragnesia.",
|
|
125
|
+
"active_exploitation": "none",
|
|
126
|
+
"discovered_at": "2026-05-13",
|
|
127
|
+
"poc_observed_at": "2026-05-13",
|
|
128
|
+
"last_verified": "2026-05-14",
|
|
129
|
+
"verification_source": "NVD CVE-2026-46300, V12 security team disclosure, AlmaLinux + CloudLinux advisories, Microsoft Security Blog (Dirty Frag family analysis)"
|
|
114
130
|
}
|
|
115
131
|
}
|
|
@@ -261,6 +261,24 @@
|
|
|
261
261
|
"control_id": "CC6",
|
|
262
262
|
"designed_for": "Logical and physical access controls.",
|
|
263
263
|
"insufficient_because": "Same as AC-2 — authorized service account, no access-control finding even when account is being abused as C2."
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"framework": "uk-caf",
|
|
267
|
+
"control_id": "C1 — Security monitoring",
|
|
268
|
+
"designed_for": "NCSC CAF outcome that security monitoring detects threats to the essential function.",
|
|
269
|
+
"insufficient_because": "Monitoring outcome requires a baseline of normal; vendor AI-API traffic is new enough that the established baseline classifies all of it as normal. The outcome can be 'achieved' while C2 traverses the same channel undetected."
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"framework": "au-essential-8",
|
|
273
|
+
"control_id": "Strategy 5 — Restrict admin privileges",
|
|
274
|
+
"designed_for": "ASD mitigation strategy limiting administrative privilege scope and re-validation cadence.",
|
|
275
|
+
"insufficient_because": "Privilege restriction targets human admin accounts. The AI service account is non-human, holds the API token, and is excluded from the strategy's quarterly re-validation requirement on standard ML2 implementations."
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"framework": "au-ism",
|
|
279
|
+
"control_id": "ISM-1841",
|
|
280
|
+
"designed_for": "Australian Government ISM control on event logging for cloud and SaaS services.",
|
|
281
|
+
"insufficient_because": "Logging scope assumes the org receives audit logs from the SaaS provider. AI-API providers expose request/response metadata but not prompt content, so the control's detection value collapses on the exfil-via-prompt channel."
|
|
264
282
|
}
|
|
265
283
|
]
|
|
266
284
|
},
|
|
@@ -209,6 +209,36 @@
|
|
|
209
209
|
"control_id": "Annex I",
|
|
210
210
|
"designed_for": "Cyber Resilience Act essential requirements (effective Dec 2027).",
|
|
211
211
|
"insufficient_because": "Names SBOM + vulnerability handling; effective date is in the future. Container-specific operationalization will be set by harmonized standards still being drafted in 2026."
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"framework": "nis2",
|
|
215
|
+
"control_id": "Art.21(2)(e)",
|
|
216
|
+
"designed_for": "Security in network and information systems acquisition, development and maintenance for essential and important entities.",
|
|
217
|
+
"insufficient_because": "Names secure configuration as essential measure. Implementing acts have not bound container-specific primitives (privileged, hostPID, runAsUser:0, capabilities-add, hostPath mounts); a fully NIS2-compliant entity can ship privileged containers."
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"framework": "dora",
|
|
221
|
+
"control_id": "Art.9",
|
|
222
|
+
"designed_for": "ICT systems, protocols and tools — protective and preventative measures for financial entities.",
|
|
223
|
+
"insufficient_because": "Article requires 'state-of-the-art' protective measures without enumerating container-runtime primitives. DORA-compliant financial-entity ICT can include privileged-container workloads with no DORA-side finding."
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"framework": "uk-caf",
|
|
227
|
+
"control_id": "B4 — System security",
|
|
228
|
+
"designed_for": "NCSC CAF outcome that operational systems are protected against cyber attack.",
|
|
229
|
+
"insufficient_because": "Outcome-based. Container manifests granting host-namespace access (hostPID, hostNetwork, hostIPC) or capability escalation (CAP_SYS_ADMIN) are not enumerated by the assessment, so the outcome can return 'achieved' on an escape-prone cluster."
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"framework": "au-essential-8",
|
|
233
|
+
"control_id": "Strategy 5 — Restrict admin privileges",
|
|
234
|
+
"designed_for": "ASD mitigation strategy limiting administrative privilege scope.",
|
|
235
|
+
"insufficient_because": "Targets human admin accounts. Container workloads running as UID 0 or with CAP_SYS_ADMIN hold equivalent privilege to a host admin without appearing in the strategy's admin-account inventory."
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"framework": "au-ism",
|
|
239
|
+
"control_id": "ISM-1417",
|
|
240
|
+
"designed_for": "Australian Government ISM control on hardening operating system and platform configurations.",
|
|
241
|
+
"insufficient_because": "Control evidences platform-level hardening at deployment. Per-manifest container security context (Pod Security Standards, runAsNonRoot, readOnlyRootFilesystem) is outside the standard ISM evidence model for the host."
|
|
212
242
|
}
|
|
213
243
|
]
|
|
214
244
|
},
|
|
@@ -201,6 +201,24 @@
|
|
|
201
201
|
"control_id": "Art.21(2)(j)",
|
|
202
202
|
"designed_for": "Cryptography and access control policies.",
|
|
203
203
|
"insufficient_because": "Policy shape. Permits 'we use SSO' as evidence without requiring per-device credential-store inventory."
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"framework": "uk-caf",
|
|
207
|
+
"control_id": "B2 — Identity and access control",
|
|
208
|
+
"designed_for": "NCSC CAF outcome that the org understands, documents and manages access to networks and systems supporting the essential function.",
|
|
209
|
+
"insufficient_because": "Outcome focuses on authoritative directory state. Per-device credential stores (browser, IDE, secrets manager, OS keychain) holding long-lived bearer tokens fall outside the assessed identity surface and so escape the outcome's coverage."
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"framework": "au-essential-8",
|
|
213
|
+
"control_id": "Strategy 6 — Multi-factor authentication",
|
|
214
|
+
"designed_for": "ASD mitigation strategy requiring MFA for privileged actions and remote access.",
|
|
215
|
+
"insufficient_because": "MFA binds the human authentication step. Long-lived PATs and cloud access keys cached in IDE/CLI credential stores execute the privileged action without re-traversing the MFA factor; the strategy's surface excludes them."
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"framework": "au-ism",
|
|
219
|
+
"control_id": "ISM-1546",
|
|
220
|
+
"designed_for": "Australian Government ISM control on managing authentication credentials, including their secure storage.",
|
|
221
|
+
"insufficient_because": "Secure-storage requirement is met by any credential vault. Co-resident plaintext credential files on developer machines (npmrc, pip.conf, aws/credentials) are not exhaustively enumerated by the control's audit method."
|
|
204
222
|
}
|
|
205
223
|
]
|
|
206
224
|
},
|
|
@@ -252,6 +252,24 @@
|
|
|
252
252
|
"control_id": "Annex I (essential cybersecurity requirements)",
|
|
253
253
|
"designed_for": "Cryptography for products with digital elements.",
|
|
254
254
|
"insufficient_because": "Manufacturer obligation to use 'state-of-the-art' cryptography. 'State-of-the-art' is interpretive; without binding PQC reference, products ship classical-only."
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"framework": "uk-caf",
|
|
258
|
+
"control_id": "B3 — Data security",
|
|
259
|
+
"designed_for": "NCSC CAF outcome that data is protected from compromise, including by cryptographic means.",
|
|
260
|
+
"insufficient_because": "Outcome-based — does not name algorithms or migration tempo. An entirely classical posture can be assessed as 'achieving' the outcome despite the HNDL adversary recording today against a CRQC decrypt date inside the data's retention window."
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"framework": "au-essential-8",
|
|
264
|
+
"control_id": "Strategy 8 — Regular backups",
|
|
265
|
+
"designed_for": "ASD mitigation strategy for resilient backups, including encryption at rest.",
|
|
266
|
+
"insufficient_because": "Encryption at rest under the strategy uses classical algorithms by default. Long-retention backups encrypted classically are HNDL-exposed for the entire retention period; the strategy makes no reference to PQC or algorithm-currency."
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"framework": "au-ism",
|
|
270
|
+
"control_id": "ISM-0457",
|
|
271
|
+
"designed_for": "Australian Government ISM control on approved cryptographic algorithms for protecting government information.",
|
|
272
|
+
"insufficient_because": "Quarterly publishing cadence lags FIPS 203/204/205 finalization. Approved-algorithm list mixes classical and PQC entries without binding migration deadlines; classical-only stacks remain ISM-compliant for the lag window."
|
|
255
273
|
}
|
|
256
274
|
]
|
|
257
275
|
},
|