
Die Zuweisung von Ressourcen ohne Begrenzung oder Drosselung in der HDF5-Gewichtsladekomponente in Google Keras 3.0.0 bis 3.13.0 auf allen Plattformen ermöglicht es einem entfernten Angreifer, einen Denial of Service (DoS) durch Speichererschöpfung und einen Absturz des Python-Interpreters über eine manipulierte .keras-Datei zu verursachen.
| Feld | Details |
|---|---|
| CVE-ID | CVE-2026-0897 |
| Paket | keras (Google Keras) |
| Registry | PyPI |
| Betroffene Versionen | 3.0.0 bis 3.13.0 (einschließlich) |
| Schwachstellentyp | CWE-770: Zuweisung von Ressourcen ohne Grenzen oder Drosselung |
| CVSS-Score | 7.1 Hoch (CVSS 4.0, CNA: Google Inc.) |
| CVSS-Vektor | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N |
| Angriffsvektor | Netzwerk |
| Angriffskomplexität | Niedrig |
| Erforderliche Privilegien | Keine |
| Benutzerinteraktion | Passiv (Opfer lädt eine Modelldatei) |
| Auswirkung auf Verfügbarkeit | Hoch |
| Auswirkung auf Vertraulichkeit | Keine |
| Auswirkung auf Integrität | Keine |
| NVD veröffentlicht | 15. Januar 2026 |
| NVD zuletzt geändert | 23. Januar 2026 |
| Quelle / CNA | Google Inc. |
| Gemeldet von | HyperPS (Sarvesh Patil) über huntr.dev / GHSA |
| Fix-Status | Zusammengeführt — PR #21880 |
In der HDF5-Gewichtsladekomponente von Google Keras, Versionen 3.0.0 bis 3.13.0, besteht auf allen Plattformen eine Denial-of-Service-Schwachstelle. Die Schwachstelle wird durch das Fehlen jeglicher Validierung oder Drosselung bei der Verarbeitung von HDF5-Datensatz-Shape-Metadaten verursacht, die in einem .keras-Archiv deklariert sind.
Das HDF5-Format erlaubt es Datensätzen, ihre Form (Tensor-Dimensionen) als Metadaten zu deklarieren. Wenn Keras Modellgewichte aus einem .keras-Archiv lädt, liest es diese deklarierte Form und versucht, einen entsprechenden Speicherblock zu allokieren, bevor irgendwelche Daten übertragen werden. Da Keras vor der Allokation keine Grenzprüfung der deklarierten Form durchführt, kann ein Angreifer eine model.weights.h5-Datei erstellen, die eine astronomisch große Form deklariert — zum Beispiel (1000000, 1000000, 1000000) — wodurch Keras versucht, eine Speicherallokation im Petabyte-Bereich durchzuführen. Dies erschöpft den gesamten verfügbaren Systemspeicher und lässt den Python-Interpreter abstürzen.
Nach dem Laden des Modells sind keine Inferenz oder weitere Interaktionen erforderlich. Der Angriff wird vollständig zum Ladezeitpunkt ausgelöst.
| Datei | Beschreibung |
|---|---|
keras/src/saving/file_editor.py | KerasFileEditor._extract_weights_from_store() — liest die HDF5-Datensatzform und allokiert Speicher ohne Größenvalidierung oder Drosselung |
Die Schwachstelle befindet sich speziell in der Klasse KerasFileEditor, die für die Deserialisierung von Modellgewicht-Tensoren aus HDF5-Stores verantwortlich ist, die in .keras-Archiven eingebettet sind.
| Metrik | Wert | Bedeutung |
|---|---|---|
| Angriffsvektor (AV) | Netzwerk | Aus der Ferne über eine verteilte Modelldatei ausnutzbar |
| Angriffskomplexität (AC) | Niedrig | Keine besonderen Bedingungen oder Race Conditions erforderlich |
| Angriffsanforderungen (AT) | Keine | Keine vorausgesetzte Bereitstellungskonfiguration erforderlich |
| Erforderliche Privilegien (PR) | Keine | Keine Authentifizierung oder kein Konto erforderlich |
| Benutzerinteraktion (UI) | Passiv | Opfer muss das bösartige .keras-Archiv laden |
| Verfügbarkeit des verwundbaren Systems (VA) | Hoch | Python-Interpreter stürzt ab; Dienst wird vollständig unverfügbar |
| Vertraulichkeit des verwundbaren Systems (VC) | Keine | Keine Offenlegung von Daten |
| Integrität des verwundbaren Systems (VI) | Keine | Keine Datenänderung |
| Auswirkungen auf nachgelagerte Systeme (SC/SI/SA) | Keine | Die Auswirkung ist auf den Ladeprozess beschränkt |
.keras-Modellarchive aus nicht vertrauenswürdigen oder benutzergelieferten Quellen lädt, ist verwundbar| Kontext | Risiko |
|---|---|
Öffentliche Modell-Serving-APIs, die benutzerhochgeladene .keras-Dateien akzeptieren | Angreifer bringt den Inferenzdienst mit einer einzigen Anfrage zum Absturz |
| ML-Plattformen, die Community-Modell-Downloads hosten (z. B. Hugging Face) | Vergiftetes Modell verursacht DoS für jeden Forscher, der es herunterlädt und lädt |
| Umgebungen für föderiertes Lernen | Bösartiger Teilnehmer verteilt eine präparierte Gewichtsdatei, um Koordinator- oder Peer-Knoten zum Absturz zu bringen |
| CI/CD-Pipelines, die Modell-Checkpoints laden | Ein kompromittierter oder ausgetauschter Checkpoint verursacht Pipeline-Ausfälle und Nichtverfügbarkeit |
| Chatbots- oder NLP-Dienste, die Modelle zur Laufzeit per Hot-Reload nachladen | Eine einzige bösartige Neulade-Anfrage bringt den Dienst zum Erliegen |
Das HDF5-Dateiformat speichert Tensor-Metadaten — einschließlich Formdeklarationen — getrennt von den tatsächlichen Datenbytes. Wenn KerasFileEditor._extract_weights_from_store() auf einen Datensatzeintrag stößt, liest es die deklarierte Form und ruft NumPy auf, um ein Array der entsprechenden Dimensionen vorab zu allokieren, bevor irgendwelche Daten von der Festplatte gelesen werden.
Da die Form Metadaten sind, kann eine minimale HDF5-Datei eine Form deklarieren, die Petabytes an Speicher erfordern würde, während die Datei selbst nur wenige Kilobyte groß bleibt. Das Verhältnis von Dateigröße zu Allokationsgröße macht dies zu einem äußerst effektiven Verstärkungsangriff.
Eine Form wie (1000000, 1000000, 1000000) mit einem 32-Bit-Float-Datentyp würde ungefähr 4.000 Petabytes Speicher anfordern. Der Out-of-Memory-Killer des Betriebssystems oder der Python-Allokator lässt den Prozess nahezu sofort abstürzen.
# keras/src/saving/file_editor.py (pre-fix, simplified)
def _extract_weights_from_store(self, h5_file, inner_path=""):
for key in h5_file.keys():
obj = h5_file[key]
if isinstance(obj, h5py.Dataset):
# Shape is read from metadata — no validation performed
shape = obj.shape
# NumPy attempts to allocate based on declared shape
data = np.zeros(shape, dtype=obj.dtype) # VULNERABLE: unbounded allocation
Das Fehlen jeglicher Prüfung von shape vor dem Aufruf von np.zeros() ist die Grundursache.
Diese Informationen dienen ausschließlich Bildungs- und Verteidigungszwecken. Testen Sie nicht gegen Systeme, die Ihnen nicht gehören oder für die Sie keine ausdrückliche Genehmigung zum Testen haben.
.keras-Archivs# generate_shape_bomb.py
import h5py
import zipfile
import json
import os