anonym.legal
Nazaj na blogTehnično

LangChain CVE-2025-68664: Kako PII uhaja skozi vas cevovod RAG

CVSS 9,3. Funkcije serializacije LangChain izpostavijo spremenljivke okolja in skrivnosti LLM-jem pod nadzorom napadalca. Kako zaznati in odpraviti uhajanje PII.

March 16, 20268 min branja
LangChainRAG pipelineCVEPII leakagedeveloper securityAPI keysLLM security

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

Ste pripravljeni zaščititi svoje podatke?

Začnite z anonimizacijo PII z več kot 285 tipi entitet v 48 jezikih.

About this page

We update this page when our platform or the law changes.

Read our founder note for how we work.

Each change shows up in the timestamp at the top.

Related reading

We follow these rules

  • GDPR (EU 2016/679).
  • ISO/IEC 27001:2022.
  • NIS2 (EU 2022/2555).
  • HIPAA safe harbor under 45 CFR § 164.514(b)(2).

Our promise

We do not sell your data.

We do not train models on your text.

We store your files in Germany.

You can delete your account at any time.

You own your work.

Where we run

Our servers live in Falkenstein, Germany.

We use Hetzner. They hold ISO 27001 certification.

All data stays in the EU.

Backups run every day.

Need help?

Email support@anonym.legal.

We reply within one business day.

How we test

We run a full check suite on every release.

Each surface gets its own sweep script and report.

Human reviewers spot-check the output each week.

We track recall and precision on a labelled set.

Bad runs block the deploy.

What we never do

  • We never sell your information to third parties.
  • We never train models on what you upload.
  • We never keep your work after you delete it.
  • We never share keys with any outside firm.
  • We never run ads inside the product.

Plans in plain words

We sell credits, not seats.

One credit covers one short job.

Long jobs use a few credits each.

You can top up at any time.

Unused credits roll over each month.

Read the plans page for current rates.

Who built this

A small team of engineers and lawyers built this.

We ship from Europe and work in the open.

Our founder note spells out why we started.

Where to start

How the parts fit

A browser add-on cleans text inside Chrome.

A Word plug-in handles drafts in Office.

A small desktop tool works on whole folders.

An agent protocol link feeds large models safely.

All four share one core engine and one rule set.

Words from our team

We started this work after a lunch about cookies.

One friend kept getting odd ads on her phone.

We asked why a court file leaked through a draft.

We sketched the first build on a napkin that week.

By month three we had a tiny demo for a friend.

She used it on her first case the next day.

Common questions we hear

Can the tool read scanned PDFs? Yes, with OCR.

Does it work on long files? Yes, in small chunks.

Can I roll my own rule set? Yes, save it as a preset.

Does it run offline? The desktop build runs offline.

Do you keep my files? No, the cloud build wipes after each run.

Will it learn from my work? No, we never train on inputs.

A short tour of the workflow

Upload a file or paste a snippet of prose.

Pick the entities you want gone from the draft.

Choose a method: replace, mask, hash, encrypt, or redact.

Press run and watch the side panel show each hit.

Skim the result and tweak any rule that misfired.

Save the cleaned file or send it to a teammate.