LangChain CVE-2025-68664: com es filtren les dades personals a traves del vostre pipeline RAG
Actualitzat per al 2026.
A finals del 2025 es va trobar una falla critica a LangChain. El CVE es CVE-2025-68664. La puntuacio CVSS es 9.3 (Critic).
Afecta el codi de serialitzacio de LangChain.
Que fa CVE-2025-68664
LangChain te dues funcions de serialitzacio: dumps() i dumpd(). Converteixen objectes Python a text.
La falla esta en la gestio de les clausures.
Quan LangChain serialitza un callable, captura el context de la clausura.
Un atacant que controla la resposta del LLM pot activar dumps(). La funcio llegeix llavors les variables d'entorn del proces Python.
El resultat es l'exposicio de dades. Claus d'API, cadenes de base de dades, secrets JWT i credencials d'AWS poden apareixer a la sortida del model.
Un atacant que injecta text en un document font RAG pot llegir els vostres secrets de produccio.
Versions afectades: LangChain per sota de 0.3.22 (Python). La versio 0.3.22 te la correccio.
Els dades de PyPI mostren un us ampli de versions antigues fins al marc del 2026.
Com es filtren les dades personals als pipelines RAG
CVE-2025-68664 es dramatic. Pero es nomes un cas d'un problema mes ampli.
Les dades es filtren a traves dels pipelines RAG de manera habitual. No cal cap atacant.
Aquí teniu una configuracio RAG empresarial estandard.
Primer, la ingestio. Indexeu els documents de l'empresa en un magatzem vectorial. Penseu en tiquets de suport, correus electronics de clients, contractes i registres de Recursos Humans.
Els magatzems vectorials habituals son Pinecone, Weaviate i pgvector.
A continuacio, la recuperacio. Un usuari fa una pregunta. El sistema extreu els cinc fragments mes rellevants del magatzem.
Despres, la generacio. Aquests fragments van a un LLM - GPT-4o, Claude o Gemini - com a context.
El segon pas es el problema. Els fragments recuperats contenen el que continguessin els documents font. Aixo inclou:
- Noms de clients, adreces de correu electronic i numeros de telefon
- Valors contractuals, numeros de compte i identificadors fiscals
- Dades salarials dels empleats i notes d'avaluacio del rendiment
- Noms de pacients en notes cliniques
- Numeros d'identificacio nacional en fitxers d'immigracio
Aquestes dades van al LLM tal qual. Poden apareixer a la sortida del model.
El proveidor del LLM les registra. Romanen a l'historial de conversa. Flueixen a la vostra pila d'observabilitat.
No cal cap atac. Aixo es com funciona RAG per disseny. El disseny crea un risc real de privacitat.
68 patrons de secrets en magatzems de documents empresarials
Les eines de seguretat fan un seguiment de 68 patrons de secrets coneguts. Apareixen mes sovint del que esperen els equips.
Aquí en teniu els mes habituals.
- ID de claus d'acces d'AWS (
AKIA...) - Claus d'API d'OpenAI (
sk-...) - Claus d'API d'Anthropic (
sk-ant-...) - URIs de base de dades (
postgresql://usuari:contrasenya@servidor/bd) - Tokens JWT (capcaleres codificades en base64)
- Tokens d'Acces Personal de GitHub
- Claus secretes de Stripe (
sk_live_...) - Claus d'API de SendGrid
- SIDs de compte de Twilio i tokens d'autenticacio
- Blocs PEM de clau privada
Un tiquet de suport podria contenir una clau d'API del client d'una sessio de depuracio.
Un contracte podria incloure credencials de base de dades d'un traspas tecnic.
Un fitxer de configuracio indexat per error pot exposar tot un magatzem de secrets.
Quan aquests fitxers entren en un magatzem vectorial sense sanejament, cada consulta pot passar els secrets al LLM.
Tambe poden arribar a l'usuari final.
Solucio: anonimitzar abans d'inserir als embeddings
L'enfocament correcte anonimitza els documents abans de fragmentar-los i crear-ne els embeddings.
Aquest pas es obligatori per a qualsevol sistema que gestioni dades de clients.
Aquí teniu un exemple en Python que utilitza l'API d'anonym.legal:
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]:
"""Anonimitza les dades personals abans de crear l'embedding."""
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):
"""Construeix un index RAG nomes amb documents nets."""
anonymized_docs = []
for doc in documents:
clean_text, entities = anonymize_before_embedding(doc)
anonymized_docs.append(clean_text)
print(f"S'han eliminat {len(entities)} entitats de dades personals del document")
vectorstore.add_texts(anonymized_docs)
L'API d'anonym.legal cobreix mes de 285 tipus d'entitat. Noms, correus electronics, numeros de telefon, identificadors nacionals, claus d'API i URIs de base de dades, tot queda capturat.
Res de sensible arriba al magatzem vectorial. Per tant, res de sensible pot filtrar-se als usuaris.
Vegeu la guia per a desenvolupadors per als patrons de configuracio de LangChain i LlamaIndex.
Corregiu CVE-2025-68664 ara mateix
Si executeu LangChain per sota de 0.3.22, actualitzeu ara:
pip install "langchain>=0.3.22" "langchain-core>=0.3.22"
Despres de pedaçar, comproveu les vostres configuracions de cadena per detectar riscos d'injeccio. Aquí teniu tres passos a seguir.
Primer, valideu els fragments recuperats. Feu-ho abans que arribin al LLM.
Elimineu el contingut que coincideixi amb patrons d'injeccio com ara ignore previous instructions, system: o <INST>.
Segon, anonimitzeu abans de crear els embeddings. Aixo redueix la superficie d'atac.
Si es produeix una injeccio, les dades sensibles no hi son per extreure-les.
Tercer, restringiu els permisos de la cadena. Les cadenes de LangChain no haurien de llegir variables d'entorn mes enlla del que necessiten.
Feu servir un compte de servei amb abast minim.
La matematica es senzilla
La puntuacio CVSS es 9.3. La correccio es una crida a l'API per document.
La combinacio de CVE-2025-68664 i el risc general de dades RAG es una responsabilitat real.
La solucio es clara: anonimitzeu en la ingestio, no en el moment de la consulta.
Consulteu la visio general de seguretat i compliment per als requisits de RAG empresarial.
Fonts
- NVD CVE-2025-68664, CVSS 9.3, vulnerabilitat de serialitzacio de LangChain
- Avís de seguretat de LangChain, langchain-ai/langchain GitHub, 2025
- OWASP LLM Top 10: LLM01 Injeccio de prompts, LLM06 Divulgacio d'informacio sensible
- Documentacio de tipus d'entitat d'anonym.legal - mes de 285 tipus d'entitat compatibles