اكتشف باحث أمني قام بفحص 24 مشروعًا مفتوح المصدر لخوادم MCP (بروتوكول التحكم في النموذج) ثغرة واحدة ولكنها خطيرة من نوع "حقن الأوامر في بيئة معزولة" (sandbox command-injection)، حصلت على درجة 9.8 على مقياس CVSS. تكمن هذه الثغرة في AgenticX، وهو إطار عمل للوكلاء الذكيين (AI-agent framework) من الفئة المتوسطة، وتسمح للمهاجم بحقن أوامر shell عشوائية في حاوية Docker التي تشغل الخادم.
لماذا تُعد خوادم MCP مهمة
يُعد MCP بمثابة "الغراء" الذي يسمح للوكلاء الذكيين المستقلين بالتواصل مع الأدوات الخارجية، مثل الملفات وقواعد البيانات والمتصفحات وما شابه ذلك. يقوم المطورون بدمج خادم MCP في تطبيقاتهم لمنح النموذج اللغوي القدرة على القراءة والكتابة والتفاعل مع موارد العالم الحقيقي. البروتوكول نفسه خفيف الوزن ومعتمد على نطاق واسع، ولكن تقع مسؤولية تأمين الكود المحيط بكل مشروع على عاتق القائمين على صيانته.
تتلقى تطبيقات MCP واسعة النطاق مثل Cline أو Aider عمليات تدقيق منتظمة وتمتلك عمليات أمنية ناضجة. أما المشاريع الـ 24 التي تم فحصها هنا، فتقع ضمن الفئة "المتوسطة" على GitHub، حيث يتراوح عدد نجومها بين 100 و1,000 نجمة. غالبًا ما تعطي هذه المستودعات الأولوية للتسليم السريع للميزات على حساب الكود المحصن، مما يخلق نقطة عمياء للمستخدمين الذين يفترضون أن أي خادم MCP مفتوح المصدر هو آمن افتراضيًا.
عملية الفحص
قام الباحث ببناء ماسح ضوئي يبحث عن خمسة أنماط هجوم كلاسيكية لتطبيقات الويب:
- حقن الأوامر (Command injection)
- تجاوز المسار (Path traversal)
- تزوير الطلبات عبر الخادم (SSRF)
- حقن SQL (SQL injection)
- الهروب من البيئة المعزولة (Sandbox escape)
أدى تشغيل الماسح عبر 5,911 ملف مصدر إلى إصدار 94 تنبيهًا أوليًا. وبعد الفرز اليدوي، تبين أن تنبيهًا واحدًا فقط يمثل ثغرة أمنية حقيقية.
تفاصيل ثغرة AgenticX
يقوم AgenticX ببناء أوامر shell عن طريق دمج السلاسل النصية التي يوفرها المستخدم في Python f-strings، ثم يمرر النتيجة مباشرة إلى shell الخاص بالحاوية. لا تتم أي عملية تحقق أو وضع علامات اقتباس لمسارات الملفات. وبناءً على ذلك، يمكن لمطالبة (prompt) عدائية أن تحقن فاصلة منقوطة (semicolon) أو أي رمز shell آخر، مما يتسبب في تنفيذ الحاوية لأي أمر يختاره المهاجم.
قام الباحث بإصلاح الكود من خلال:
- استخدام
shlex.quote()للهروب الآمن من أي مسار يوفره النموذج اللغوي. - إضافة عمليات تحقق صريحة لأنماط تجاوز المسار (
../) قبل بناء الأمر.
أظهرت إعادة تشغيل الماسح بعد الإصلاح انخفاضًا كبيرًا في مستوى المخاطر، مما أكد أن المعالجة عالجت السبب الجذري.
من الرابح ومن الخاسر
- مطوروا الذكاء الاصطناعي الذين يدمجون خادم MCP في منتجاتهم لديهم الآن مثال ملموس على كيف يمكن لخطوة واحدة مفقودة في تنقية البيانات (sanitization) أن تكسر سلسلة أمنية كاملة. تعامل مع كل معامل (parameter) يأتي من نموذج لغوي كمدخلات غير موثوقة، تمامًا كما تفعل مع أي حمولة (payload) من واجهة برمجة تطبيقات (API) خارجية.
الجانب الآخر من القصة
يشدد الباحث على أن بروتوكول MCP نفسه لا يزال سليمًا. فالثغرة ليست ضعفًا في التصميم الخاص بتنسيق البيانات (wire format)، بل هي سهو برمجي في تنفيذ محدد. لقد عالجت المشاريع الأكبر والأكثر خضوعًا للتدقيق مشكلات مماثلة بالفعل، ويمكن لمجتمع المصادر المفتوحة التعلم من إصلاح AgenticX. ومع ذلك، تظهر الحادثة أن المشاريع "المتوسطة" يمكن أن تنطوي على ثغرات عالية التأثير رغم عدد نجومها المتواضع.
الخلاصة
أدت سلسلة f-string واحدة غير مفحوصة في AgenticX إلى تحويل خادم MCP بالكامل إلى منصة لتنفيذ أكواد عشوائية. تثبت هذه الواقعة أن أمن أنظمة الوكلاء الذكيين يعتمد بشكل أقل على البروتوكول وبشكل أكبر على التنفيذ المنضبط. يجب على المطورين التعامل مع كل معامل يتم إنشاؤه بواسطة LLM كمدخل عدائي، ويجب على المنصات فرض ضمانات وقت التشغيل (runtime safeguards)، كما تحتاج الأدوات الأمنية إلى التطور لفهم سلاسل الثقة الفريدة التي ينشئها الوكلاء الذكيون.
المصدر: dev.to/easterndev/i-scanned-24-mcp-server-projects-and-found-a-real-sandbox-command-injection-cvss-98-4k9h
