بازگشت به وبلاگفنی

LangChain CVE-2025-68664: چگونه اطلاعات شخصی از Pipeline RAG شما نشت می‌کند

CVSS 9.3. توابع سریال‌سازی LangChain متغیرهای محیطی و رمزها را در معرض LLM‌های کنترل‌شده توسط مهاجم قرار می‌دهند. چگونه نشت‌های اطلاعات شخصی را شناسایی و رفع کنیم.

March 16, 20268 دقیقه مطالعه
LangChainRAG pipelineCVEPII leakagedeveloper securityAPI keysLLM security

LangChain CVE-2025-68664: چگونه اطلاعات شخصی از Pipeline RAG شما نشت می‌کند

به‌روزشده برای ۲۰۲۶.

یک نقص حیاتی در اواخر ۲۰۲۵ در LangChain پیدا شد. CVE آن CVE-2025-68664 است. امتیاز CVSS آن 9.3 (حیاتی) است.

کد سریال‌سازی LangChain را هدف قرار می‌دهد.

CVE-2025-68664 چه می‌کند

LangChain دو تابع سریال‌سازی دارد: `dumps()` و `dumpd()`. آن‌ها اشیاء Python را به متن تبدیل می‌کنند.

نقص در مدیریت closure است.

وقتی LangChain یک callable را سریال‌سازی می‌کند، context closure را می‌گیرد.

مهاجمی که پاسخ LLM را کنترل می‌کند می‌تواند `dumps()` را فعال کند. سپس تابع متغیرهای محیطی را از فرآیند Python می‌خواند.

نتیجه افشای داده است. کلیدهای API، رشته‌های پایگاه داده، رمزهای JWT، و اعتبارنامه‌های AWS می‌توانند در خروجی مدل ظاهر شوند.

مهاجمی که متن را در یک سند منبع RAG تزریق می‌کند می‌تواند رمزهای تولید شما را بخواند.

نسخه‌های آسیب‌پذیر: LangChain زیر 0.3.22 (Python). نسخه 0.3.22 رفع شده است.

داده‌های PyPI نشان می‌دهد استفاده گسترده از نسخه‌های قدیمی تا مارس ۲۰۲۶ ادامه داشت.

چگونه اطلاعات شخصی در Pipeline‌های RAG نشت می‌کند

CVE-2025-68664 چشمگیر است. اما تنها یک مورد از یک مشکل گسترده‌تر است.

داده‌ها به طور معمول از pipeline‌های RAG نشت می‌کنند. هیچ مهاجمی نیاز نیست.

اینجا یک تنظیم RAG سازمانی استاندارد است.

اول، جذب. اسناد شرکت را در یک ذخیره برداری ایندکس می‌کنید. به تیکت‌های پشتیبانی، ایمیل‌های مشتری، قراردادها، و رکوردهای HR فکر کنید.

ذخیره‌های برداری رایج Pinecone، Weaviate، و pgvector هستند.

بعد، بازیابی. کاربر سوالی می‌پرسد. سیستم پنج chunk مرتبط‌ترین را از ذخیره بازیابی می‌کند.

سپس، تولید. آن chunk‌ها به عنوان context به یک LLM — GPT-4o، Claude، یا Gemini — می‌روند.

مرحله دوم مشکل است. chunk‌های بازیابی‌شده هر آنچه اسناد منبع داشتند را نگه می‌دارند. این شامل:

  • نام مشتریان، آدرس‌های ایمیل، و شماره‌های تلفن
  • ارزش‌های قرارداد، شماره‌های حساب، و شناسه‌های مالیاتی
  • داده‌های حقوق کارمندان و یادداشت‌های ارزیابی عملکرد
  • نام بیماران در یادداشت‌های بالینی
  • شماره‌های هویت ملی در پرونده‌های مهاجرت

آن داده‌ها به همان شکل به LLM می‌روند. می‌توانند در خروجی مدل ظاهر شوند.

توسط ارائه‌دهنده LLM لاگ می‌شوند. در تاریخچه مکالمه شما قرار می‌گیرند. به stack مشاهده‌پذیری شما جریان می‌یابند.

هیچ حمله‌ای نیاز نیست. این نحوه کار RAG بر اساس طراحی است. طراحی خطر حریم خصوصی واقعی ایجاد می‌کند.

۶۸ الگوی رمز در ذخیره‌های اسناد سازمانی

ابزارهای امنیتی ۶۸ الگوی رمز شناخته‌شده را ردیابی می‌کنند. بیشتر از آنچه تیم‌ها انتظار دارند ظاهر می‌شوند.

رایج‌ترین‌ها اینجا هستند:

  • شناسه‌های کلید دسترسی AWS (`AKIA...`)
  • کلیدهای OpenAI API (`sk-...`)
  • کلیدهای Anthropic API (`sk-ant-...`)
  • URI‌های پایگاه داده (`postgresql://user:password@host/db`)
  • توکن‌های JWT (header‌های کدگذاری‌شده با base64)
  • توکن‌های دسترسی شخصی GitHub
  • کلیدهای مخفی Stripe (`sk_live_...`)
  • کلیدهای SendGrid API
  • SID‌های حساب Twilio و توکن‌های احراز هویت
  • بلوک‌های PEM کلید خصوصی

یک تیکت پشتیبانی ممکن است یک کلید API مشتری از یک جلسه دیباگ داشته باشد.

یک قرارداد ممکن است اعتبارنامه‌های پایگاه داده از یک تحویل فنی داشته باشد.

یک فایل پیکربندی که به اشتباه ایندکس شده می‌تواند یک کل ذخیره رمز را افشا کند.

وقتی این فایل‌ها بدون پاک‌سازی وارد یک ذخیره برداری می‌شوند، هر کوئری می‌تواند رمزها را به LLM منتقل کند.

ممکن است به کاربر نهایی هم برسند.

رفع مشکل: ناشناس‌سازی قبل از embedding

رویکرد صحیح اسناد را قبل از chunk و embedding ناشناس می‌کند.

این مرحله برای هر سیستمی که داده‌های مشتری را مدیریت می‌کند الزامی است.

اینجا یک مثال Python با استفاده از anonym.legal API است:

```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]: """Anonymize PII before embedding.""" 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): """Build a RAG index with clean documents only.""" anonymized_docs = [] for doc in documents: clean_text, entities = anonymize_before_embedding(doc) anonymized_docs.append(clean_text) print(f"Removed {len(entities)} PII entities from document") vectorstore.add_texts(anonymized_docs) ```

anonym.legal API بیش از ۲۸۵ نوع موجودیت را پوشش می‌دهد. نام‌ها، ایمیل‌ها، شماره‌های تلفن، شناسه‌های ملی، کلیدهای API، و URI‌های پایگاه داده همه گرفته می‌شوند.

هیچ چیز حساسی به ذخیره برداری نمی‌رسد. پس هیچ چیز حساسی نمی‌تواند به کاربران نشت کند.

برای الگوهای تنظیم LangChain و LlamaIndex، راهنمای توسعه‌دهنده را ببینید.

CVE-2025-68664 را همین الان رفع کنید

اگر LangChain زیر 0.3.22 اجرا می‌کنید، همین الان به‌روز کنید:

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

بعد از پچ، تنظیمات chain خود را برای خطر تزریق بررسی کنید. اینجا سه مرحله وجود دارد.

اول، chunk‌های بازیابی‌شده را اعتبارسنجی کنید. این را قبل از رسیدن به LLM انجام دهید.

محتوایی را که با الگوهای تزریق مطابقت دارد، مانند `ignore previous instructions`، `system:`، یا `<INST>` پاک کنید.

دوم، قبل از embedding ناشناس‌سازی کنید. این سطح حمله را کاهش می‌دهد.

اگر تزریق اتفاق بیفتد، داده‌های حساس دیگر برای استخراج وجود ندارند.

سوم، دسترسی‌های chain را محدود کنید. Chain‌های LangChain نباید متغیرهای محیطی فراتر از آنچه نیاز دارند بخوانند.

از یک حساب سرویس با حداقل دسترسی استفاده کنید.

ریاضیات ساده است

امتیاز CVSS 9.3 است. رفع مشکل یک فراخوانی API برای هر سند است.

ترکیب CVE-2025-68664 و خطر کلی داده RAG یک مسئولیت واقعی است.

راه‌حل روشن است: در زمان جذب ناشناس‌سازی کنید، نه در زمان کوئری.

برای الزامات RAG سازمانی، مرور امنیت و انطباق را بررسی کنید.

منابع

  • NVD CVE-2025-68664، CVSS 9.3، آسیب‌پذیری سریال‌سازی LangChain
  • مشاوره امنیتی LangChain، langchain-ai/langchain GitHub، ۲۰۲۵
  • OWASP LLM Top 10: LLM01 Prompt Injection، LLM06 Sensitive Information Disclosure
  • مستندات نوع موجودیت anonym.legal — بیش از ۲۸۵ نوع موجودیت پشتیبانی‌شده

آماده‌اید داده‌های خود را محافظت کنید؟

شروع به ناشناس‌سازی PII با بیش از ۲۸۵ نوع نهاد در ۴۸ زبان.

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.