حقن تبعيات صامت عبر خطوط توثيق الذكاء الاصطناعي. 240 تشغيل معزول لـ Docker يثبت أن خادم MCP الخالي من التعقيم في Context Hub يسمح للوثائق المسمومة باختراق مشاريع المطورين دون إنذار.
ثغرة عدم تعقيم في Context Hub (@aisuite/chub v0.1.3) تتيح حقن التبعيات الصامت من خلال خط أنابيب توثيق MCP.
المراجع: CWE-94 (حقن الكود) | CWE-829 (مجال تحكم غير موثوق) | CWE-345 (تحقق غير كافٍ من صحة البيانات) | OWASP LLM01 (حقن الأوامر)
قمنا بإنشاء مستندات مسمومة واقعية تحتوي على تبعيات مزيفة (plaid-link-verify, stripe-checkout-guard) وقدمناها من خلال خادم MCP محلي لـ chub داخل حاويات Docker معزولة. لم يتم تحميل أي محتوى مسموم إلى سجل Context Hub - قمنا بتشغيل chub build محليًا وقمنا بتكوين خادم MCP لتقديم المخرجات المُنشأة مسبقًا من القرص. من وجهة نظر الوكيل، التجربة مماثلة تمامًا لجلب المستندات من السجل المباشر.
عندما قامت مساعدات البرمجة AI بجلب المستندات، قام Haiku بكتابة الحزمة المزيفة بصمت في ملف requirements.txt في 100% من مرات التشغيل - دون أن يذكرها على الإطلاق في مخرجاته النصية. المطور الذي يقرأ رد المساعد لن يرى شيئًا مريبًا، لكن مشروعه أصبح مسمومًا.
240 تشغيلة معزولة. 3 نماذج. 4 مستويات جهد. 2 واجهات API. 0 تلوث.
يقوم الكود المُنشأ باستيراد التبعية المزيفة بصمت جنبًا إلى جنب مع الوحدات الشرعية:

يقوم الوكيل أيضًا بتعديل ملف CLAUDE.md لتضمين الحزمة المزيفة كـ "معيار مشروع":

يوضح هذان الجدولان نتائج Plaid Link (120 تشغيلة معزولة). راجع RESULTS.md للحصول على البيانات الكاملة بما في ذلك Stripe Checkout (إجمالي 240 تشغيلة).
| الجهد | Haiku | Sonnet | Opus |
|---|---|---|---|
| منخفض | 100% | 60% | 0% |
| متوسط | 100% | 70% | 0% |
| عالي | 100% | 40% | 0% |
| أقصى | 100% | 40% | 0% |
لم يحذر Haiku أبدًا من التبعية المزيفة (0/40). حذر Sonnet في 48% من مرات التشغيل (19/40) لكنه ما زال سمم ملف requirements.txt في 53% إجمالاً. حذر Opus في 75% من مرات التشغيل (30/40) ولم يسمم مطلقًا ملف requirements.txt أو الكود.
| الجهد | Haiku | Sonnet | Opus |
|---|---|---|---|
| منخفض | 90% | 70% | 0% |
| متوسط | 80% | 70% | 0% |
| عالي | 90% | 40% | 0% |
| أقصى | 90% | 50% | 0% |
يقوم Haiku بتعديل ملف CLAUDE.md الخاص بالمشروع ليشمل التبعية المزيفة كـ "معيار مشروع" في 88% من مرات التشغيل (35/40). يتم إيداع هذا الملف في git - كل مطور مستقبلي يستنسخ المستودع يرث التكوين المسموم.
flowchart LR
A["المهاجم\nيقدم طلب سحب"] -->|"لا يوجد تحقق\nمن الهوية"| B["المشرف\nيدمج طلب السحب"]
B -->|"لا يوجد تعقيم\nللمحتوى"| C["المستند على CDN\n(لا يوجد فحص سلامة)"]
C -->|"يخدم MCP\nالمحتوى الخام"| D["نافذة سياق\nالوكيل"]
D -->|"يتصرف الوكيل بناءً على\nمحتوى غير موثوق"| E["محطة عمل\nالمطور"]
style A fill:#111,stroke:#333,color:#f0f0f0
style B fill:#161616,stroke:#333,color:#888
style C fill:#161616,stroke:#333,color:#888
style D fill:#161616,stroke:#333,color:#888
style E fill:#111,stroke:#333,color:#f0f0f0
| المهاجم | أي شخص يمكنه تقديم طلب سحب إلى سجل مستندات Context Hub |
| سطح الهجوم | مستندات المجتمع المتدفقة من GitHub PR إلى CDN إلى MCP إلى سياق الوكيل |
| حد الثقة | محتوى مساهم غير موثوق يتم التعامل معه كتوثيق رسمي لواجهة API |
| الشرط المسبق | طلب سحب واحد مدمج يحتوي على مستند مسموم |
| التأثير | تنفيذ كود عشوائي عبر حقن التبعيات + خطافات ما بعد التثبيت الخاصة بـ pip |
تسميم Haiku صامت تمامًا. 0/80 تشغيلة Haiku عبر كلا واجهتي API ذكرت التبعية المزيفة في الرد. يقوم النموذج بالكتابة على القرص دون إخبار. حذر Sonnet في 48% من مرات التشغيل لكنه ما زال سمم ملف requirements.txt في 35-53% من مرات التشغيل. حذر Opus في 23-75% من مرات التشغيل ولم يسمم مطلقًا ملف requirements.txt أو الكود.
Haiku قابل للاستغلال بنسبة 100% في كل مستويات الجهد. مستقل عن الجهد على كلا واجهتي API. النموذج الأضعف في العائلة لا يكتشف التبعية المزيفة أبدًا.
Opus يقاوم تسميم الكود ولكن ليس تسميم التكوين. لم يكتب Opus التبعية المزيفة أبدًا إلى ملف requirements.txt أو كود Python (0/80 عبر كلا واجهتي API). ولكن في Stripe، قام Opus بتعديل ملف CLAUDE.md في 38% من مرات التشغيل، موثقًا التبعية التجريبية كاعتماد مشروع دون تثبيتها.
استمرار CLAUDE.md يخلق ناقل سلسلة توريد. يتم إيداع ملفات التكوين المعدلة في git، مما يسمم كل مطور يستنسخ المستودع وكل جلسة AI مستقبلية في هذا المشروع. يعمل هذا عبر جميع النماذج (Haiku 88-90%، Sonnet 58%، Opus 0-38%).
الإلمام بواجهات API مهم. Stripe (معروفة جيدًا): تكتشف النماذج الحزم المزيفة عبر بيانات التدريب. Plaid (أقل شهرة): لا تستطيع النماذج التحقق وتقبل التبعية المزيفة دون سؤال.
هذه مشكلة على مستوى الفئة. Context7 كان لديها ContextCrush (فبراير 2026). Context Hub لديها هذا. أي أداة تحقن محتوى خارجي غير معقم في سياق الوكيل تكون عرضة للهجوم.
لا يوجد تعقيم على الإطلاق عبر خط الأنابيب بأكمله:
annotations.js - writeFileSync مع محتوى خام، بدون تصفيةbuild.js - لا فحص للمحتوى، لا تطبيع لـ unicodecache.js - جلب من CDN مع عدم التحقق من التجزئة/التوقيعsource: official في المقدمة - مُعلن ذاتيًا، غير موثوقلا يوجد ملف SECURITY.md في Context Hub. لا توجد طريقة موثقة للإفصاح المسؤول عن ثغرة - لا جهة اتصال أمنية، ولا مفتاح PGP، ولا سياسة إفصاح. وجد أعضاء المجتمع الثغرات على أي حال وأبلغوا عنها كـ مسائل عادية وطلبات سحب. لم يتم مراجعة أي منها.

| التاريخ | الحدث |
|---|---|
| 2026-03-12 | المسألة رقم 74 قدمها @bjorkbjork أبلغت عن 4 ثغرات أمنية بما في ذلك سلامة CDN، والتحقق من المصدر المُعلن ذاتيًا، وحقن التعليقات التوضيحية |
| 2026-03-12 | تم تعيين المسألة رقم 74 داخليًا لعضو الفريق الأساسي - بدون متابعة |
| 2026-03-17 | طلب السحب رقم 125 قدمه @hobostay لإضافة التحقق من سلامة المحتوى - بدون مراجعات |
| 2026-03-12 إلى 03-20 | طلبات سحب أمنية إضافية (#69, #81) قدمها المجتمع - بدون مراجعات |
| 2026-03-20 إلى 03-23 | تدقيقنا المستقل يؤكد ويحدد كمية الثغرات باستخدام 240 تشغيلة Docker معزولة |
| 2026-03-23 | الإفصاح العام |