LangChain CVE-2025-68664: Slik lekker PII gjennom RAG-rorfilen din
Oppdatert for 2026.
Et kritisk sikkerhetshull ble funnet i LangChain sent i 2025. CVE-en er CVE-2025-68664. CVSS-scoren er 9,3 (Kritisk).
Det retter seg mot LangChains serialiseringskode.
Hva CVE-2025-68664 gjor
LangChain har to serialiseringsfunksjoner: dumps() og dumpd(). De konverterer Python-objekter til tekst.
Feilen er i lukningshåndtering.
Nar LangChain serialiserer et kallbart objekt, fanger det lukningskonteksten.
En angriper som kontrollerer LLM-svaret kan utlose dumps(). Funksjonen leser deretter miljovariabler fra Python-prosessen.
Resultatet er dataavsloering. API-nokler, databasestrenger, JWT-hemmeligheter og AWS-legitimasjon kan vises i modellresultater.
En angriper som injiserer tekst i et RAG-kildedokument kan lese produksjonshemmelighetene dine.
Berort versjon: LangChain under 0.3.22 (Python). Versjon 0.3.22 har rettelsen.
PyPI-data viser bred bruk av eldre versjoner frem til mars 2026.
Slik lekker PII i RAG-rorledninger
CVE-2025-68664 er dramatisk. Men det er bare ett tilfelle av et bredere problem.
Data lekker gjennom RAG-rorledninger rutinemessig. Ingen angriper er nodvendig.
Her er et standard RAG-oppsett i en virksomhet.
Forst, innsamling. Du indekserer firmadokumenter i en vektorlagring. Tenk supportbilletter, kunde-e-poster, kontrakter og HR-oppforinger.
Vanlige vektorlagringer er Pinecone, Weaviate og pgvector.
Neste, gjenfinning. En bruker stiller et sporsmal. Systemet henter de fem mest relevante delene fra lagringen.
Deretter, generering. Disse delene ga til en LLM — GPT-4o, Claude eller Gemini — som kontekst.
Trinn to er problemet. Hentede deler inneholder hva kildeadokumentene inneholdt. Det inkluderer:
- Kundenavn, e-postadresser og telefonnumre
- Kontraktverdier, kontonumre og skatteidentifikatorer
- Medarbeiders lonndata og ytelsesanmeldelsesnotater
- Pasientnavn i kliniske notater
- Nasjonale ID-numre i innvandringsfiler
Disse dataene ga til LLM-en som de er. De kan vises i modellresultater.
De logges av LLM-leverandoren. De sitter i samtaleloggen din. De flommer inn i observerbarhets-stakken din.
Ingen angrep er nodvendig. Slik fungerer RAG etter utforming. Utformingen skaper reell personvernrisiko.
68 hemmelighetsmonstre i virksomhetsdokumentlagringer
Sikkerhetsverktoy sporer 68 kjente hemmelighetsmonstre. De vises oftere enn team forventer.
Her er de vanligste.
- AWS Access Key ID-er (
AKIA...) - OpenAI API-nokler (
sk-...) - Anthropic API-nokler (
sk-ant-...) - Database-URI-er (
postgresql://user:password@host/db) - JWT-tokens (base64-kodede overskrifter)
- GitHub Personal Access Tokens
- Stripe hemmelige nokler (
sk_live_...) - SendGrid API-nokler
- Twilio konto-SID-er og auth-tokens
- Private nokkel PEM-blokker
En supportbillett kan inneholde en kunde-API-nokkel fra en feilosokingsokott.
En kontrakt kan inkludere databasepassordfrase fra en teknisk overleveranse.
En konfigurasjonsfil indeksert ved en feiltagelse kan avsloere en hel hemmelighetslager.
Nar disse filene kommer inn i en vektorlagring uten rensing, kan hver sporring sende hemmelighetene til LLM-en.
De kan ogsa na sluttbrukeren.
Fiks det: Anonymiser for innbygging
Den riktige tilnaermingen anonymiserer dokumenter for inndeling og innbygging.
Dette trinnet er pakrevd for ethvert system som handterer kundedata.
Her er et Python-eksempel med 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]:
"""Anonymiser PII for innbygging."""
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):
"""Bygg en RAG-indeks med kun rene dokumenter."""
anonymized_docs = []
for doc in documents:
clean_text, entities = anonymize_before_embedding(doc)
anonymized_docs.append(clean_text)
print(f"Fjernet {len(entities)} PII-enheter fra dokument")
vectorstore.add_texts(anonymized_docs)
anonym.legal API dekker 285+ enhetstyper. Navn, e-postadresser, telefonnumre, nasjonale ID-er, API-nokler og database-URI-er oppdages alle.
Ingenting sensitivt nar vektorlagringen. Slik kan ingenting sensitivt lekke til brukere.
Se utviklerveiledningen for LangChain- og LlamaIndex-oppsettmonstre.
Fiks CVE-2025-68664 na
Hvis du kjorer LangChain under 0.3.22, oppdater na:
pip install "langchain>=0.3.22" "langchain-core>=0.3.22"
Etter patching, sjekk kjedekonfigene dine for injeksjonsrisiko. Her er tre trinn a ta.
Forst, valider hentede deler. Gjor dette for de nar LLM-en.
Fjern innhold som matcher injeksjonsmonstre som ignore previous instructions, system: eller <INST>.
For det andre, anonymiser for innbygging. Dette krymper angrepsflaten.
Hvis injeksjon skjer, er ikke de sensitive dataene der for a hentes ut.
For det tredje, begrens kjedetillatelser. LangChain-kjeder bor ikke lese miljovariabler utover det de trenger.
Bruk en tjenestekonto med minimal omfang.
Matematikken er enkel
CVSS-scoren er 9,3. Rettelsen er ett API-kall per dokument.
Kombinasjonen av CVE-2025-68664 og generell RAG-datarisiko er et reelt ansvar.
Losningen er klar: anonymiser ved innsamling, ikke ved sporretidspunkt.
Sjekk oversikt over sikkerhet og samsvar for bedrifts-RAG-krav.
Kilder
- NVD CVE-2025-68664, CVSS 9,3, LangChain serialiseringssarbarhet
- LangChain sikkerhetsadvarsel, langchain-ai/langchain GitHub, 2025
- OWASP LLM Topp 10: LLM01 Prompt-injeksjon, LLM06 Avsloering av sensitiv informasjon
- anonym.legal enhetstype-dokumentasjon — 285+ stottede enhetstyper