Tornar al BlogTècnic

LangChain CVE-2025-68664: com es filtren les dades personals a traves del vostre pipeline RAG

CVSS 9.3. Les funcions de serialitzacio de LangChain exposen variables d'entorn i secrets a LLMs controlats per atacants. Com detectar i corregir les filtracions de dades personals.

March 16, 20268 min llegit
LangChainRAG pipelineCVEPII leakagedeveloper securityAPI keysLLM security

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

Preparat per protegir les vostres dades?

Comenceu a anonimitzar PII amb més de 285 tipus d'entitats en 48 idiomes.

About this page

We update this page when our platform or the law changes.

Read our founder note for how we work.

Each change shows up in the timestamp at the top.

Related reading

We follow these rules

  • GDPR (EU 2016/679).
  • ISO/IEC 27001:2022.
  • NIS2 (EU 2022/2555).
  • HIPAA safe harbor under 45 CFR § 164.514(b)(2).

Our promise

We do not sell your data.

We do not train models on your text.

We store your files in Germany.

You can delete your account at any time.

You own your work.

Where we run

Our servers live in Falkenstein, Germany.

We use Hetzner. They hold ISO 27001 certification.

All data stays in the EU.

Backups run every day.

Need help?

Email support@anonym.legal.

We reply within one business day.

How we test

We run a full check suite on every release.

Each surface gets its own sweep script and report.

Human reviewers spot-check the output each week.

We track recall and precision on a labelled set.

Bad runs block the deploy.

What we never do

  • We never sell your information to third parties.
  • We never train models on what you upload.
  • We never keep your work after you delete it.
  • We never share keys with any outside firm.
  • We never run ads inside the product.

Plans in plain words

We sell credits, not seats.

One credit covers one short job.

Long jobs use a few credits each.

You can top up at any time.

Unused credits roll over each month.

Read the plans page for current rates.

Who built this

A small team of engineers and lawyers built this.

We ship from Europe and work in the open.

Our founder note spells out why we started.

Where to start

How the parts fit

A browser add-on cleans text inside Chrome.

A Word plug-in handles drafts in Office.

A small desktop tool works on whole folders.

An agent protocol link feeds large models safely.

All four share one core engine and one rule set.

Words from our team

We started this work after a lunch about cookies.

One friend kept getting odd ads on her phone.

We asked why a court file leaked through a draft.

We sketched the first build on a napkin that week.

By month three we had a tiny demo for a friend.

She used it on her first case the next day.

Common questions we hear

Can the tool read scanned PDFs? Yes, with OCR.

Does it work on long files? Yes, in small chunks.

Can I roll my own rule set? Yes, save it as a preset.

Does it run offline? The desktop build runs offline.

Do you keep my files? No, the cloud build wipes after each run.

Will it learn from my work? No, we never train on inputs.

A short tour of the workflow

Upload a file or paste a snippet of prose.

Pick the entities you want gone from the draft.

Choose a method: replace, mask, hash, encrypt, or redact.

Press run and watch the side panel show each hit.

Skim the result and tweak any rule that misfired.

Save the cleaned file or send it to a teammate.