Späť na blogTechnické

LangChain CVE-2025-68664: Ako PII unika cez vas RAG pipeline

CVSS 9,3. Serializacne funkcie LangChain odhaluju premenne prostredia a tajne kluce LLM riadenym utocnikmi. Ako detekovat a opravit unikanie PII.

March 16, 20268 min čítania
LangChainRAG pipelineCVEPII leakagedeveloper securityAPI keysLLM security

LangChain CVE-2025-68664: Ako PII uniká cez váš RAG pipeline

Aktualizované pre rok 2026.

Na konci roku 2025 bola v LangChain objavená kritická chyba. CVE je CVE-2025-68664. Skóre CVSS je 9,3 (Kritické).

Cieli na serializačný kód LangChain.

Čo robí CVE-2025-68664

LangChain má dve serializačné funkcie: dumps() a dumpd(). Konvertujú Python objekty na text.

Chyba sa týka spracovania uzáverov.

Keď LangChain serializuje callable, zachytí kontext uzáveru.

Útočník, ktorý kontroluje odpoveď LLM, môže spustiť dumps(). Funkcia potom číta premenné prostredia z Python procesu.

Výsledkom je expozícia dát. API kľúče, databázové reťazce, JWT tajné kľúče a AWS prihlasovacie údaje sa môžu objaviť vo výstupe modelu.

Útočník, ktorý vloží text do zdrojového dokumentu RAG, môže čítať vaše produkčné tajné kľúče.

Postihnuté verzie: LangChain nižší ako 0.3.22 (Python). Verzia 0.3.22 obsahuje opravu.

Dáta PyPI ukazujú rozsiahle používanie starších verzií až do marca 2026.

Ako PII uniká v RAG pipelines

CVE-2025-68664 je dramatický prípad. Ale je to len jeden prípad širšieho problému.

Údaje unikajú cez RAG pipelines rutinne. Útočník nie je potrebný.

Tu je štandardné podnikové RAG nastavenie.

Najprv indexovanie. Indexujete firemné dokumenty do vektorového úložiska. Myslite na podporné tikety, e-maily zákazníkov, zmluvy a HR záznamy.

Bežné vektorové úložiská sú Pinecone, Weaviate a pgvector.

Ďalej vyhľadávanie. Používateľ položí otázku. Systém vytiahne päť najrelevantnejších blokov z úložiska.

Potom generovanie. Tieto bloky idú do LLM — GPT-4o, Claude alebo Gemini — ako kontext.

Krok dva je problém. Získané bloky obsahujú čokoľvek, čo obsahovali zdrojové dokumenty. To zahŕňa:

  • Mená zákazníkov, e-mailové adresy a telefónne čísla
  • Zmluvné hodnoty, čísla účtov a daňové identifikátory
  • Mzdové údaje zamestnancov a poznámky z hodnotení výkonu
  • Mená pacientov v klinických záznamoch
  • Čísla národných identifikátorov v imigračných súboroch

Tieto údaje idú do LLM tak, ako sú. Môžu sa objaviť vo výstupe modelu.

Sú zaznamenávané poskytovateľom LLM. Sedia v histórii konverzácie. Prúdia do vášho observability stacku.

Utoč nie je potrebný. Takto RAG funguje podľa návrhu. Návrh vytvára reálne riziko súkromia.

68 vzorov tajných kľúčov v podnikových úložiskách dokumentov

Bezpečnostné nástroje sledujú 68 známych vzorov tajných kľúčov. Objavujú sa častejšie, ako tímy očakávajú.

Tu sú tie najčastejšie.

  • AWS Access Key IDs (AKIA...)
  • OpenAI API kľúče (sk-...)
  • Anthropic API kľúče (sk-ant-...)
  • Databázové URI (postgresql://user:password@host/db)
  • JWT tokeny (base64-kódované hlavičky)
  • GitHub Personal Access Tokeny
  • Stripe tajné kľúče (sk_live_...)
  • SendGrid API kľúče
  • Twilio account SID a auth tokeny
  • PEM bloky súkromných kľúčov

Supportový tiket môže obsahovať API kľúč zákazníka z debugovacej relácie.

Zmluva môže obsahovať databázové prihlasovacie údaje z technického odovzdania.

Konfiguračný súbor indexovaný omylom môže odhaliť celé úložisko tajných kľúčov.

Keď tieto súbory vstúpia do vektorového úložiska bez sanitizácie, každý dotaz môže odoslať tajné kľúče do LLM.

Môžu sa dostať aj ku koncovému používateľovi.

Oprava: Anonymizujte pred vkladaním

Správny prístup anonymizuje dokumenty pred rozdelením a vkladaním.

Tento krok je povinný pre akýkoľvek systém, ktorý narába s údajmi zákazníkov.

Tu je príklad v Pythone s použitím 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]:
    """Anonymizujte PII pred vkladaním."""
    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):
    """Vytvorte RAG index len s čistými dokumentmi."""
    anonymized_docs = []
    for doc in documents:
        clean_text, entities = anonymize_before_embedding(doc)
        anonymized_docs.append(clean_text)
        print(f"Odstranene {len(entities)} PII entit z dokumentu")
    vectorstore.add_texts(anonymized_docs)

anonym.legal API pokrýva 285+ typov entít. Mená, e-maily, telefónne čísla, národné ID, API kľúče a databázové URI sú všetky zachytené.

Nič citlivé sa nedostane do vektorového úložiska. Takže nič citlivé nemôže uniknúť používateľom.

Pozrite si sprievodcu pre vývojárov pre vzory nastavenia s LangChain a LlamaIndex.

Opravte CVE-2025-68664 ihneď

Ak spúšťate LangChain nižší ako 0.3.22, aktualizujte teraz:

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

Po záplatovaní skontrolujte konfigurácie reťazca na riziko injekcie. Tu sú tri kroky, ktoré treba podniknúť.

Po prvé, overujte získané bloky. Urobte to pred tým, ako sa dostanú do LLM.

Odstráňte obsah zodpovedajúci vzorom injekcie, ako sú ignore previous instructions, system: alebo <INST>.

Po druhé, anonymizujte pred vkladaním. Tým sa zmenší plocha útoku.

Ak k injekcii dôjde, citlivé údaje tam nie sú na extrakciu.

Po tretie, obmedzte oprávnenia reťazca. Reťazce LangChain by nemali čítať premenné prostredia nad rámec toho, čo potrebujú.

Použite servisný účet s minimálnym rozsahom.

Matematika je jednoduchá

Skóre CVSS je 9,3. Oprava je jedno volanie API na dokument.

Kombinácia CVE-2025-68664 a všeobecného rizika RAG dát predstavuje reálnu zodpovednosť.

Riešenie je jasné: anonymizujte pri indexovaní, nie v čase dotazu.

Pozrite si prehľad bezpečnosti a súladu pre požiadavky podnikového RAG.

Zdroje

  • NVD CVE-2025-68664, CVSS 9,3, zraniteľnosť serializácie LangChain
  • Bezpečnostné upozornenie LangChain, langchain-ai/langchain GitHub, 2025
  • OWASP LLM Top 10: LLM01 Prompt Injection, LLM06 Sensitive Information Disclosure
  • Dokumentácia typov entít anonym.legal — 285+ podporovaných typov entít

Pripravení chrániť vaše údaje?

Začnite anonymizovať PII s 285+ typmi entít v 48 jazykoch.

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.