Bloga DönTeknik

LangChain CVE-2025-68664: KKB RAG Hattınızdan Nasıl Sızıyor

CVSS 9,3. LangChain'in serileştirme işlevleri ortam değişkenlerini ve sırları saldırgan kontrolündeki LLM'lere açığa çıkarıyor. KKB sızıntıları nasıl tespit edilip düzeltilir.

March 16, 20268 dk okuma
LangChainRAG pipelineCVEPII leakagedeveloper securityAPI keysLLM security

CVE-2025-68664: Ne Oldu

2025'in sonlarında güvenlik araştırmacıları, LangChain'in serileştirme işlevlerinde — özellikle `dumps()` ve `dumpd()`'de — kritik bir güvenlik açığı olan CVE-2025-68664'ü açıkladı. CVSS puanı 9,3 (Kritik).

Güvenlik açığı şu şekilde işliyor: LangChain'in serileştirme yöntemleri, Python nesnelerini kapatma bağlamlarını yakalayarak serileştiriyor. Saldırgan, bir LangChain zincirindeki LLM yanıtını kontrol ettiğinde — alınan bir belgedeki prompt enjeksiyonu, kötü niyetli bir araç sonucu veya zehirlenmiş bir vektör deposu girişi yoluyla — `dumps()`'ın Python sürecinin erişebildiği ortam değişkenlerini serileştirmesine neden olan yanıtlar üretebilir.

Sonuç: API anahtarları, veritabanı bağlantı dizeleri, JWT sırları ve AWS kimlik bilgileri LangChain zincirinin ortamına gömülü olarak modelin çıktısı aracılığıyla sızdırılabilir. RAG hattınızın kaynak belgelerine metin enjekte edebilen saldırgan, belirli zincir yapılandırmalarında prodüksiyon sırlarınızı okuyabilir.

Etkilenen sürümler: LangChain < 0.3.22 (Python). Düzeltme 0.3.22'de yayınlandı, ancak benimseme yavaş kaldı — pypi indirme verileri Mart 2026'ya kadar savunmasız sürümlerin önemli ölçüde kullanıldığını gösteriyor.

RAG Hatlarında KKB Nasıl Sızıyor — Genel Sorun

CVE-2025-68664, daha geniş, daha sessiz bir sorunun çarpıcı bir örneğidir: KKB, RAG hatlarından rutin olarak sızıyor, CVE ve saldırgan gerektirmeyen mekanizmalar aracılığıyla.

Typik bir kurumsal RAG kurulumunu ele alalım:

  1. Alım: Şirket belgelerinizi — destek biletleri, müşteri e-postaları, hukuki sözleşmeler, İK kayıtları — bir vektör veritabanına (Pinecone, Weaviate, pgvector) indeksliyorsunuz.
  2. Alıntı: Bir kullanıcı soru sorduğunda, sistem semantik açıdan en benzer 5 belge parçasını alıyor.
  3. Üretim: Bu parçalar bir LLM'ye (GPT-4o, Claude, Gemini) bağlam olarak iletiliyor ve yanıt üretiliyor.

Sorun 2. adımda. Alınan parçalar, orijinal belgelerinde ne varsa onu içeriyor:

  • Müşteri adları, e-posta adresleri, telefon numaraları
  • Sözleşme değerleri, hesap numaraları, vergi tanımlayıcıları
  • Çalışan maaş verileri, performans değerlendirme içeriği
  • Klinik notlardaki hasta adları (sağlık RAG'ı için)
  • Göç belgesi hatlarındaki ulusal kimlik numaraları

Bu KKB, bağlam penceresinde LLM'ye kelimesi kelimesine iletilir. Sorgu bunu tetiklerse modelin çıktısında görünür. LLM sağlayıcı tarafından günlüğe kaydedilir. LangChain konuşma geçmişinizde depolanır. Gözlemlenebilirlik platformunuza akar.

Bunların hiçbiri güvenlik açığı gerektirmiyor. Bu, bir RAG sisteminin amaçlanan davranışıdır — ve sistematik KKB maruziyeti yaratır.

68 Sır Deseni

RAG hatlarını izleyen güvenlik araçları, kurumsal belge depolarında sıklıkla görünen 68 bilinen sır desenini takip eder:

  • AWS Erişim Anahtarı Kimlikleri (`AKIA...`)
  • OpenAI API anahtarları (`sk-...`)
  • Anthropic API anahtarları (`sk-ant-...`)
  • Veritabanı bağlantı URI'leri (`postgresql://kullanıcı:parola@sunucu/db`)
  • JWT token'ları (base64 kodlu başlıklar)
  • GitHub Kişisel Erişim Token'ları
  • Stripe gizli anahtarları (`sk_live_...`)
  • SendGrid API anahtarları
  • Twilio hesap SID'leri ve kimlik doğrulama token'ları
  • Özel anahtar PEM blokları

Bu desenler, geliştiricilerin beklediğinden çok daha sık kurumsal belgelerde görünür. Bir destek bileti, hata ayıklarken müşterinin yapıştırdığı API anahtarını içerebilir. Bir sözleşme, teknik entegrasyon sırasında paylaşılan veritabanı kimlik bilgileri içerebilir. Yanlışlıkla indekslenen bir yapılandırma dosyası tüm sırlar deposunu açığa çıkarır.

Bu belgeler temizlenmeden bir vektör veritabanına indekslendiğinde, bunları alan her sorgu sırları LLM'ye iletir — ve potansiyel olarak sorguyu gönderen kullanıcıya.

Düzeltme: Gömme İşleminden Önce Anonimleştirin

KKB güvenli bir RAG hattı için doğru mimari, belgeler öbeklenmeden ve gömülmeden önce anonimleştirir. Bu, müşteri verilerini işleyen prodüksiyon sistemleri için isteğe bağlı değildir.

İşte anonym.legal API'sini kullanan bir Python uygulaması:

```python 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]: """ Gömme işleminden önce belge metnindeki KKB'yi anonimleştir. İsteğe bağlı anonimleştirme geri alımı için (anonymized_text, entity_map) döndürür. """ 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"}, # URL'leri koru — alıntılar için gerekli } }, headers={"Authorization": f"Bearer {ANONYM_API_KEY}"} ) result = response.json() return result["text"], result.get("items", [])

def build_rag_index(documents: list[str], vectorstore): """ KKB gömme işleminden önce anonimleştirilmiş şekilde RAG indeksi oluştur. """ anonymized_docs = [] for doc in documents: clean_text, entities = anonymize_before_embedding(doc) anonymized_docs.append(clean_text) # İsteğe bağlı olarak denetim izi için varlık sayısını günlüğe kaydet print(f"Belgeden {len(entities)} KKB varlığı kaldırıldı")

# Şimdi temiz belgeler gömülüyor — vektör deposuna KKB ulaşmıyor
vectorstore.add_texts(anonymized_docs)

```

anonym.legal API'si 285'ten fazla varlık türünü destekler. Kurumsal belge hatları için bu, isimler, e-postalar, telefon numaraları, ulusal kimlik numaraları, finansal tanımlayıcılar, API anahtarları (CRYPTO varlık türü aracılığıyla), veritabanı URI'leri ve 270'ten fazla ek desenin herhangi bir belge vektör deponuza ulaşmadan önce tespit edilip ayıklandığı anlamına gelir.

CVE-2025-68664'ü Özellikle Düzeltme

LangChain < 0.3.22 çalıştırıyorsanız hemen güncelleyin:

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

Yamalamadan sonra prompt enjeksiyonu riski için zincir yapılandırmalarınızı denetleyin:

  1. Alınan parçaları LLM'ye iletmeden önce doğrulayın — bilinen enjeksiyon desenlerini (`önceki talimatları yoksay`, `system:`, `<INST>`) eşleştiren içerikleri ayıklayın
  2. Alım hattınızda anonymize_before_embedding kullanın — enjeksiyon gerçekleşse bile, hassas veriler alınan parçalarda bulunmadığından saldırı yüzeyi azalır
  3. Zincir izinlerini kısıtlayın — LangChain zincirleri, ihtiyaç duydukları şeyin ötesinde ortam değişkenlerine erişememelidir. Minimum izinlere sahip özel bir hizmet hesabı kullanın.

CTA: Hattınızı Güvene Alın

Prodüksiyon RAG sistemleri oluşturan geliştiriciler için CVE-2025-68664 ve genel bağlam içi KKB riski kombinasyonu önemli bir sorumluluk oluşturuyor. Düzeltme mimariseldir: alımda değil sorgu zamanında anonimleştirin.

CVSS puanı 9,3. Düzeltme belge başına bir API çağrısı. Matematik basit.


Kaynaklar:

  • NVD CVE-2025-68664, CVSS 9,3, LangChain serileştirme güvenlik açığı
  • LangChain güvenlik danışmanlığı, langchain-ai/langchain GitHub, 2025
  • OWASP LLM İlk 10: LLM01 Prompt Enjeksiyonu, LLM06 Hassas Bilgi İfşası
  • anonym.legal varlık türü belgeleri — 285'ten fazla desteklenen varlık türü

Verilerinizi korumaya hazır mısınız?

48 dilde 285+ varlık türü ile PII anonimleştirmeye başlayın.

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.