العودة إلى المدونةتقني

LangChain CVE-2025-68664: كيف تتسرب البيانات الشخصية عبر مسار RAG الخاص بك

CVSS 9.3. تكشف دوال التسلسل في LangChain متغيرات البيئة والأسرار لنماذج اللغة الكبيرة التي يتحكم فيها المهاجمون. كيفية اكتشاف تسربات البيانات الشخصية وإصلاحها.

March 16, 20268 دقيقة قراءة
LangChainRAG pipelineCVEPII leakagedeveloper securityAPI keysLLM security

LangChain CVE-2025-68664: كيف تتسرب البيانات الشخصية عبر مسار RAG الخاص بك

محدَّث لعام 2026.

aكتُشفت ثغرة أمنية حرجة في LangChain في أواخر عام 2025. رمز CVE هو CVE-2025-68664. درجة CVSS هي 9.3 (حرجة).

تستهدف الثغرة كود التسلسل في LangChain.

ما الذي يفعله CVE-2025-68664؟

تمتلك LangChain دالتَي تسلسل: dumps() وdumpd(). تحوّلان كائنات Python إلى نص.

الثغرة في معالجة الإغلاق (closure).

عندما تُسلسِل LangChain عنصراً قابلاً للاستدعاء، تلتقط سياق الإغلاق.

يمكن للمهاجم الذي يتحكم في استجابة نموذج اللغة الكبير تشغيل dumps(). ثم تقرأ الدالة متغيرات البيئة من عملية Python.

النتيجة كشف بيانات. مفاتيح API وسلاسل قواعد البيانات وأسرار JWT وبيانات اعتماد AWS يمكن أن تظهر في مخرجات النموذج.

مهاجم يحقن نصاً في مستند مصدر RAG يمكنه قراءة أسرار الإنتاج الخاصة بك.

الإصدارات المتأثرة: LangChain أقل من 0.3.22 (Python). الإصدار 0.3.22 يحتوي على الإصلاح.

تُظهر بيانات PyPI الاستخدام الواسع للإصدارات الأقدم حتى مارس 2026.

كيف تتسرب البيانات الشخصية في مسارات RAG

CVE-2025-68664 حالة مثيرة للاهتمام. لكنها مجرد حالة واحدة لمشكلة أشمل.

تتسرب البيانات عبر مسارات RAG بشكل روتيني. لا يحتاج الأمر لمهاجم.

إليك إعداد RAG نموذجي في المؤسسات.

أولاً، الاستيعاب. تُفهرِس وثائق الشركة في مخزن متجهات. تخيّل تذاكر الدعم ورسائل العملاء والعقود وسجلات الموارد البشرية.

من أشهر مخازن المتجهات: Pinecone وWeaviate وpgvector.

ثم الاسترداد. يطرح المستخدم سؤالاً. يسحب النظام الخمسة مقاطع الأكثر صلة من المخزن.

ثم التوليد. تذهب تلك المقاطع إلى نموذج لغة كبير — GPT-4o أو Claude أو Gemini — كسياق.

الخطوة الثانية هي المشكلة. المقاطع المستردة تحتوي على ما احتوته المستندات المصدر. يشمل ذلك:

  • أسماء العملاء وعناوين بريدهم الإلكتروني وأرقام هواتفهم
  • قيم العقود وأرقام الحسابات والمعرفات الضريبية
  • بيانات رواتب الموظفين وملاحظات مراجعات الأداء
  • أسماء المرضى في الملاحظات السريرية
  • أرقام الهوية الوطنية في ملفات الهجرة

تذهب هذه البيانات إلى نموذج اللغة الكبير كما هي. يمكن أن تظهر في مخرجات النموذج.

تُسجَّل من قِبل مزود نموذج اللغة الكبير. تجلس في سجل محادثاتك. تتدفق إلى منظومة المراقبة لديك.

لا هجوم مطلوب. هكذا يعمل RAG بتصميمه. التصميم يخلق خطراً حقيقياً على الخصوصية.

68 نمطاً للأسرار في مخازن وثائق المؤسسات

تتتبع أدوات الأمان 68 نمطاً معروفاً للأسرار. تظهر في مخازن الوثائق أكثر مما تتوقع الفرق.

إليك الأكثر شيوعاً:

  • معرفات مفتاح الوصول لـ AWS (‎AKIA...‎)
  • مفاتيح OpenAI API (‎sk-...‎)
  • مفاتيح Anthropic API (‎sk-ant-...‎)
  • عناوين URI لقواعد البيانات (‎postgresql://user:password@host/db‎)
  • رموز JWT (رؤوس مشفرة بـ base64)
  • رموز الوصول الشخصية لـ GitHub
  • المفاتيح السرية لـ Stripe (‎sk_live_...‎)
  • مفاتيح SendGrid API
  • معرفات حساب Twilio ورموز المصادقة
  • كتل PEM للمفاتيح الخاصة

قد تحتوي تذكرة دعم على مفتاح API للعميل من جلسة تصحيح أخطاء.

قد يتضمن عقد بيانات اعتماد قاعدة بيانات من تسليم تقني.

ملف إعداد مُفهرَس بالخطأ يمكنه كشف مخزن أسرار بأكمله.

عندما تدخل هذه الملفات مخزن المتجهات دون تنقية، يمكن لكل استعلام إرسال الأسرار إلى نموذج اللغة الكبير.

قد تصل إلى المستخدم النهائي أيضاً.

الإصلاح: إخفاء الهوية قبل التضمين

النهج الصحيح يُخفي هوية الوثائق قبل التقسيم والتضمين.

هذه الخطوة مطلوبة لأي نظام يتعامل مع بيانات العملاء.

إليك مثال بـ Python باستخدام 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]:
    """إخفاء هوية البيانات الشخصية قبل التضمين."""
    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 بوثائق نظيفة فقط."""
    anonymized_docs = []
    for doc in documents:
        clean_text, entities = anonymize_before_embedding(doc)
        anonymized_docs.append(clean_text)
        print(f"تمت إزالة {len(entities)} كيانات PII من الوثيقة")
    vectorstore.add_texts(anonymized_docs)

تغطي anonym.legal API أكثر من 285 نوعاً من الكيانات. تُكتشف الأسماء والبريد الإلكتروني وأرقام الهاتف والمعرفات الوطنية ومفاتيح API وعناوين URI لقواعد البيانات.

لا شيء حساس يصل إلى مخزن المتجهات. إذن لا شيء حساس يمكن أن يتسرب إلى المستخدمين.

راجع دليل المطورين للاطلاع على أنماط الإعداد مع LangChain وLlamaIndex.

إصلاح CVE-2025-68664 الآن

إذا كنت تشغّل LangChain أقل من 0.3.22، حدّث الآن:

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

بعد التصحيح، تحقق من إعدادات سلاسلك بحثاً عن خطر الحقن. إليك ثلاث خطوات.

أولاً، تحقق من المقاطع المستردة. افعل ذلك قبل وصولها إلى نموذج اللغة الكبير.

جرِّد المحتوى المطابق لأنماط الحقن مثل ignore previous instructions أو system: أو <INST>.

ثانياً، أخفِ الهوية قبل التضمين. هذا يُقلّص سطح الهجوم.

إذا وقع الحقن، البيانات الحساسة ليست موجودة للاستخراج.

ثالثاً، قيِّد صلاحيات السلسلة. لا ينبغي لسلاسل LangChain قراءة متغيرات البيئة إلا في حدود ما تحتاجه.

استخدم حساب خدمة بصلاحيات محدودة.

الحساب بسيط

درجة CVSS هي 9.3. الإصلاح هو استدعاء API واحد لكل وثيقة.

مجموع CVE-2025-68664 وخطر بيانات RAG العام يمثل مسؤولية حقيقية.

الحل واضح: أخفِ الهوية عند الاستيعاب، لا عند الاستعلام.

تحقق من نظرة عامة على الأمان والامتثال لمتطلبات RAG على مستوى المؤسسة.

المصادر

  • NVD CVE-2025-68664، CVSS 9.3، ثغرة تسلسل LangChain
  • تحذير أمني من LangChain، langchain-ai/langchain على GitHub، 2025
  • OWASP LLM Top 10: LLM01 حقن الأوامر، LLM06 الكشف عن معلومات حساسة
  • وثائق أنواع الكيانات في anonym.legal — أكثر من 285 نوعاً مدعوماً

هل أنت مستعد لحماية بياناتك؟

ابدأ بإخفاء المعلومات الشخصية مع أكثر من 285 نوع كيان عبر 48 لغة.

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.