anonym.legal
Înapoi la BlogTehnic

CVE-2025-68664 LangChain: Cum Se Scurge PII Prin Pipeline-ul Dvs. RAG

CVSS 9,3. Funcțiile de serializare LangChain expun variabilele de mediu și secretele LLM-urilor controlate de atacatori. Cum se detectează și se remediază scurgerile PII.

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

CVE-2025-68664 LangChain: Cum Se Scurge PII Prin Pipeline-ul Dvs. RAG

Actualizat pentru 2026.

O eroare critică a fost găsită în LangChain la sfârșitul anului 2025. CVE-ul este CVE-2025-68664. Scorul CVSS este 9,3 (Critic).

Vizează codul de serializare LangChain.

Ce Face CVE-2025-68664

LangChain are două funcții de serializare: dumps() și dumpd(). Acestea convertesc obiecte Python în text.

Defectul este în gestionarea closure-urilor.

Când LangChain serializează un callable, captează contextul closure-ului.

Un atacator care controlează răspunsul LLM poate declanșa dumps(). Funcția citește apoi variabilele de mediu din procesul Python.

Rezultatul este expunerea de date. Cheile API, șirurile de baze de date, secretele JWT și credențialele AWS pot apărea în ieșirea modelului.

Un atacator care injectează text într-un document sursă RAG poate citi secretele dvs. de producție.

Versiuni afectate: LangChain sub 0.3.22 (Python). Versiunea 0.3.22 are remedierea.

Datele PyPI arată utilizare largă a versiunilor mai vechi până în martie 2026.

Cum Se Scurge PII în Pipeline-urile RAG

CVE-2025-68664 este dramatic. Dar este doar un caz al unei probleme mai largi.

Datele se scurg prin pipeline-urile RAG în mod obișnuit. Nu este nevoie de niciun atacator.

Iată o configurație standard RAG enterprise.

Mai întâi, ingestia. Indexați documentele companiei într-un vector store. Gândiți-vă la tichete de suport, emailuri ale clienților, contracte și înregistrări HR.

Vector store-urile comune sunt Pinecone, Weaviate și pgvector.

Urmează, recuperarea. Un utilizator pune o întrebare. Sistemul extrage cele mai relevante cinci bucăți din store.

Apoi, generarea. Acele bucăți merg la un LLM — GPT-4o, Claude sau Gemini — ca context.

Pasul doi este problema. Bucățile recuperate conțin tot ce au conținut documentele sursă. Aceasta include:

  • Numele clienților, adresele de email și numerele de telefon
  • Valorile contractelor, numerele de cont și identificatorii fiscali
  • Datele salariale ale angajaților și notele de evaluare a performanței
  • Numele pacienților în notele clinice
  • Numerele de identificare națională în fișierele de imigrare

Acele date merg la LLM ca atare. Pot apărea în ieșirea modelului.

Sunt înregistrate de furnizorul LLM. Stau în istoricul conversației dvs. Curg în stiva dvs. de observabilitate.

Nu este nevoie de niciun atac. Așa funcționează RAG prin proiectare. Proiectarea creează risc real de confidențialitate.

68 de Modele de Secrete în Depozitele de Documente Enterprise

Instrumentele de securitate urmăresc 68 de modele de secrete cunoscute. Apar mai des decât se așteaptă echipele.

Iată cele mai comune.

  • ID-uri de cheie de acces AWS (AKIA...)
  • Chei API OpenAI (sk-...)
  • Chei API Anthropic (sk-ant-...)
  • URI-uri de baze de date (postgresql://user:password@host/db)
  • Token-uri JWT (antete codificate base64)
  • Token-uri de acces personal GitHub
  • Chei secrete Stripe (sk_live_...)
  • Chei API SendGrid
  • SID-uri de cont Twilio și token-uri de autentificare
  • Blocuri PEM de chei private

Un tichet de suport poate conține o cheie API a clientului dintr-o sesiune de depanare.

Un contract poate include credențiale de baze de date dintr-un transfer tehnic.

Un fișier de configurare indexat din greșeală poate expune un întreg depozit de secrete.

Când aceste fișiere intră într-un vector store fără sanitizare, fiecare interogare poate transmite secretele LLM-ului.

Pot ajunge și la utilizatorul final.

Remediați: Anonimizați Înainte de Embedding

Abordarea corectă anonimizează documentele înainte de fragmentare și embedding.

Acest pas este necesar pentru orice sistem care gestionează datele clienților.

Iată un exemplu Python folosind API-ul 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]:
    """Anonimizează PII înainte de embedding."""
    response = requests.post(
        f"{ANONYM_BASE_URL}/presidio/anonymize",
        json={
            "text": text,
            "language": "en",
            "anonymizers": {
                "DEFAULT": {"type": "replace", "new_value": "[REDACTAT]"},
                "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": "[TELEFON]"},
                "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):
    """Construiește un index RAG doar cu documente curate."""
    anonymized_docs = []
    for doc in documents:
        clean_text, entities = anonymize_before_embedding(doc)
        anonymized_docs.append(clean_text)
        print(f"Eliminat {len(entities)} entități PII din document")
    vectorstore.add_texts(anonymized_docs)

API-ul anonym.legal acoperă 285+ tipuri de entități. Numele, emailurile, numerele de telefon, CNP-urile naționale, cheile API și URI-urile de baze de date sunt toate prinse.

Nimic sensibil nu ajunge la vector store. Deci nimic sensibil nu poate scurge la utilizatori.

Consultați ghidul pentru dezvoltatori pentru modele de configurare LangChain și LlamaIndex.

Remediați CVE-2025-68664 Chiar Acum

Dacă rulați LangChain sub 0.3.22, actualizați acum:

pip install "langchain>=0.3.22" "langchain-core>=0.3.22"

După aplicarea patch-ului, verificați configurațiile chain-ului pentru risc de injecție. Iată trei pași de urmat.

Mai întâi, validați bucățile recuperate. Faceți asta înainte de a ajunge la LLM.

Eliminați conținutul care corespunde modelelor de injecție cum ar fi ignorați instrucțiunile anterioare, sistem: sau <INST>.

În al doilea rând, anonimizați înainte de embedding. Aceasta reduce suprafața de atac.

Dacă injecția are loc, datele sensibile nu sunt acolo pentru a fi extrase.

În al treilea rând, restricționați permisiunile chain-ului. Chain-urile LangChain nu ar trebui să citească variabile de mediu dincolo de ce au nevoie.

Folosiți un cont de serviciu cu domeniu minim.

Matematica Este Simplă

Scorul CVSS este 9,3. Remedierea este un apel API pe document.

Combinația de CVE-2025-68664 și riscul general de date RAG este o răspundere reală.

Soluția este clară: anonimizați la ingestie, nu la momentul interogării.

Verificați prezentarea de securitate și conformitate pentru cerințele RAG enterprise.

Surse

  • NVD CVE-2025-68664, CVSS 9,3, vulnerabilitate de serializare LangChain
  • Aviz de securitate LangChain, langchain-ai/langchain GitHub, 2025
  • OWASP LLM Top 10: LLM01 Injecție de Prompturi, LLM06 Divulgare de Informații Sensibile
  • Documentația tipurilor de entități anonym.legal — 285+ tipuri de entități suportate

Pregătit să vă protejați datele?

Începeți să anonimizati PII cu 285+ tipuri de entități în 48 de limbi.

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.