CVE-2025-68664: Što se dogodilo
U kasnom 2025., sigurnosni istraživači su otkrili CVE-2025-68664, kritičnu ranljivost u funkcijama serijalizacije LangChain-a — posebno dumps() i dumpd(). CVSS rezultat je 9.3 (Critical).
Ranljivost radi na sljedeći način: Metode serijalizacije LangChain-a serijaliziraju Python objekte, uključujući pozivive funkcije, hvatajući kontekst njihova zatvaranja. Kada napadač kontrolira LLM odgovor u LangChain lancu — kroz prompt injection u preuzetan dokument, zlonamjerini rezultat alata ili otrovanu stavku vektorske spremišnice — može oblikovati odgovore koji uzrokuju da se dumps() serializira varijable okruženja dostupne Python procesu.
Rezultat: API ključevi, stringovi veza baze podataka, JWT tajne i AWS kredencijali umetnuti u okruženje LangChain lanca mogu biti eksfiltriranje kroz izlaz modela. Napadač koji može injicirati tekst u RAG cijev spoljnog dokumenta vašeg može, pod određenim konfiguracijama lanca, čitati vaše produkcijske tajne.
Pogođene verzije: LangChain < 0.3.22 (Python). Ispravka je objavljena u 0.3.22, ali je usvajanje sporo — download podaci pypi pokazuju značajnu upotrebu ranjivih verzija do ožujka 2026.
Kako PII curenja u RAG cijevima — Opći problem
CVE-2025-68664 je dramatičan primjer bačega, tišeg problema: PII curenja kroz RAG cijeve rutinski, preko mehanizama koji ne zahtijevaju nikakvu CVE i nikakvu napadača.
Razmotrite tipičnu postavku poslovne RAG:
- Unos: Indeksirate dokumente vaše tvrtke — ticket podrške, email-ove korisnika, pravne ugovore, HR zapise — u vektorsku bazu podataka (Pinecone, Weaviate, pgvector).
- Dohvat: Kada korisnik postavi pitanje, sustav dohvaća 5 semantički sličnih dijelova dokumenta.
- Generiranje: Ti dijelovi se proslijeđuju kao kontekst LLM-u (GPT-4o, Claude, Gemini), koji generiše odgovor.
Problem je korak 2. Dohvaćeni dijelovi sadrže bilo koji dio originalnih dokumenata, uključujući:
- Imena korisnika, email adrese, brojeve telefona
- Vrijednosti ugovora, brojeve računa, identifikatore poreza
- Podatke o plaćama zaposlenika, sadržaj pregleda performansi
- Imena pacijenata u kliničkim bilješkama (za zdravstvenu RAG)
- Nacionalne ID brojeve u cijevima procesiranja imigracije
Taj PII je proslijeđen verbatim LLM-u u kontekstnom prozoru. Pojavljuje se u izlazu modela ako upit to zatraži. Logira se od strane pružatelja LLM-a. Sprema se u vašoj istoriji razgovora LangChain-a. Teče u vašu platformu promatranja.
Nitko od toga ne zahtijeva ranljivost. To je namjerno ponašanje RAG sustava — i kreira sustavnu PII izloženost.
68 tajnih obraća
Sigurnosne alate koje nadziruju RAG cijeve prate 68 poznatih tajnih obraća koji se obično pojavljuju u poslovnim spremištima dokumenata:
- AWS Access Key ID-ovi (
AKIA...) - OpenAI API ključevi (
sk-...) - Anthropic API ključevi (
sk-ant-...) - URI veza baze podataka (
postgresql://user:password@host/db) - JWT tokeni (base64-encoder zaglavlja)
- GitHub Osobni tokeni pristupa
- Stripe tajni ključevi (
sk_live_...) - SendGrid API ključevi
- Twilio account SID-ovi i auth tokeni
- Privatni ključ PEM blokovi
Ti se obraci pojavljuju u poslovnim dokumentima više često nego što programeri očekuju. Ticket podrške mogao bi sadržavati API ključ korisnika koji su zalijepili tijekom debugiranja. Ugovor mogao bi sadržavati kredencijale baze podataka dijeljene tijekom tehnijske integracije. Datoteka konfiguracije slučajno indeksirana izlaže cijelo spremite tajnih.
Kada se ti dokumenti indeksiraju u vektorsku bazu podataka bez sanitacije, svaki upit koji ih dohvaća proslijeđuje tajne LLM-u — i potencijalno korisniku koji je podnesen upit.
Ispravka: Anonimizacija prije ugrađivanja
Ispravan arhitektur za PII-sigurnu RAG cijev anonimizira dokumente prije nego što su isječeni i ugrađeni. Ovo nije opciono za produkcijske sustave koji rukuju korisničkim podacima.
Evo Python implementacije koristeći 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]:
"""
Anonimizacija PII u tekstu dokumenta prije ugrađivanja.
Povraća (anonymized_text, entity_map) za opciono deanonimiziranje.
"""
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"}, # Čuvajte URL-ove — potrebne za citacije
}
},
headers={"Authorization": f"Bearer {ANONYM_API_KEY}"}
)
result = response.json()
return result["text"], result.get("items", [])
def build_rag_index(documents: list[str], vectorstore):
"""
Izgraditi RAG indeks s PII anonimiziranom prije ugrađivanja.
"""
anonymized_docs = []
for doc in documents:
clean_text, entities = anonymize_before_embedding(doc)
anonymized_docs.append(clean_text)
# Opciono logirajte broj entiteta za revizijski trag
print(f"Uklonjeno {len(entities)} PII entiteta iz dokumenta")
# Sada ugrađujete čiste dokumente — nikakav PII ne doseže vektorsku pohranu
vectorstore.add_texts(anonymized_docs)
anonym.legal API podržava 285+ vrsta entiteta. Za poslovne cijeve dokumenata, to znači da se imena, emailovi, brojevi telefona, nacionalni ID-ovi, financijski identifikatori, API ključevi (preko CRYPTO tipa entiteta), URI-evi baze podataka i 270+ dodatnih obraća detektuju i uklanjaju prije nego što bilo koji dokument dosegne vašu vektorsku pohranu.
Fiksiranje CVE-2025-68664 specifično
Ako pokrećete LangChain < 0.3.22, ažurirajte odmah:
pip install "langchain>=0.3.22" "langchain-core>=0.3.22"
Nakon primjene ispravke, revidirajte vaše konfiguracije lanca za prompt injection rizik:
- Validirajte dohvaćene dijelove prije nego što se proslijede LLM-u — uklanjajte bilo koji sadržaj koji se podudara s poznatim obracima injekście (
ignore previous instructions,system:,<INST>) - Koristiti anonymize_before_embedding u vašoj cijevi unosa — smanjuje površinu napada čak i ako se injekscija dogodi, jer osjetljivi podaci nisu prisutni u dohvaćenim dijelovima
- Ograničiti dozvole lanca — LangChain lanci trebali bi imati pristup varijablama okruženja samo onome što trebaju. Koristite dedicirani račun usluge s minimalnim dozvolama.
CTA: Osigurajte vašu cijev
Za razvojne inženjere koji grade produkcijske RAG sustave, kombinacija CVE-2025-68664 i opće PII-u-kontekst rizika predstavlja značajnu odgovornost. Ispravka je arhitekturna: anonimizacija pri unosu, ne pri upitu.
- anonym.legal API dokumentacija — REST API za anonimizaciju dokumenata s 285+ vrsta entiteta
- Slučajevi za razvojne inženjere — obrasci integracije za LangChain, LlamaIndex i prilagođene RAG sustave
CVSS rezultat je 9.3. Sanacija je jedan API poziv po dokumentu. Matematika je jednostavna.
Izvori:
- NVD CVE-2025-68664, CVSS 9.3, LangChain serijalizacija ranljivost
- LangChain sigurnosni savjet, langchain-ai/langchain GitHub, 2025
- OWASP LLM Top 10: LLM01 Prompt Injection, LLM06 Sensitive Information Disclosure
- anonym.legal dokumentacija vrste entiteta — 285+ podržanih vrsta entiteta