LangChain CVE-2025-68664: Kako PII uhaja skozi vas cevovod RAG
Posodobljeno za leto 2026.
Konec leta 2025 je bila v LangChain odkrita kriticna ranljivost. CVE je CVE-2025-68664. Ocena CVSS je 9,3 (Kriticno).
Cilja na kodo za serializacijo LangChain.
Kaj pocne CVE-2025-68664
LangChain ima dve funkciji serializacije: dumps() in dumpd(). Pretvarjata objekte Python v besedilo.
Ranljivost je pri obravnavanju zaprtij.
Ko LangChain serializira klicno funkcijo, zajame kontekst zaprtja.
Napadalec, ki nadzira odziv LLM, lahko sprozI dumps(). Funkcija nato prebere spremenljivke okolja iz procesa Python.
Rezultat je izpostavljenost podatkov. Kljuci API, nizki baz podatkov, skrivnosti JWT in poverilnice AWS se lahko pojavijo v izhodu modela.
Napadalec, ki vbrizga besedilo v izvorno dokument RAG, lahko prebere vase produkcijske skrivnosti.
Prizadete razlicice: LangChain pod 0.3.22 (Python). Razlicica 0.3.22 vsebuje popravek.
Podatki PyPI kazejo siroko uporabo starejsih razlicic skozi marec 2026.
Kako PII uhaja v cevovodih RAG
CVE-2025-68664 je dramaticen. Toda je le en primer sirse tezave.
Podatki prek cevovodov RAG redno uhajajo. Napadalec ni potreben.
Tule je standardna podjetniška nastavitev RAG.
Najprej, vnos. Indeksirate dokumente podjetja v vektorsko shrambo. Recimo zahtevki za podporo, e-posta strank, pogodbe in kadrovske evidence.
Pogoste vektorske shrambe so Pinecone, Weaviate in pgvector.
Nato, pridobivanje. Uporabnik postavi vprasanje. Sistem potegne pet najustreznejsih odlomkov iz shrambe.
Potem, generiranje. Ti odlomki gredo v LLM -- GPT-4o, Claude ali Gemini -- kot kontekst.
Drugi korak je tezava. Pridobljeni odlomki vsebujejo kar koli so vsebovali izvorni dokumenti. To vkljucuje:
- Imena strank, e-postne naslove in telefonske stevilke
- Vrednosti pogodb, stevilke racunov in davcne identifikatorje
- Podatke o placah zaposlenih in opombe k pregledom uspesnosti
- Imena pacientov v klinicnih zapiskih
- Nacionalne stevilke ID v imigracijskih datotekah
Ti podatki gredo v LLM v nespremenjeni obliki. Lahko se pojavijo v izhodu modela.
Beležijo jih ponudnik LLM. Sedijo v vasi zgodovini pogovora. Tecejo v vas sklad za opazovanje.
Napad ni potreben. Tako RAG deluje po zasnovi. Ta zasnova ustvarja realno tveganje zasebnosti.
68 vzorcev skrivnosti v shrambah podjetniskih dokumentov
Varnostna orodja sledijo 68 znanih vzorcev skrivnosti. Pojavljajo se pogosteje, kot ekipe pricakujejo.
Tule so najpogostejsi.
- Kljuci AWS Access Key ID (
AKIA...) - Kljuci API OpenAI (
sk-...) - Kljuci API Anthropic (
sk-ant-...) - URI baz podatkov (
postgresql://user:password@host/db) - Zsetoni JWT (glave v base64)
- Osebni zsetoni dostopa GitHub
- Tajni kljuci Stripe (
sk_live_...) - Kljuci API SendGrid
- SID racunov Twilio in overovitve
- PEM bloki zasebnih kljucev
Zahtevek za podporo bi lahko vseboval kljuc API stranke iz seje razhroscevanja.
Pogodba bi lahko vsebovala poverilnice baze podatkov iz tehnicne predaje.
Konfiguracijska datoteka, indeksirana po pomoti, lahko razkrije celotno shrambo skrivnosti.
Ko te datoteke vstopijo v vektorsko shrambo brez sanacije, vsaka poizvedba lahko poslje skrivnosti LLM-ju.
Morda dosezejo tudi koncnega uporabnika.
Popravi: Anonimizacija pred vdelavo
Pravi pristop anonimizira dokumente pred razdelitvijo na kose in vdelavo.
Ta korak je obvezen za vsak sistem, ki obravnava podatke strank.
Tule je primer Python z API 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]:
"""Anonimizacija PII pred vdelavo."""
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):
"""Zgradite indeks RAG samo s cistimi dokumenti."""
anonymized_docs = []
for doc in documents:
clean_text, entities = anonymize_before_embedding(doc)
anonymized_docs.append(clean_text)
print(f"Odstranjeno {len(entities)} entitet PII iz dokumenta")
vectorstore.add_texts(anonymized_docs)
API anonym.legal pokriva 285+ vrst entitet. Ujame imena, e-postne naslove, telefonske stevilke, nacionalne ID-je, kljuce API in URI baz podatkov.
Nic obcutljivega ne doseze vektorske shrambe. Zato nic obcutljivega ne more uhajati k uporabnikom.
Glejte vodnik za razvijalce za vzorce nastavitve LangChain in LlamaIndex.
Takoj odpravite CVE-2025-68664
Ce poganjate LangChain pod 0.3.22, takoj posodobite:
pip install "langchain>=0.3.22" "langchain-core>=0.3.22"
Po namestitvi popravka preverite konfiguracije verige za tveganje vbrizgavanja. Tule so trije koraki.
Najprej, preverite pridobljene kose. To storite preden dosezejo LLM.
Odstranite vsebino, ki ustreza vzorcem vbrizgavanja, kot so ignore previous instructions, system: ali <INST>.
Drugic, anonimizacija pred vdelavo. To zmanjsa povrsino napada.
Ce pride do vbrizgavanja, obcutljivih podatkov tam ni mogoce izlociti.
Tretjic, omejite dovoljenja verige. Verige LangChain ne bi smele brati spremenljivk okolja zunaj tega, kar potrebujejo.
Uporabite storitveni racun z minimalnim obsegom.
Matematika je preprosta
Ocena CVSS je 9,3. Popravek je en klic API na dokument.
Kombinacija CVE-2025-68664 in splosnega tveganja podatkov RAG je realna odgovornost.
Resitev je jasna: anonimizacija pri vnosu, ne pri casu poizvedbe.
Glejte pregled varnosti in skladnosti za zahteve podjetniskega RAG.
Viri
- NVD CVE-2025-68664, CVSS 9,3, ranljivost serializacije LangChain
- Varnostno obvestilo LangChain, langchain-ai/langchain GitHub, 2025
- OWASP LLM Top 10: LLM01 Vbrizgavanje pozivov, LLM06 Razkritje obcutljivih informacij
- Dokumentacija vrst entitet anonym.legal -- 285+ podprtih vrst entitet