CVE-2025-68664: šta se desilo
U kasnom 2025, istraživači sigurnosti su otkrili CVE-2025-68664, kritičnu ranjivost u funkcijama serijalizacije LangChain-a — posebno dumps() i dumpd(). CVSS rezultat je 9.3 (Kritičan).
Ranjivost funkcioniše na sledeći način: serijalizacione metode LangChain-a serijalizuju Python objekte, uključujući pozivne funkcije, hvatajući njihov kontekst zatvaranja. Kad napadač kontroliše LLM odgovor u LangChain lancu — kroz prompt injekziju u preuzet dokument, zlonamerni rezultat alata ili otrovno unešenje vektorske baze — mogu oblikovati odgovore koji uzrokuju da se dumps() serijalizuje promenljive okruženja dostupne Python procesu.
Rezultat: API ključevi, stringovi konekcije baze podataka, JWT tajne i AWS kredencijali ugnineždi u okruženju LangChain lanca mogu biti egzfiltrovali kroz izlaz modela. Napadač koji može injektovati tekst u izvore podataka RAG cevovoda može, pod određenim konfiguracijama lanca, čitati tvoje produkcijske tajne.
Pogođene verzije: LangChain < 0.3.22 (Python). Ispravka je objavljena u 0.3.22, ali je usvajanje bilo sporо — pypi podaci o preuzimanju pokazuju značajnu upotrebu ranjivim verzijama kroz mart 2026.
Kako PII curi u RAG cevacima — opšti problem
CVE-2025-68664 je dramatičan primer širi, tihjega problema: PII curenja kroz RAG cevovode rutinski, kroz mehanizme koji zahtevaju bez CVE i bez napadača.
Razmisli o tipičnoj enterprise RAG konfiguraciji:
- Ulaganje: Indeksiruješ dokumente tvoje kompanije — tikete podrške, e-male kupaca, pravne ugovore, HR zapise — u vektorsku bazu (Pinecone, Weaviate, pgvector).
- Pronalaženje: Kad korisnik postavи pitanje, sistem pronalazi 5 semantički sličnih delova dokumenta.
- Generisanje: Ti delovi se prosleđuju kao kontekst LLM-u (GPT-4o, Claude, Gemini), koji generiše odgovor.
Problем je korak 2. Pronađeni dijelovi sadrže šta god je bilo u originalnim dokumentima, uključujući:
- Imena kupaca, e-mail adrese, telefonske brojeve
- Vrednosti ugovora, brojeve računa, poreske identifikatore
- Podatke o plaćama zaposlenika, sadržaj pregledа performansi
- Imena pacijenata u kliničkim napomenama (za zdravstvene RAG)
- Nacionalne ID brojeve u imigrantskim doumentarnim cevovapodima
Taj PII je prosljeđen doslovno LLM-u u kontekstnom prozoru. Pojavljuje se u izlazu modela ako upit to izazove. Loguje ga LLM pružalac. Čuva se u istoriji konverzacije LangChain-a. Teče u tvoju platforuntu za vidljivost. Teče u treće stranе sisteme gde se koristi kao sirov ulaz.
Nijedan od toga ne zahteva ranjivost. To je podrazumevano ponašanje RAG sistema — i kreira sistematsku PII izloženost.
68 tajnih šablona
Alat sigurnosti koji prati RAG cevovode prati 68 poznatih tajnih šablona koji obično se pojavljuju u skladištima podataka enterprise-a:
- AWS ID-ove pristupnih ključeva (
AKIA...) - OpenAI API ključeve (
sk-...) - Anthropic API ključeve (
sk-ant-...) - URI stringove konekcije baze podataka (
postgresql://user:password@host/db) - JWT tokene (base64-kodirane zaglavlje)
- GitHub ličnog pristupa tokene
- Stripe tajne ključeve (
sk_live_...) - SendGrid API ključeve
- Twilio brojevima računa i auth tokene
- PEM blokove privatnih ključeva
Eti šabloni se pojavljuju u enterprise dokumentima više nego što programeri očekuju. Tikет podrške može sadržavati API ključ kupca koji su zalepljeni tokom otklanjanja greške. Ugovor može sadržavati kredencijale baze podataka deljene tokom tehnijske integracije. Datoteka konfiguracije slučajno indeksirana otkriva čitavo skladište tajni.
Kad se ti dokumenti indeksiraju u vektorsku bazu bez sanacije, svaki upit koji ih pronalazi prosleđuje tajne LLM-u — i potencijalno korisniku koji je podnio upit.
Ispravka: Anonimizuj pre nego što se ugnjiždavaš
Ispravna arhitektura za PII-siguran RAG cevovod anonimizuje dokumente pre nego što se dijele i ugnjiždavaju. To nije opciono za produkcijske sisteme koji obraduju podatke kupaca.
Evo Python implementacije koja koristi 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]:
"""
Anonimizuj PII u tekstu dokumenta pre nego što se ugnjiždava.
Vraća (anonymized_text, entity_map) za opcionalnu deanonimizaciju.
"""
response = requests.post(
f"{ANONYM_BASE_URL}/presidio/anonymize",
json={
"text": text,
"language": "sr",
"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):
"""
Napravi RAG indeks sa PII anonimizovanim pre nego što se ugnjiždava.
"""
anonymized_docs = []
for doc in documents:
clean_text, entities = anonymize_before_embedding(doc)
anonymized_docs.append(clean_text)
print(f"Uklonjeno {len(entities)} PII entiteta iz dokumenta")
vectorstore.add_texts(anonymized_docs)
Anonym.legal API podržava 285+ tipova entiteta. Za enterprise dokumenatne cevovode, to znači da imena, e-mail adrese, telefonske brojeve, nacionalne ID-eve, finansijske identifikatore, API ključeve (preko CRYPTO tipa entiteta), URI-je baze podataka i 270+ dodatnih šablona se detektuju i uklonjeni pre nego što bilo koji dokument dosegne tvoju vektorsku bazu.
Popravka CVE-2025-68664 Specifično
Ako voziš LangChain < 0.3.22, ažuriraj odmah:
pip install "langchain>=0.3.22" "langchain-core>=0.3.22"
Nakon što leči, revidira konfiguracije lanca za rizik od prompt injekzije:
- Validuj pronađene delove pre nego što ih proslediš LLM-u — ukloni bilo koji sadržaj koji se podudara sa poznatim šablonima injekzije (
ignoriši prethodne instrukcije,system:,<INST>) - Koristi anonymize_before_embedding u vašem cevovodu unošenja — smanjuje površinu napada čak i ako se injekzija dogodi, jer osjetljivi podaci nisu prisutni u pronađenim delovima
- Ograniči dozvole lanca — LangChain lanci ne bi trebali imati pristup promenljivama okruženja izvan onoga što trebaju. Koristi dedikovan servisni račun sa minimalnim dozvolama.
CTA: Osiguraj svoj cevovod
Za programere koji prave produkcijske RAG sisteme, kombinacija CVE-2025-68664 i opšte PII-u-kontekst rizika predstavlja značajnu odgovornost. Ispravka je arhitekturna: anonimizuj na unošenju, a ne na vremenu upita.
- anonym.legal API dokumentacija — REST API za anonimizaciju dokumenata sa 285+ tipom entiteta
- Slučajevi upotrebe za programere — integracijski šabloni za LangChain, LlamaIndex i prilagođene RAG sisteme
CVSS rezultat je 9.3. Ublažavanje je jedan API poziv po dokumentu. Matematika je jednostavna.
Izvori:
- NVD CVE-2025-68664, CVSS 9.3, LangChain serijalizaciona ranjivost
- LangChain sigurnosni savet, langchain-ai/langchain GitHub, 2025
- OWASP LLM Top 10: LLM01 Prompt Injection, LLM06 Osetljivo Information Disclosure
- anonym.legal dokumentacija tipa entiteta — 285+ podržanih tipova entiteta