Vissza a BlograTechnikai

LangChain CVE-2025-68664: Hogyan szivárognak ki személyes adatok a RAG-folyamaton keresztül

CVSS 9,3. A LangChain szerializációs függvényei környezeti változókat és titkokat tesznek ki a támadó által vezérelt LLM-eknek. Hogyan észleljük és javítsuk a személyes adatszivárgásokat.

March 16, 20268 perc olvasás
LangChainRAG pipelineCVEPII leakagedeveloper securityAPI keysLLM security

Frissítve: 2026.

2025 végén kritikus hibát találtak a LangChainben. A CVE azonosítója: CVE-2025-68664. A CVSS-pontszám: 9,3 (kritikus).

A LangChain szerializációs kódját célozza.

Mit csinál a CVE-2025-68664?

A LangChainnek két szerializációs függvénye van: dumps() és dumpd(). Python-objektumokat alakítanak szöveggé.

A hiba a closure-kezelésben rejlik.

Amikor a LangChain szerializál egy hívhatót, megragadja a closure-kontextust.

Egy támadó, aki irányítja az LLM-választ, aktiválhatja a dumps() függvényt. A függvény ekkor beolvassa a Python-folyamat környezeti változóit.

Az eredmény adatexponálás. API-kulcsok, adatbázis-kapcsolati stringek, JWT-titkok és AWS-hitelesítő adatok jelenhetnek meg a modell kimenetében.

Egy támadó, aki szöveget injektál egy RAG-forrás dokumentumba, kiolvashatja az éles titkokat.

Érintett verziók: 0.3.22 alatti LangChain (Python). A 0.3.22-es verzió tartalmazza a javítást.

A PyPI adatai szerint régebbi verziók 2026 márciusáig széles körben használatban maradtak.

Hogyan szivárognak ki személyes adatok RAG-folyamatokon?

A CVE-2025-68664 látványos eset. De ez csupán egy eset egy tágabb problémából.

A RAG-folyamatokon keresztül routinszerűen szivárognak adatok. Nincs szükség támadóra.

Íme egy tipikus vállalati RAG-felállás.

Először az indexelés. Vállalati dokumentumokat indexel egy vektortárba. Gondoljon ügyfélszolgálati jegyekre, ügyfél-e-mailekre, szerződésekre és HR-nyilvántartásokra.

Glattors vektortárak: Pinecone, Weaviate és pgvector.

Majd a lekérés. A felhasználó kérdez. A rendszer lekéri a tárból az öt legrelevánsabb szövegdarabot.

Aztán a generálás. Ezek a szövegdarabok kontextusként kerülnek az LLM-be — GPT-4o-ba, Claude-ba vagy Geminibe.

A második lépés a probléma. A lekért szövegdarabok azt tartalmazzák, amit a forrásdokumentumok tartalmaztak. Ez magában foglalja:

  • Ügyféleteket, e-mail-címeket és telefonszámokat
  • Szerződéses értékeket, számlaszámokat és adóazonosítókat
  • Munkavállalói béradatokat és teljesítményértékelési feljegyzéseket
  • Betegneveket klinikai feljegyzésekben
  • Személyazonosítószámokat bevándorlási aktákban

Ezek az adatok változtatás nélkül kerülnek az LLM-be. Megjelenhetnek a modell kimenetében.

Az LLM-szolgáltató naplózza őket. Megmaradnak a társalgástörténetben. Beáramlanak az observabilitási rendszerbe.

Nem szükséges támadó. Így működik tervezetten a RAG. A tervezés valódi adatvédelmi kockázatot teremt.

68 ismert titokpatt a vállalati dokumentumtárakban

A biztonsági eszközök 68 ismert titokpattot követnek nyomon. Ezek a várt szintűnél gyakrabban fordulnak elő.

A leggyakoribbak:

  • AWS hozzáférési kulcs azonosítók (AKIA...)
  • OpenAI API-kulcsok (sk-...)
  • Anthropic API-kulcsok (sk-ant-...)
  • Adatbázis-URI-k (postgresql://user:password@host/db)
  • JWT-tokenek (base64 kódolt fejlécek)
  • GitHub személyes hozzáférési tokenek
  • Stripe titkos kulcsok (sk_live_...)
  • SendGrid API-kulcsok
  • Twilio fiókos SID-ek és hitelesítési tokenek
  • Privát kulcs PEM-blokkok

Egy ügyfélszolgálati jegy tartalmazhatja az ügyfél API-kulcsát egy hibakereső munkamenetből.

Egy szerződés adatbázis-hitelesítő adatokat tartalmazhat egy technikai átadásból.

Egy véletlenül indexelt konfigurációs fájl egy teljes titoktárat tehet ki.

Ha ezek a fájlok fertőtlenítés nélkül kerülnek egy vektortárba, minden lekérdezés átadhatja a titkokat az LLM-nek.

Végül a végfelhasználóhoz is eljuthatnak.

Javítás: Anonimizálás az indexelés előtt

A helyes megközelítés a dokumentumok anonimizálása az indexelés és a beágyazás előtt.

Ez a lépés kötelező minden ügyfélaltat kezelő rendszernél.

Íme egy Python-példa az anonym.legal API használatával:

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]:
    """PII anonimizálása beágyazás előtt."""
    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):
    """RAG-index felépítése csak tiszta dokumentumokból."""
    anonymized_docs = []
    for doc in documents:
        clean_text, entities = anonymize_before_embedding(doc)
        anonymized_docs.append(clean_text)
        print(f"{len(entities)} PII-entitás eltávolítva a dokumentumból")
    vectorstore.add_texts(anonymized_docs)

Az anonym.legal API 273 entitástípust fed le. Neveket, e-mail-címeket, telefonszámokat, személyazonossági számokat, API-kulcsokat és adatbázis-URI-kat is elfog.

Semmi érzékeny nem kerül a vektortárba. Így semmi érzékeny nem szivároghat ki a felhasználókhoz.

A LangChain és LlamaIndex beállítási mintáiról lásd a fejlesztői útmutatót.

A CVE-2025-68664 azonnali javítása

Ha 0.3.22 alatti LangChainet futtat, frissítsen most:

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

A javítás után ellenőrizze a chain-konfigurációkat injekciós kockázat szempontjából. Három lépés következik.

Először validálja a lekért szövegdarabokat. Tegye ezt az LLM-be küldés előtt.

Távolítsa el az olyan tartalmakat, amelyek injekciós mintáknak felelnek meg: ignore previous instructions, system: vagy <INST>.

Másodszor anonimizáljon beágyazás előtt. Ez csökkenti a támadási felületet.

Ha injekció is megtörténik, az érzékeny adatok már nem találhatók ott.

Harmadszor korlátozza a chain-jogosultságokat. A LangChain-chainek nem olvashatnak a szükségesnél több környezeti változót.

Használjon minimális hatókörű szolgáltatásfiókot.

A számítás egyszerű

A CVSS-pontszám 9,3. A javítás dokumentumonként egy API-hívás.

A CVE-2025-68664 és az általános RAG-adatkockázat kombinációja valós felelősségi terhet jelent.

A megoldás egyértelmű: anonimizáljon betöltéskor, ne lekérdezéskor.

A vállalati RAG-követelményekért tekintse át a biztonsági és megfelelőségi áttekintőt.

Források

  • NVD CVE-2025-68664, CVSS 9,3, LangChain szerializációs sérülékenység
  • LangChain biztonsági tanácsadó, langchain-ai/langchain GitHub, 2025
  • OWASP LLM Top 10: LLM01 Prompt Injection, LLM06 Érzékeny információ közzététele
  • anonym.legal entitástípus dokumentáció — 273 támogatott entitástípus

Készen áll az adatai védelmére?

Kezdje el a PII anonimizálását 273 entitástípuson 48 nyelven.