LangChain CVE-2025-68664: Hoe PII Deur Jou RAG-pyplyn Lek
Bygewerk vir 2026.
'n Kritiese fout is laat in 2025 in LangChain gevind. Die CVE is CVE-2025-68664. Die CVSS-telling is 9.3 (Krities).
Dit teiken LangChain se serialisasiekode.
Wat CVE-2025-68664 Doen
LangChain het twee serialisasiefunksies: dumps() en dumpd(). Hulle skakel Python-voorwerpe na teks om.
Die fout is in sluitingshantering.
Wanneer LangChain 'n oproepbare serialiseer, vang dit die sluitingskonteks.
'n Aanvaller wat die LLM-reaksie beheer, kan dumps() aktiveer. Die funksie lees dan omgewingsveranderlikes van die Python-proses.
Die resultaat is datablootstelling. API-sleutels, databasisstrengs, JWT-geheime en AWS-geloofsbriewe kan in modeluitvoer verskyn.
'n Aanvaller wat teks in 'n RAG-brondokument inspuit, kan jou produksiegeheime lees.
Geaffekteerde weergawes: LangChain onder 0.3.22 (Python). Weergawe 0.3.22 het die oplossing.
PyPI-data toon wydverspreide gebruik van ouer weergawes deur Maart 2026.
Hoe PII in RAG-pylyne Lek
CVE-2025-68664 is dramaties. Maar dit is slegs een geval van 'n breër probleem.
Data lek gereeld deur RAG-pylyne. Geen aanvaller is nodig nie.
Hier is 'n standaard ondernemings-RAG-opstelling.
Eerstens, inname. Jy indekseer maatskappydokumente in 'n vektorbewaarplaas. Dink aan ondersteuningskaartjies, kliente-e-posse, kontrakte en MR-rekords.
Gewone vektorbewaarplekke is Pinecone, Weaviate en pgvector.
Volgende, herwinning. 'n Gebruiker stel 'n vraag. Die stelsel trek die vyf mees relevante stukke uit die bewaarplaas.
Dan, generasie. Daardie stukke gaan na 'n LLM -- GPT-4o, Claude of Gemini -- as konteks.
Stap twee is die probleem. Herwonne stukke bevat wat die brondokumente bevat het. Dit sluit in:
- Kliente-name, e-posadresse en telefoonnommers
- Kontrakwaardes, rekeningnommers en belastingidentifiseerders
- Werknemer-salaridata en prestasiebeoordeling-notas
- Pasientname in kliniese notas
- Nasionale ID-nommers in immigrasieleers
Daardie data gaan as-is na die LLM. Dit kan in modeluitvoer verskyn.
Dit word aangeteken deur die LLM-verskaffer. Dit sit in jou gespreksgeskiedenis. Dit vloei in jou waarneembaarheids-stapel.
Geen aanval is nodig nie. Dit is hoe RAG by ontwerp werk. Die ontwerp skep werklike privaatheidsrisiko.
68 Geheimpatrone in Ondernemingsdokumentbewaarplekke
Sekuriteitsinstrumente volg 68 bekende geheimpatrone. Hulle verskyn meer dikwels as wat spanne verwag.
Hier is die mees algemene.
- AWS Access Key ID's (
AKIA...) - OpenAI API-sleutels (
sk-...) - Anthropic API-sleutels (
sk-ant-...) - Databasis-URI's (
postgresql://user:password@host/db) - JWT-tekens (base64-gekodeerde opskrifte)
- GitHub Personal Access Tokens
- Stripe-geheimsleutels (
sk_live_...) - SendGrid API-sleutels
- Twilio-rekeningsid's en verifikasietekens
- Private sleutel PEM-blokke
'n Ondersteuningskaartjie mag 'n klient-API-sleutel bevat uit 'n ontfoutsessie.
'n Kontrak mag databasisgeloofsbriewe insluit uit 'n tegniese oorhandiging.
'n Konfigurasieleer wat per ongeluk geindekseer is, kan 'n hele geheimebewaarplaas blootstel.
Wanneer hierdie leers 'n vektorbewaarplaas sonder sanering binnegaan, kan elke navraag die geheime na die LLM stuur.
Hulle mag ook die eindgebruiker bereik.
Los Dit Op: Anonimiseer Voor Inbedding
Die regte benadering anonimiseer dokumente voor stukke en inbedding.
Hierdie stap is vereis vir enige stelsel wat klientedata hanteer.
Hier is 'n Python-voorbeeld met die 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 inbedding."""
response = requests.post(
f"{ANONYM_BASE_URL}/presidio/anonymize",
json={
"text": text,
"language": "en",
"anonymizers": {
"DEFAULT": {"type": "replace", "new_value": "[GEREDAKTEER]"},
"PERSON": {"type": "mask", "masking_char": "*", "chars_to_mask": 4, "from_end": False},
"EMAIL_ADDRESS": {"type": "replace", "new_value": "[E-POS]"},
"PHONE_NUMBER": {"type": "replace", "new_value": "[FOON]"},
"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):
"""Bou 'n RAG-indeks met skoon dokumente slegs."""
anonymized_docs = []
for doc in documents:
clean_text, entities = anonymize_before_embedding(doc)
anonymized_docs.append(clean_text)
print(f"Verwyder {len(entities)} PII-entiteite van dokument")
vectorstore.add_texts(anonymized_docs)
Die anonym.legal API dek 285+ entiteitstipes. Name, e-posse, telefoonnommers, nasionale ID's, API-sleutels en databasis-URI's word alles gevang.
Niks sensitiefs bereik die vektorbewaarplaas nie. So niks sensitiefs kan na gebruikers lek nie.
Sien die ontwikkelaarsgids vir LangChain- en LlamaIndex-opstelingpatrone.
Los CVE-2025-68664 Nou Reg
As jy LangChain onder 0.3.22 laat loop, dateer nou op:
pip install "langchain>=0.3.22" "langchain-core>=0.3.22"
Na die pleistering, kontroleer jou kettingkonfigurasies vir inspuiting-risiko. Hier is drie stappe om te neem.
Eerstens, bevestig herwonne stukke. Doen dit voordat hulle die LLM bereik.
Stroop inhoud wat ooreenstem met inspuitingspatrone soos ignoreer vorige instruksies, stelsel: of <INST>.
Tweedens, anonimiseer voor inbedding. Dit verklein die aanvalsoppervlak.
As inspuiting wel plaasvind, is die sensitiewe data nie daar om te onttrek nie.
Derdens, beperk kettingtoestemmings. LangChain-kettings behoort nie omgewingsveranderlikes te lees buite wat hulle benodig nie.
Gebruik 'n diensrekening met minimale omvang.
Die Wiskunde Is Eenvoudig
Die CVSS-telling is 9.3. Die oplossing is een API-oproep per dokument.
Die kombinasie van CVE-2025-68664 en algemene RAG-datarisiko is 'n werklike aanspreeklikheid.
Die oplossing is duidelik: anonimiseer by inname, nie by navraag-tyd nie.
Kontroleer die sekuriteit- en nakomingsoorsig vir ondernemings-RAG-vereistes.
Bronne
- NVD CVE-2025-68664, CVSS 9.3, LangChain serialisasie-kwesbaarheid
- LangChain sekuriteitsadvies, langchain-ai/langchain GitHub, 2025
- OWASP LLM Top 10: LLM01 Aansporingsinjeksie, LLM06 Sensitiewe Inligtingopenbaring
- anonym.legal entiteitstipe-dokumentasie -- 285+ ondersteunde entiteitstipes