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