@blamejs/exceptd-skills 0.13.81 → 0.13.83
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 +8 -0
- package/data/_indexes/_meta.json +9 -9
- package/data/_indexes/activity-feed.json +2 -2
- package/data/_indexes/catalog-summaries.json +2 -2
- package/data/_indexes/chains.json +1648 -0
- package/data/atlas-ttps.json +9 -1
- package/data/attack-techniques.json +15 -1
- package/data/cve-catalog.json +418 -0
- package/data/cwe-catalog.json +6 -2
- package/data/framework-control-gaps.json +33 -1
- package/data/zeroday-lessons.json +200 -0
- package/manifest.json +44 -44
- package/package.json +2 -2
- package/sbom.cdx.json +25 -25
|
@@ -35,14 +35,18 @@
|
|
|
35
35
|
"opened_date": "2026-01-01",
|
|
36
36
|
"evidence_cves": [
|
|
37
37
|
"CVE-2023-48022",
|
|
38
|
+
"CVE-2024-0132",
|
|
38
39
|
"CVE-2024-50050",
|
|
40
|
+
"CVE-2025-1550",
|
|
39
41
|
"CVE-2025-23254",
|
|
42
|
+
"CVE-2025-23266",
|
|
40
43
|
"CVE-2025-30165",
|
|
41
44
|
"CVE-2025-34291",
|
|
42
45
|
"CVE-2025-49596",
|
|
43
46
|
"CVE-2025-54136",
|
|
44
47
|
"CVE-2025-60455",
|
|
45
48
|
"CVE-2025-64496",
|
|
49
|
+
"CVE-2025-8747",
|
|
46
50
|
"CVE-2026-0766",
|
|
47
51
|
"CVE-2026-22252",
|
|
48
52
|
"CVE-2026-22688",
|
|
@@ -1185,7 +1189,9 @@
|
|
|
1185
1189
|
"status": "open",
|
|
1186
1190
|
"opened_date": "2026-05-17",
|
|
1187
1191
|
"evidence_cves": [
|
|
1188
|
-
"CVE-2024-
|
|
1192
|
+
"CVE-2024-0132",
|
|
1193
|
+
"CVE-2024-21626",
|
|
1194
|
+
"CVE-2025-23266"
|
|
1189
1195
|
],
|
|
1190
1196
|
"atlas_refs": [],
|
|
1191
1197
|
"attack_refs": [
|
|
@@ -1381,6 +1387,7 @@
|
|
|
1381
1387
|
"CVE-2025-14174",
|
|
1382
1388
|
"CVE-2025-14611",
|
|
1383
1389
|
"CVE-2025-14733",
|
|
1390
|
+
"CVE-2025-1550",
|
|
1384
1391
|
"CVE-2025-15556",
|
|
1385
1392
|
"CVE-2025-20281",
|
|
1386
1393
|
"CVE-2025-20333",
|
|
@@ -1507,6 +1514,7 @@
|
|
|
1507
1514
|
"CVE-2025-7775",
|
|
1508
1515
|
"CVE-2025-8088",
|
|
1509
1516
|
"CVE-2025-8110",
|
|
1517
|
+
"CVE-2025-8747",
|
|
1510
1518
|
"CVE-2025-8875",
|
|
1511
1519
|
"CVE-2025-8876",
|
|
1512
1520
|
"CVE-2025-9242",
|
|
@@ -1754,11 +1762,14 @@
|
|
|
1754
1762
|
"opened_date": "2026-03-15",
|
|
1755
1763
|
"evidence_cves": [
|
|
1756
1764
|
"CVE-2023-48022",
|
|
1765
|
+
"CVE-2024-0132",
|
|
1757
1766
|
"CVE-2024-50050",
|
|
1758
1767
|
"CVE-2025-10585",
|
|
1759
1768
|
"CVE-2025-1094",
|
|
1760
1769
|
"CVE-2025-14174",
|
|
1770
|
+
"CVE-2025-1550",
|
|
1761
1771
|
"CVE-2025-23254",
|
|
1772
|
+
"CVE-2025-23266",
|
|
1762
1773
|
"CVE-2025-30165",
|
|
1763
1774
|
"CVE-2025-34291",
|
|
1764
1775
|
"CVE-2025-38352",
|
|
@@ -1767,6 +1778,7 @@
|
|
|
1767
1778
|
"CVE-2025-54136",
|
|
1768
1779
|
"CVE-2025-60455",
|
|
1769
1780
|
"CVE-2025-64496",
|
|
1781
|
+
"CVE-2025-8747",
|
|
1770
1782
|
"CVE-2026-0766",
|
|
1771
1783
|
"CVE-2026-22252",
|
|
1772
1784
|
"CVE-2026-22688",
|
|
@@ -2112,7 +2124,9 @@
|
|
|
2112
2124
|
"opened_date": "2026-05-01",
|
|
2113
2125
|
"evidence_cves": [
|
|
2114
2126
|
"CVE-2023-48022",
|
|
2127
|
+
"CVE-2024-0132",
|
|
2115
2128
|
"CVE-2024-40635",
|
|
2129
|
+
"CVE-2025-23266",
|
|
2116
2130
|
"CVE-2025-53767",
|
|
2117
2131
|
"CVE-2026-42897"
|
|
2118
2132
|
],
|
|
@@ -2184,11 +2198,13 @@
|
|
|
2184
2198
|
"CVE-2024-50050",
|
|
2185
2199
|
"CVE-2025-0133",
|
|
2186
2200
|
"CVE-2025-1094",
|
|
2201
|
+
"CVE-2025-1550",
|
|
2187
2202
|
"CVE-2025-23254",
|
|
2188
2203
|
"CVE-2025-30165",
|
|
2189
2204
|
"CVE-2025-60455",
|
|
2190
2205
|
"CVE-2025-64496",
|
|
2191
2206
|
"CVE-2025-6965",
|
|
2207
|
+
"CVE-2025-8747",
|
|
2192
2208
|
"CVE-2026-0766",
|
|
2193
2209
|
"CVE-2026-39884",
|
|
2194
2210
|
"CVE-2026-42208",
|
|
@@ -2325,6 +2341,7 @@
|
|
|
2325
2341
|
"CVE-2023-43000",
|
|
2326
2342
|
"CVE-2023-50224",
|
|
2327
2343
|
"CVE-2023-52163",
|
|
2344
|
+
"CVE-2024-0132",
|
|
2328
2345
|
"CVE-2024-0769",
|
|
2329
2346
|
"CVE-2024-11182",
|
|
2330
2347
|
"CVE-2024-12987",
|
|
@@ -2354,6 +2371,7 @@
|
|
|
2354
2371
|
"CVE-2025-14174",
|
|
2355
2372
|
"CVE-2025-14611",
|
|
2356
2373
|
"CVE-2025-14733",
|
|
2374
|
+
"CVE-2025-1550",
|
|
2357
2375
|
"CVE-2025-15556",
|
|
2358
2376
|
"CVE-2025-20281",
|
|
2359
2377
|
"CVE-2025-20333",
|
|
@@ -2366,6 +2384,7 @@
|
|
|
2366
2384
|
"CVE-2025-21479",
|
|
2367
2385
|
"CVE-2025-21480",
|
|
2368
2386
|
"CVE-2025-23254",
|
|
2387
|
+
"CVE-2025-23266",
|
|
2369
2388
|
"CVE-2025-24016",
|
|
2370
2389
|
"CVE-2025-24201",
|
|
2371
2390
|
"CVE-2025-24893",
|
|
@@ -2484,6 +2503,7 @@
|
|
|
2484
2503
|
"CVE-2025-7775",
|
|
2485
2504
|
"CVE-2025-8088",
|
|
2486
2505
|
"CVE-2025-8110",
|
|
2506
|
+
"CVE-2025-8747",
|
|
2487
2507
|
"CVE-2025-8875",
|
|
2488
2508
|
"CVE-2025-8876",
|
|
2489
2509
|
"CVE-2025-9242",
|
|
@@ -4799,15 +4819,19 @@
|
|
|
4799
4819
|
"opened_date": "2026-05-15",
|
|
4800
4820
|
"evidence_cves": [
|
|
4801
4821
|
"CVE-2023-48022",
|
|
4822
|
+
"CVE-2024-0132",
|
|
4802
4823
|
"CVE-2024-21762",
|
|
4803
4824
|
"CVE-2024-50050",
|
|
4825
|
+
"CVE-2025-1550",
|
|
4804
4826
|
"CVE-2025-23254",
|
|
4827
|
+
"CVE-2025-23266",
|
|
4805
4828
|
"CVE-2025-30165",
|
|
4806
4829
|
"CVE-2025-34291",
|
|
4807
4830
|
"CVE-2025-49596",
|
|
4808
4831
|
"CVE-2025-54136",
|
|
4809
4832
|
"CVE-2025-60455",
|
|
4810
4833
|
"CVE-2025-64496",
|
|
4834
|
+
"CVE-2025-8747",
|
|
4811
4835
|
"CVE-2026-0300",
|
|
4812
4836
|
"CVE-2026-0766",
|
|
4813
4837
|
"CVE-2026-20182",
|
|
@@ -5315,15 +5339,19 @@
|
|
|
5315
5339
|
"status": "open",
|
|
5316
5340
|
"opened_date": "2026-05-17",
|
|
5317
5341
|
"evidence_cves": [
|
|
5342
|
+
"CVE-2024-0132",
|
|
5318
5343
|
"CVE-2024-21762",
|
|
5319
5344
|
"CVE-2024-50050",
|
|
5345
|
+
"CVE-2025-1550",
|
|
5320
5346
|
"CVE-2025-23254",
|
|
5347
|
+
"CVE-2025-23266",
|
|
5321
5348
|
"CVE-2025-30165",
|
|
5322
5349
|
"CVE-2025-34291",
|
|
5323
5350
|
"CVE-2025-49596",
|
|
5324
5351
|
"CVE-2025-54136",
|
|
5325
5352
|
"CVE-2025-60455",
|
|
5326
5353
|
"CVE-2025-64496",
|
|
5354
|
+
"CVE-2025-8747",
|
|
5327
5355
|
"CVE-2026-0766",
|
|
5328
5356
|
"CVE-2026-22252",
|
|
5329
5357
|
"CVE-2026-22688",
|
|
@@ -5372,15 +5400,19 @@
|
|
|
5372
5400
|
"opened_date": "2026-05-17",
|
|
5373
5401
|
"evidence_cves": [
|
|
5374
5402
|
"CVE-2023-48022",
|
|
5403
|
+
"CVE-2024-0132",
|
|
5375
5404
|
"CVE-2024-21762",
|
|
5376
5405
|
"CVE-2024-50050",
|
|
5406
|
+
"CVE-2025-1550",
|
|
5377
5407
|
"CVE-2025-23254",
|
|
5408
|
+
"CVE-2025-23266",
|
|
5378
5409
|
"CVE-2025-30165",
|
|
5379
5410
|
"CVE-2025-34291",
|
|
5380
5411
|
"CVE-2025-49596",
|
|
5381
5412
|
"CVE-2025-54136",
|
|
5382
5413
|
"CVE-2025-60455",
|
|
5383
5414
|
"CVE-2025-64496",
|
|
5415
|
+
"CVE-2025-8747",
|
|
5384
5416
|
"CVE-2026-0766",
|
|
5385
5417
|
"CVE-2026-22252",
|
|
5386
5418
|
"CVE-2026-22688",
|
|
@@ -6983,6 +6983,206 @@
|
|
|
6983
6983
|
"_auto_imported": false,
|
|
6984
6984
|
"_intake_method": "manual-verified-curation"
|
|
6985
6985
|
},
|
|
6986
|
+
"CVE-2024-0132": {
|
|
6987
|
+
"name": "NVIDIA Container Toolkit TOCTOU Container Escape",
|
|
6988
|
+
"lesson_date": "2026-05-25",
|
|
6989
|
+
"attack_vector": {
|
|
6990
|
+
"description": "NVIDIA Container Toolkit (CWE-367 TOCTOU race) lets a crafted container image escape its container and execute code on the host, crossing the tenant boundary on shared GPU infrastructure. Disclosed by Wiz Research.",
|
|
6991
|
+
"privileges_required": "ability to run or schedule a crafted container image on a GPU node",
|
|
6992
|
+
"complexity": "low (a crafted image / short Dockerfile is sufficient)",
|
|
6993
|
+
"ai_factor": "The GPU container runtime underpins essentially all containerized AI/ML GPU workloads. A single escape on a shared GPU host crosses the tenant boundary and exposes co-tenant models, training data, and cloud credentials. The lesson: the GPU container runtime is an AI-pipeline trust boundary that must be patched and hardened like any isolation control, not assumed safe."
|
|
6994
|
+
},
|
|
6995
|
+
"framework_coverage": {
|
|
6996
|
+
"NIST-800-53-SI-2": {
|
|
6997
|
+
"covered": true,
|
|
6998
|
+
"adequate": false,
|
|
6999
|
+
"gap": "Does not track the GPU container runtime as managed, escape-bearing software under every AI/ML GPU workload."
|
|
7000
|
+
},
|
|
7001
|
+
"NIST-800-53-SC-7": {
|
|
7002
|
+
"covered": true,
|
|
7003
|
+
"adequate": false,
|
|
7004
|
+
"gap": "Boundary protection assumes the container is the tenant boundary; a runtime escape crosses it on shared GPU infrastructure."
|
|
7005
|
+
},
|
|
7006
|
+
"ALL-AI-PIPELINE-INTEGRITY": {
|
|
7007
|
+
"covered": false,
|
|
7008
|
+
"adequate": false,
|
|
7009
|
+
"gap": "No framework treats the GPU container runtime as an AI-pipeline trust boundary whose escape exposes co-tenant AI assets."
|
|
7010
|
+
}
|
|
7011
|
+
},
|
|
7012
|
+
"compliance_exposure_score": {
|
|
7013
|
+
"percent_audit_passing_orgs_still_exposed": 70,
|
|
7014
|
+
"basis": "Organizations treat container isolation as a given and do not track the GPU container runtime version; shared GPU clouds run mixed-tenant workloads on the same hosts.",
|
|
7015
|
+
"theater_pattern": "container_isolation_assumed"
|
|
7016
|
+
},
|
|
7017
|
+
"ai_discovered_zeroday": false,
|
|
7018
|
+
"ai_discovery_source": "human_researcher",
|
|
7019
|
+
"ai_assist_factor": "none",
|
|
7020
|
+
"new_control_requirements": [
|
|
7021
|
+
{
|
|
7022
|
+
"id": "NEW-CTRL-090",
|
|
7023
|
+
"name": "AI-GPU-CONTAINER-RUNTIME-ISOLATION",
|
|
7024
|
+
"description": "Treat the GPU container runtime (NVIDIA Container Toolkit / GPU Operator) as a patch-prioritized isolation boundary: keep it current (upgrade to 1.16.2+), do not run untrusted or mixed-tenant container images on the same GPU host, restrict who can schedule GPU workloads, and run workloads least-privilege. The distinguishing test: on a staging GPU node, run a crafted image that manipulates init hooks / mounts and confirm it cannot read host paths or load host-side code outside its container.",
|
|
7025
|
+
"evidence": "https://nvidia.custhelp.com/app/answers/detail/a_id/5582",
|
|
7026
|
+
"gap_closes": [
|
|
7027
|
+
"NIST-800-53-SI-2",
|
|
7028
|
+
"NIST-800-53-SC-7",
|
|
7029
|
+
"ALL-AI-PIPELINE-INTEGRITY"
|
|
7030
|
+
]
|
|
7031
|
+
}
|
|
7032
|
+
],
|
|
7033
|
+
"_auto_imported": false,
|
|
7034
|
+
"_intake_method": "manual-verified-curation"
|
|
7035
|
+
},
|
|
7036
|
+
"CVE-2025-23266": {
|
|
7037
|
+
"name": "NVIDIA Container Toolkit Init-Hook Untrusted Search Path Container Escape (NVIDIAScape)",
|
|
7038
|
+
"lesson_date": "2026-05-25",
|
|
7039
|
+
"attack_vector": {
|
|
7040
|
+
"description": "NVIDIA Container Toolkit (CWE-426 untrusted search path in init hooks) lets a crafted container image escape its container and execute code on the host, crossing the tenant boundary on shared GPU infrastructure. Disclosed by Wiz Research.",
|
|
7041
|
+
"privileges_required": "ability to run or schedule a crafted container image on a GPU node",
|
|
7042
|
+
"complexity": "low (a crafted image / short Dockerfile is sufficient)",
|
|
7043
|
+
"ai_factor": "The GPU container runtime underpins essentially all containerized AI/ML GPU workloads. A single escape on a shared GPU host crosses the tenant boundary and exposes co-tenant models, training data, and cloud credentials. The lesson: the GPU container runtime is an AI-pipeline trust boundary that must be patched and hardened like any isolation control, not assumed safe."
|
|
7044
|
+
},
|
|
7045
|
+
"framework_coverage": {
|
|
7046
|
+
"NIST-800-53-SI-2": {
|
|
7047
|
+
"covered": true,
|
|
7048
|
+
"adequate": false,
|
|
7049
|
+
"gap": "Does not track the GPU container runtime as managed, escape-bearing software under every AI/ML GPU workload."
|
|
7050
|
+
},
|
|
7051
|
+
"NIST-800-53-SC-7": {
|
|
7052
|
+
"covered": true,
|
|
7053
|
+
"adequate": false,
|
|
7054
|
+
"gap": "Boundary protection assumes the container is the tenant boundary; a runtime escape crosses it on shared GPU infrastructure."
|
|
7055
|
+
},
|
|
7056
|
+
"ALL-AI-PIPELINE-INTEGRITY": {
|
|
7057
|
+
"covered": false,
|
|
7058
|
+
"adequate": false,
|
|
7059
|
+
"gap": "No framework treats the GPU container runtime as an AI-pipeline trust boundary whose escape exposes co-tenant AI assets."
|
|
7060
|
+
}
|
|
7061
|
+
},
|
|
7062
|
+
"compliance_exposure_score": {
|
|
7063
|
+
"percent_audit_passing_orgs_still_exposed": 70,
|
|
7064
|
+
"basis": "Organizations treat container isolation as a given and do not track the GPU container runtime version; shared GPU clouds run mixed-tenant workloads on the same hosts.",
|
|
7065
|
+
"theater_pattern": "container_isolation_assumed"
|
|
7066
|
+
},
|
|
7067
|
+
"ai_discovered_zeroday": false,
|
|
7068
|
+
"ai_discovery_source": "human_researcher",
|
|
7069
|
+
"ai_assist_factor": "none",
|
|
7070
|
+
"new_control_requirements": [
|
|
7071
|
+
{
|
|
7072
|
+
"id": "NEW-CTRL-090",
|
|
7073
|
+
"name": "AI-GPU-CONTAINER-RUNTIME-ISOLATION",
|
|
7074
|
+
"description": "Treat the GPU container runtime (NVIDIA Container Toolkit / GPU Operator) as a patch-prioritized isolation boundary: keep it current (Container Toolkit 1.17.8+ / GPU Operator 25.3.1+), do not run untrusted or mixed-tenant container images on the same GPU host, restrict who can schedule GPU workloads, and run workloads least-privilege. The distinguishing test: on a staging GPU node, run a crafted image that manipulates init hooks / mounts and confirm it cannot read host paths or load host-side code outside its container.",
|
|
7075
|
+
"evidence": "https://nvidia.custhelp.com/app/answers/detail/a_id/5659",
|
|
7076
|
+
"gap_closes": [
|
|
7077
|
+
"NIST-800-53-SI-2",
|
|
7078
|
+
"NIST-800-53-SC-7",
|
|
7079
|
+
"ALL-AI-PIPELINE-INTEGRITY"
|
|
7080
|
+
]
|
|
7081
|
+
}
|
|
7082
|
+
],
|
|
7083
|
+
"_auto_imported": false,
|
|
7084
|
+
"_intake_method": "manual-verified-curation"
|
|
7085
|
+
},
|
|
7086
|
+
"CVE-2025-1550": {
|
|
7087
|
+
"name": "Keras .keras Model Deserialization Arbitrary Code Execution",
|
|
7088
|
+
"lesson_date": "2026-05-25",
|
|
7089
|
+
"attack_vector": {
|
|
7090
|
+
"description": "Keras's .keras model parser uses importlib on names from the model archive, so a crafted model executes arbitrary Python at load time (CWE-94) — no Lambda layer or custom object, no need to call the model.",
|
|
7091
|
+
"privileges_required": "none beyond getting a victim to load an untrusted .keras model",
|
|
7092
|
+
"complexity": "low",
|
|
7093
|
+
"ai_factor": "The abused surface is the ML model file format itself — the canonical AI supply-chain risk: an untrusted model artifact is executable code at load time. The lesson, sharpened by the CVE-2025-1550 -> CVE-2025-8747 sequence, is that model artifacts must be treated as untrusted code (provenance, scanning, safe formats like safetensors), and a partial mitigation such as safe_mode is necessary-but-insufficient when it can be bypassed."
|
|
7094
|
+
},
|
|
7095
|
+
"framework_coverage": {
|
|
7096
|
+
"NIST-800-53-SI-2": {
|
|
7097
|
+
"covered": true,
|
|
7098
|
+
"adequate": false,
|
|
7099
|
+
"gap": "Does not track ML frameworks' model-loading paths as RCE-bearing, nor that the first fix (safe_mode) was bypassable."
|
|
7100
|
+
},
|
|
7101
|
+
"NIST-800-53-SI-10": {
|
|
7102
|
+
"covered": true,
|
|
7103
|
+
"adequate": false,
|
|
7104
|
+
"gap": "Model artifacts are treated as data, but Keras executes code while parsing them; no validation is applied to the artifact."
|
|
7105
|
+
},
|
|
7106
|
+
"ALL-AI-PIPELINE-INTEGRITY": {
|
|
7107
|
+
"covered": false,
|
|
7108
|
+
"adequate": false,
|
|
7109
|
+
"gap": "No framework treats an ML model file as untrusted executable input; loading one from an untrusted source is RCE."
|
|
7110
|
+
}
|
|
7111
|
+
},
|
|
7112
|
+
"compliance_exposure_score": {
|
|
7113
|
+
"percent_audit_passing_orgs_still_exposed": 72,
|
|
7114
|
+
"basis": "ML pipelines pull models from hubs and user uploads and treat them as data; safe_mode is assumed sufficient despite the documented bypass.",
|
|
7115
|
+
"theater_pattern": "model_artifact_trust"
|
|
7116
|
+
},
|
|
7117
|
+
"ai_discovered_zeroday": false,
|
|
7118
|
+
"ai_discovery_source": "human_researcher",
|
|
7119
|
+
"ai_assist_factor": "none",
|
|
7120
|
+
"new_control_requirements": [
|
|
7121
|
+
{
|
|
7122
|
+
"id": "NEW-CTRL-091",
|
|
7123
|
+
"name": "UNTRUSTED-MODEL-ARTIFACT-LOADING",
|
|
7124
|
+
"description": "Treat ML model artifacts as untrusted code: never load .keras / pickle-based models from untrusted sources, verify provenance, prefer safe formats (e.g. safetensors), and load untrusted models only in a sandboxed, network-isolated, least-privilege environment. Upgrade Keras to the fixed release (>= 3.8.0 for CVE-2025-1550; past 3.10.0 for the CVE-2025-8747 safe_mode bypass) and do not rely on safe_mode alone — it was bypassable. The distinguishing test: load an attacker-crafted .keras archive with safe_mode enabled on a sandboxed instance and confirm no code executes.",
|
|
7125
|
+
"evidence": "https://nvd.nist.gov/vuln/detail/CVE-2025-1550",
|
|
7126
|
+
"gap_closes": [
|
|
7127
|
+
"NIST-800-53-SI-2",
|
|
7128
|
+
"NIST-800-53-SI-10",
|
|
7129
|
+
"ALL-AI-PIPELINE-INTEGRITY"
|
|
7130
|
+
]
|
|
7131
|
+
}
|
|
7132
|
+
],
|
|
7133
|
+
"_auto_imported": false,
|
|
7134
|
+
"_intake_method": "manual-verified-curation"
|
|
7135
|
+
},
|
|
7136
|
+
"CVE-2025-8747": {
|
|
7137
|
+
"name": "Keras safe_mode Bypass Model Deserialization Code Execution",
|
|
7138
|
+
"lesson_date": "2026-05-25",
|
|
7139
|
+
"attack_vector": {
|
|
7140
|
+
"description": "The safe_mode mitigation added for CVE-2025-1550 is bypassable through Keras 3.10.0: Model.load_model still lets a crafted .keras archive execute code via arguments to built-in modules (CWE-502), even with safe_mode enabled.",
|
|
7141
|
+
"privileges_required": "none beyond getting a victim to load an untrusted .keras model",
|
|
7142
|
+
"complexity": "low",
|
|
7143
|
+
"ai_factor": "The abused surface is the ML model file format itself — the canonical AI supply-chain risk: an untrusted model artifact is executable code at load time. The lesson, sharpened by the CVE-2025-1550 -> CVE-2025-8747 sequence, is that model artifacts must be treated as untrusted code (provenance, scanning, safe formats like safetensors), and a partial mitigation such as safe_mode is necessary-but-insufficient when it can be bypassed."
|
|
7144
|
+
},
|
|
7145
|
+
"framework_coverage": {
|
|
7146
|
+
"NIST-800-53-SI-2": {
|
|
7147
|
+
"covered": true,
|
|
7148
|
+
"adequate": false,
|
|
7149
|
+
"gap": "Does not track ML frameworks' model-loading paths as RCE-bearing, nor that the first fix (safe_mode) was bypassable."
|
|
7150
|
+
},
|
|
7151
|
+
"NIST-800-53-SI-10": {
|
|
7152
|
+
"covered": true,
|
|
7153
|
+
"adequate": false,
|
|
7154
|
+
"gap": "A mitigation (safe_mode) is asserted as the control, but it is bypassable; the artifact is still deserialized unsafely."
|
|
7155
|
+
},
|
|
7156
|
+
"ALL-AI-PIPELINE-INTEGRITY": {
|
|
7157
|
+
"covered": false,
|
|
7158
|
+
"adequate": false,
|
|
7159
|
+
"gap": "No framework treats an ML model file as untrusted executable input; loading one from an untrusted source is RCE."
|
|
7160
|
+
}
|
|
7161
|
+
},
|
|
7162
|
+
"compliance_exposure_score": {
|
|
7163
|
+
"percent_audit_passing_orgs_still_exposed": 74,
|
|
7164
|
+
"basis": "ML pipelines pull models from hubs and user uploads and treat them as data; safe_mode is assumed sufficient despite the documented bypass.",
|
|
7165
|
+
"theater_pattern": "incomplete_fix_assumed_complete"
|
|
7166
|
+
},
|
|
7167
|
+
"ai_discovered_zeroday": false,
|
|
7168
|
+
"ai_discovery_source": "human_researcher",
|
|
7169
|
+
"ai_assist_factor": "none",
|
|
7170
|
+
"new_control_requirements": [
|
|
7171
|
+
{
|
|
7172
|
+
"id": "NEW-CTRL-091",
|
|
7173
|
+
"name": "UNTRUSTED-MODEL-ARTIFACT-LOADING",
|
|
7174
|
+
"description": "Treat ML model artifacts as untrusted code: never load .keras / pickle-based models from untrusted sources, verify provenance, prefer safe formats (e.g. safetensors), and load untrusted models only in a sandboxed, network-isolated, least-privilege environment. Upgrade Keras to the fixed release (>= 3.8.0 for CVE-2025-1550; past 3.10.0 for the CVE-2025-8747 safe_mode bypass) and do not rely on safe_mode alone — it was bypassable. The distinguishing test: load an attacker-crafted .keras archive with safe_mode enabled on a sandboxed instance and confirm no code executes.",
|
|
7175
|
+
"evidence": "https://github.com/advisories/GHSA-c9rc-mg46-23w3",
|
|
7176
|
+
"gap_closes": [
|
|
7177
|
+
"NIST-800-53-SI-2",
|
|
7178
|
+
"NIST-800-53-SI-10",
|
|
7179
|
+
"ALL-AI-PIPELINE-INTEGRITY"
|
|
7180
|
+
]
|
|
7181
|
+
}
|
|
7182
|
+
],
|
|
7183
|
+
"_auto_imported": false,
|
|
7184
|
+
"_intake_method": "manual-verified-curation"
|
|
7185
|
+
},
|
|
6986
7186
|
"CVE-2025-34291": {
|
|
6987
7187
|
"name": "Langflow Account Takeover + RCE (CORS / refresh-token chain)",
|
|
6988
7188
|
"lesson_date": "2026-05-24",
|