LangChain CVE-2025-68664: Wie personenbezogene Daten aus Ihrer RAG-Pipeline lecken
Aktualisiert für 2026.
In LangChain wurde Ende 2025 eine kritische Schwachstelle entdeckt. Die CVE-Nummer lautet CVE-2025-68664. Der CVSS-Score beträgt 9.3 (Kritisch).
Die Schwachstelle betrifft den Serialisierungscode von LangChain.
Was CVE-2025-68664 bewirkt
LangChain verfügt über zwei Serialisierungsfunktionen: dumps() und dumpd(). Sie wandeln Python-Objekte in Text um.
Der Fehler liegt in der Verarbeitung von Closures.
Wenn LangChain ein Callable serialisiert, erfasst es den Closure-Kontext.
Ein Angreifer, der die LLM-Antwort kontrolliert, kann dumps() auslösen. Die Funktion liest dann Umgebungsvariablen aus dem Python-Prozess.
Das Ergebnis ist ein Datenleck. API-Schlüssel, Datenbankstrings, JWT-Secrets und AWS-Zugangsdaten können in der Modellausgabe erscheinen.
Ein Angreifer, der Text in ein RAG-Quelldokument einschleust, kann Ihre Produktionsgeheimnisse lesen.
Betroffene Versionen: LangChain unter 0.3.22 (Python). Version 0.3.22 enthält den Fix.
PyPI-Daten zeigen eine weit verbreitete Nutzung älterer Versionen bis März 2026.
Wie personenbezogene Daten in RAG-Pipelines lecken
CVE-2025-68664 ist ein extremes Beispiel für ein weitreichenderes Problem.
Daten lecken routinemäßig durch RAG-Pipelines. Kein Angreifer ist dafür notwendig.
Hier ist ein typisches Enterprise-RAG-Setup.
Erstens: Ingestion. Sie indizieren Unternehmensdokumente in einem Vektorspeicher. Denken Sie an Support-Tickets, Kunden-E-Mails, Verträge und HR-Unterlagen.
Gängige Vektorspeicher sind Pinecone, Weaviate und pgvector.
Zweitens: Abruf. Ein Nutzer stellt eine Frage. Das System ruft die fünf relevantesten Chunks ab.
Drittens: Generierung. Diese Chunks werden einem LLM — GPT-4o, Claude oder Gemini — als Kontext übergeben.
Schritt zwei ist das Problem. Abgerufene Chunks enthalten alles, was die Quelldokumente enthielten. Dazu gehören:
- Kundennamen, E-Mail-Adressen und Telefonnummern
- Vertragswerte, Kontonummern und Steueridentifikatoren
- Gehaltsangaben und Beurteilungsnotizen von Mitarbeitern
- Patientennamen in klinischen Berichten
- Nationale Ausweisnummern in Einwanderungsdokumenten
Diese Daten werden unverändert an das LLM weitergegeben. Sie können in der Modellausgabe erscheinen.
Sie werden vom LLM-Anbieter protokolliert. Sie verbleiben in Ihrem Gesprächsverlauf. Sie fließen in Ihren Observability-Stack ein.
Kein Angriff ist nötig. So funktioniert RAG per Design. Dieses Design schafft ein echtes Datenschutzrisiko.
68 Geheimmuster in Unternehmensdokumenten
Sicherheitswerkzeuge verfolgen 68 bekannte Geheimmuster. Sie tauchen häufiger auf, als Teams erwarten.
Hier die häufigsten:
- AWS Access Key IDs (
AKIA...) - OpenAI API-Schlüssel (
sk-...) - Anthropic API-Schlüssel (
sk-ant-...) - Datenbank-URIs (
postgresql://user:password@host/db) - JWT-Token (base64-kodierte Header)
- GitHub Personal Access Tokens
- Stripe-Geheimschlüssel (
sk_live_...) - SendGrid API-Schlüssel
- Twilio Account-SIDs und Auth-Token
- PEM-Blöcke für private Schlüssel
Ein Support-Ticket kann einen API-Schlüssel eines Kunden aus einer Debug-Sitzung enthalten.
Ein Vertrag kann Datenbankzugangsdaten aus einer technischen Übergabe beinhalten.
Eine versehentlich indizierte Konfigurationsdatei kann einen gesamten Geheimspeicher offenlegen.
Wenn diese Dateien ohne Bereinigung in einen Vektorspeicher gelangen, kann jede Anfrage die Secrets an das LLM weitergeben.
Sie können auch den Endnutzer erreichen.
Die Lösung: Anonymisieren vor dem Einbetten
Der richtige Ansatz anonymisiert Dokumente vor dem Chunking und Einbetten.
Dieser Schritt ist für jedes System erforderlich, das Kundendaten verarbeitet.
Hier ist ein Python-Beispiel mit der anonym.legal API:
import requests
import os
ANONYM_API_KEY = os.environ["ANONYM_API_KEY"]
ANONYM_BASE_URL = "https://anonym.legal/api"
def anonymize_before_embedding(text: str) -> tuple[str, dict]:
"""PII vor dem Einbetten anonymisieren."""
response = requests.post(
f"{ANONYM_BASE_URL}/presidio/anonymize",
json={
"text": text,
"language": "en",
"anonymizers": {
"DEFAULT": {"type": "replace", "new_value": "[REDACTED]"},
"PERSON": {"type": "mask", "masking_char": "*", "chars_to_mask": 4, "from_end": False},
"EMAIL_ADDRESS": {"type": "replace", "new_value": "[EMAIL]"},
"PHONE_NUMBER": {"type": "replace", "new_value": "[PHONE]"},
"CRYPTO": {"type": "replace", "new_value": "[SECRET]"},
"URL": {"type": "keep"},
}
},
headers={"Authorization": f"Bearer {ANONYM_API_KEY}"}
)
result = response.json()
return result["text"], result.get("items", [])
def build_rag_index(documents: list[str], vectorstore):
"""RAG-Index nur mit bereinigten Dokumenten aufbauen."""
anonymized_docs = []
for doc in documents:
clean_text, entities = anonymize_before_embedding(doc)
anonymized_docs.append(clean_text)
print(f"Removed {len(entities)} PII entities from document")
vectorstore.add_texts(anonymized_docs)
Die anonym.legal API deckt 285+ Entitätstypen ab. Namen, E-Mails, Telefonnummern, nationale IDs, API-Schlüssel und Datenbank-URIs werden alle erkannt.
Keine sensiblen Daten erreichen den Vektorspeicher. Damit können keine sensiblen Daten zu Nutzern durchsickern.
Weitere Muster für LangChain und LlamaIndex finden Sie im Entwicklerhandbuch.
CVE-2025-68664 jetzt beheben
Wenn Sie LangChain unter 0.3.22 betreiben, aktualisieren Sie jetzt:
pip install "langchain>=0.3.22" "langchain-core>=0.3.22"
Prüfen Sie nach dem Patchen Ihre Chain-Konfigurationen auf Injection-Risiken. Hier sind drei Schritte.
Erstens: Abgerufene Chunks validieren. Tun Sie dies, bevor sie das LLM erreichen.
Entfernen Sie Inhalte, die Injection-Mustern entsprechen, wie ignore previous instructions, system: oder <INST>.
Zweitens: Vor dem Einbetten anonymisieren. Das verkleinert die Angriffsfläche.
Falls Injection doch auftritt, sind die sensiblen Daten nicht mehr vorhanden.
Drittens: Chain-Berechtigungen einschränken. LangChain-Chains sollten nur die nötigen Umgebungsvariablen lesen.
Verwenden Sie ein Dienstkonto mit minimalem Umfang.
Die Mathematik ist einfach
Der CVSS-Score beträgt 9.3. Der Fix ist ein API-Aufruf pro Dokument.
Die Kombination aus CVE-2025-68664 und allgemeinem RAG-Datenrisiko ist eine echte Haftung.
Die Lösung ist klar: Anonymisieren bei der Ingestion, nicht zur Abfragezeit.
Lesen Sie die Sicherheits- und Compliance-Übersicht für Enterprise-RAG-Anforderungen.
Quellen
- NVD CVE-2025-68664, CVSS 9.3, LangChain-Serialisierungsschwachstelle
- LangChain-Sicherheitshinweis, langchain-ai/langchain GitHub, 2025
- OWASP LLM Top 10: LLM01 Prompt Injection, LLM06 Offenlegung sensibler Informationen
- anonym.legal Entitätstyp-Dokumentation — 285+ unterstützte Entitätstypen