Tilbake til BloggTeknisk

LangChain CVE-2025-68664: Slik lekker PII gjennom RAG-rorfilen din

CVSS 9,3. LangChains serialiseringsfunksjoner avslorer miljovariabler og hemmeligheter for angriperkontrollerte LLM-er. Slik oppdager og fikser du PII-lekkasjer.

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

LangChain CVE-2025-68664: Slik lekker PII gjennom RAG-rorfilen din

Oppdatert for 2026.

Et kritisk sikkerhetshull ble funnet i LangChain sent i 2025. CVE-en er CVE-2025-68664. CVSS-scoren er 9,3 (Kritisk).

Det retter seg mot LangChains serialiseringskode.

Hva CVE-2025-68664 gjor

LangChain har to serialiseringsfunksjoner: dumps() og dumpd(). De konverterer Python-objekter til tekst.

Feilen er i lukningshåndtering.

Nar LangChain serialiserer et kallbart objekt, fanger det lukningskonteksten.

En angriper som kontrollerer LLM-svaret kan utlose dumps(). Funksjonen leser deretter miljovariabler fra Python-prosessen.

Resultatet er dataavsloering. API-nokler, databasestrenger, JWT-hemmeligheter og AWS-legitimasjon kan vises i modellresultater.

En angriper som injiserer tekst i et RAG-kildedokument kan lese produksjonshemmelighetene dine.

Berort versjon: LangChain under 0.3.22 (Python). Versjon 0.3.22 har rettelsen.

PyPI-data viser bred bruk av eldre versjoner frem til mars 2026.

Slik lekker PII i RAG-rorledninger

CVE-2025-68664 er dramatisk. Men det er bare ett tilfelle av et bredere problem.

Data lekker gjennom RAG-rorledninger rutinemessig. Ingen angriper er nodvendig.

Her er et standard RAG-oppsett i en virksomhet.

Forst, innsamling. Du indekserer firmadokumenter i en vektorlagring. Tenk supportbilletter, kunde-e-poster, kontrakter og HR-oppforinger.

Vanlige vektorlagringer er Pinecone, Weaviate og pgvector.

Neste, gjenfinning. En bruker stiller et sporsmal. Systemet henter de fem mest relevante delene fra lagringen.

Deretter, generering. Disse delene ga til en LLM — GPT-4o, Claude eller Gemini — som kontekst.

Trinn to er problemet. Hentede deler inneholder hva kildeadokumentene inneholdt. Det inkluderer:

  • Kundenavn, e-postadresser og telefonnumre
  • Kontraktverdier, kontonumre og skatteidentifikatorer
  • Medarbeiders lonndata og ytelsesanmeldelsesnotater
  • Pasientnavn i kliniske notater
  • Nasjonale ID-numre i innvandringsfiler

Disse dataene ga til LLM-en som de er. De kan vises i modellresultater.

De logges av LLM-leverandoren. De sitter i samtaleloggen din. De flommer inn i observerbarhets-stakken din.

Ingen angrep er nodvendig. Slik fungerer RAG etter utforming. Utformingen skaper reell personvernrisiko.

68 hemmelighetsmonstre i virksomhetsdokumentlagringer

Sikkerhetsverktoy sporer 68 kjente hemmelighetsmonstre. De vises oftere enn team forventer.

Her er de vanligste.

  • AWS Access Key ID-er (AKIA...)
  • OpenAI API-nokler (sk-...)
  • Anthropic API-nokler (sk-ant-...)
  • Database-URI-er (postgresql://user:password@host/db)
  • JWT-tokens (base64-kodede overskrifter)
  • GitHub Personal Access Tokens
  • Stripe hemmelige nokler (sk_live_...)
  • SendGrid API-nokler
  • Twilio konto-SID-er og auth-tokens
  • Private nokkel PEM-blokker

En supportbillett kan inneholde en kunde-API-nokkel fra en feilosokingsokott.

En kontrakt kan inkludere databasepassordfrase fra en teknisk overleveranse.

En konfigurasjonsfil indeksert ved en feiltagelse kan avsloere en hel hemmelighetslager.

Nar disse filene kommer inn i en vektorlagring uten rensing, kan hver sporring sende hemmelighetene til LLM-en.

De kan ogsa na sluttbrukeren.

Fiks det: Anonymiser for innbygging

Den riktige tilnaermingen anonymiserer dokumenter for inndeling og innbygging.

Dette trinnet er pakrevd for ethvert system som handterer kundedata.

Her er et Python-eksempel med 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]:
    """Anonymiser PII for innbygging."""
    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):
    """Bygg en RAG-indeks med kun rene dokumenter."""
    anonymized_docs = []
    for doc in documents:
        clean_text, entities = anonymize_before_embedding(doc)
        anonymized_docs.append(clean_text)
        print(f"Fjernet {len(entities)} PII-enheter fra dokument")
    vectorstore.add_texts(anonymized_docs)

anonym.legal API dekker 285+ enhetstyper. Navn, e-postadresser, telefonnumre, nasjonale ID-er, API-nokler og database-URI-er oppdages alle.

Ingenting sensitivt nar vektorlagringen. Slik kan ingenting sensitivt lekke til brukere.

Se utviklerveiledningen for LangChain- og LlamaIndex-oppsettmonstre.

Fiks CVE-2025-68664 na

Hvis du kjorer LangChain under 0.3.22, oppdater na:

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

Etter patching, sjekk kjedekonfigene dine for injeksjonsrisiko. Her er tre trinn a ta.

Forst, valider hentede deler. Gjor dette for de nar LLM-en.

Fjern innhold som matcher injeksjonsmonstre som ignore previous instructions, system: eller <INST>.

For det andre, anonymiser for innbygging. Dette krymper angrepsflaten.

Hvis injeksjon skjer, er ikke de sensitive dataene der for a hentes ut.

For det tredje, begrens kjedetillatelser. LangChain-kjeder bor ikke lese miljovariabler utover det de trenger.

Bruk en tjenestekonto med minimal omfang.

Matematikken er enkel

CVSS-scoren er 9,3. Rettelsen er ett API-kall per dokument.

Kombinasjonen av CVE-2025-68664 og generell RAG-datarisiko er et reelt ansvar.

Losningen er klar: anonymiser ved innsamling, ikke ved sporretidspunkt.

Sjekk oversikt over sikkerhet og samsvar for bedrifts-RAG-krav.

Kilder

  • NVD CVE-2025-68664, CVSS 9,3, LangChain serialiseringssarbarhet
  • LangChain sikkerhetsadvarsel, langchain-ai/langchain GitHub, 2025
  • OWASP LLM Topp 10: LLM01 Prompt-injeksjon, LLM06 Avsloering av sensitiv informasjon
  • anonym.legal enhetstype-dokumentasjon — 285+ stottede enhetstyper

Klar til å beskytte dataene dine?

Begynn å anonymisere PII med 285+ enhetstyper på 48 språk.

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.