LangChain CVE-2025-68664: Hoe PII Lekt Via Uw RAG-pipeline
Bijgewerkt voor 2026.
Eind 2025 werd een kritieke kwetsbaarheid gevonden in LangChain. De CVE is CVE-2025-68664. De CVSS-score is 9,3 (Kritiek).
De kwetsbaarheid richt zich op de serialisatiecode van LangChain.
Wat CVE-2025-68664 Doet
LangChain heeft twee serialisatiefuncties: dumps() en dumpd(). Ze zetten Python-objecten om naar tekst.
De kwetsbaarheid zit in de afhandeling van closures.
Wanneer LangChain een callable serialiseert, legt het de closure-context vast.
Een aanvaller die de LLM-reactie beheerst, kan dumps() activeren. De functie leest dan omgevingsvariabelen uit het Python-proces.
Het resultaat is gegevensblootstelling. API-sleutels, databaseverbindingsstrings, JWT-geheimen en AWS-credentials kunnen in modeluitvoer verschijnen.
Een aanvaller die tekst injecteert in een RAG-brondocument kan uw productiegeheimen uitlezen.
Getroffen versies: LangChain onder 0.3.22 (Python). Versie 0.3.22 bevat de fix.
PyPI-data toont wijdverbreid gebruik van oudere versies tot en met maart 2026.
Hoe PII Lekt in RAG-pipelines
CVE-2025-68664 is dramatisch. Maar het is slechts één geval van een breder probleem.
Gegevens lekken routinematig via RAG-pipelines. Er is geen aanvaller voor nodig.
Hier is een standaard enterprise-RAG-configuratie.
Ten eerste, ingestie. U indexeert bedrijfsdocumenten in een vectoropslag. Denk aan supporttickets, klantmails, contracten en HR-gegevens.
Veelgebruikte vectoropslagen zijn Pinecone, Weaviate en pgvector.
Vervolgens, ophaling. Een gebruiker stelt een vraag. Het systeem haalt de vijf meest relevante fragmenten op uit de opslag.
Dan, generatie. Die fragmenten gaan als context naar een LLM — GPT-4o, Claude of Gemini.
Stap twee is het probleem. Opgehaalde fragmenten bevatten wat de brondocumenten bevatten. Dat omvat:
- Klantnamen, e-mailadressen en telefoonnummers
- Contractwaarden, accountnummers en belastingidentificatoren
- Salaris- en beoordelingsgegevens van werknemers
- Patiëntnamen in klinische notities
- Nationale ID-nummers in immigratiebestanden
Die gegevens gaan onbewerkt naar het LLM. Ze kunnen in modeluitvoer verschijnen.
Ze worden gelogd door de LLM-aanbieder. Ze staan in uw gespreksgeschiedenis. Ze stromen door naar uw observatiestack.
Er is geen aanval voor nodig. Zo werkt RAG by design. En dat ontwerp creëert een reëel privacyrisico.
68 Geheimpatronen in Enterprise-documentopslagen
Beveiligingstools volgen 68 bekende geheimpatronen. Ze komen vaker voor dan teams verwachten.
De meest voorkomende:
- AWS Access Key ID's (
AKIA...) - OpenAI API-sleutels (
sk-...) - Anthropic API-sleutels (
sk-ant-...) - Database-URI's (
postgresql://gebruiker:wachtwoord@host/db) - JWT-tokens (base64-gecodeerde headers)
- GitHub Personal Access Tokens
- Stripe-geheime sleutels (
sk_live_...) - SendGrid API-sleutels
- Twilio account-SID's en authenticatietokens
- Private key PEM-blokken
Een supportticket kan een API-sleutel van een klant bevatten uit een debugsessie.
Een contract kan databasecredentials bevatten uit een technische overdracht.
Een configuratiebestand dat per ongeluk is geïndexeerd, kan een complete geheimopslag blootleggen.
Wanneer deze bestanden zonder sanitisatie in een vectoropslag terechtkomen, kan elke query de geheimen doorgeven aan het LLM.
Ze kunnen ook de eindgebruiker bereiken.
De Fix: Anonimiseer Voor het Insluiten
De juiste aanpak anonimiseert documenten vóór het opdelen in chunks en insluiten.
Deze stap is verplicht voor elk systeem dat klantgegevens verwerkt.
Hier is een Python-voorbeeld met de 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]:
"""Anonimiseer PII voor het insluiten."""
response = requests.post(
f"{ANONYM_BASE_URL}/presidio/anonymize",
json={
"text": text,
"language": "en",
"anonymizers": {
"DEFAULT": {"type": "replace", "new_value": "[GEREDIGEERD]"},
"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": "[TELEFOON]"},
"CRYPTO": {"type": "replace", "new_value": "[GEHEIM]"},
"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):
"""Bouw een RAG-index met uitsluitend schone documenten."""
anonymized_docs = []
for doc in documents:
clean_text, entities = anonymize_before_embedding(doc)
anonymized_docs.append(clean_text)
print(f"{len(entities)} PII-entiteiten verwijderd uit document")
vectorstore.add_texts(anonymized_docs)
De anonym.legal API dekt 285+ entiteitstypen. Namen, e-mailadressen, telefoonnummers, nationale ID's, API-sleutels en database-URI's worden allemaal opgepikt.
Er bereikt niets gevoeligs de vectoropslag. Dus kan er ook niets gevoeligs lekken naar gebruikers.
Zie de ontwikkelaarsgids voor LangChain- en LlamaIndex-setuppatronen.
Herstel CVE-2025-68664 Nu Meteen
Als u LangChain onder 0.3.22 gebruikt, update nu:
pip install "langchain>=0.3.22" "langchain-core>=0.3.22"
Controleer na het patchen uw chain-configuraties op injectierisico. Hier zijn drie stappen.
Ten eerste, valideer opgehaalde chunks voordat ze het LLM bereiken.
Verwijder content die overeenkomt met injectiepatronen zoals ignore previous instructions, system: of <INST>.
Ten tweede, anonimiseer voor het insluiten. Dit verkleint het aanvalsoppervlak.
Als injectie toch plaatsvindt, zijn de gevoelige gegevens er niet om te extraheren.
Ten derde, beperk chain-rechten. LangChain-chains mogen geen omgevingsvariabelen lezen buiten wat ze nodig hebben.
Gebruik een serviceaccount met minimale reikwijdte.
De Wiskunde Is Eenvoudig
De CVSS-score is 9,3. De fix is één API-aanroep per document.
De combinatie van CVE-2025-68664 en het algemene RAG-gegevensrisico is een reële aansprakelijkheid.
De oplossing is duidelijk: anonimiseer bij ingestie, niet bij querytijd.
Zie het beveiligings- en complianceoverzicht voor enterprise-RAG-vereisten.
Bronnen
- NVD CVE-2025-68664, CVSS 9,3, LangChain-serialisatiekwetsbaarheid
- LangChain-beveiligingsadvies, langchain-ai/langchain GitHub, 2025
- OWASP LLM Top 10: LLM01 Promptinjectie, LLM06 Openbaarmaking van gevoelige informatie
- anonym.legal entiteitstype-documentatie — 285+ ondersteunde entiteitstypen