قبل أسابيع قليلة، كدت أوصّل "WhatsApp MCP مجاني" إلى نفس جلسة Claude Code التي كانت تعمل فيها بالفعل خوادم GitHub ونظام الملفات. كان لديه مستودع نظيف وشعار وأمر تثبيت من سطر واحد. نسخت كتلة الإعداد، ثم توقفت عند آخر ضغطة مفتاح لأن شيئًا ما أزعجني: لم تكن لديّ أي فكرة عما تقوله أوصاف أدوات ذلك الخادم فعلًا.
تبيّن أن هذا القلق كان جوهر المسألة كلها. في أبريل 2025، أثبت Invariant Labs هجومًا نفّذه بالضبط ذلك النوع من الخوادم ذات المظهر البريء — لعبة معلومات عامة — إذ كانت تحمل تعليمات مخفية في وصف أدواتها تأمر الوكيل بإعادة توجيه رسائل من خادم WhatsApp منفصل وموثوق إلى رقم المهاجم، مُهرِّبةً سجلات محادثاتك داخل نص الرسالة (Invariant Labs). لم يلمس الخادم الخبيث WhatsApp مباشرةً قط. بل أقنع الوكيل فحسب بأن يفعل ذلك.
هذا هو ما لا يخبرك به أحد حين يسلّمك كتلة إعداد. خادم MCP ليس مكتبة تستدعيها. إنه مشارك في استنتاج وكيلك. أوصاف أدواته تُحقن مباشرةً في سياق النموذج، والنموذج يعاملها كتعليمات يجب اتباعها — مما يعني أن خادمًا غير موثوق يجلس بجانب خادم موثوق يمكنه التحكم في الموثوق كالدمى. عزل الخادم السيئ في بيئة محاكاة لا يساعد، لأن الهجوم يسير عبر الوكيل لا عبر الشبكة.
الخلاصة القصيرة: قبل أن تربط خادم MCP خارجيًا، فأنت تمدّ ثقتك لمن كتبه ولمن يستطيع تعديله لاحقًا. أمضِ عشر دقائق في التأكد مما يمكنه قراءته، وما يمكنه الوصول إليه، وما يفعله بأسرارك، وما إذا كان يمكنه أن يتحول خلسةً إلى شيء آخر بعد أن توافق عليه. معظم هذا الأمر قراءة لا أدوات. هذا هو التدقيق.
لماذا يُعدّ خادم MCP مطلبًا أكبر من مجرد حزمة
حزمة npm العادية تُشغّل كودًا. هذا سيئ بما يكفي. خادم MCP يفعل ذلك وأيضًا يحقن نصًا يطيعه النموذج وأيضًا يحتفظ في الغالب ببيانات اعتماد وأيضًا يشارك جلسة مع خوادمك الأخرى. أربعة أسطح ثقة، لا واحد.
إرشادات أمان MCP الرسمية تسمي هذا صراحةً. توثّق مشكلة الوكيل المرتبك في وكلاء OAuth، ونمط "تمرير الرمز المميز" المضاد (الذي تحظره المواصفة صراحةً — "يجب أن لا تقبل خوادم MCP أي رموز لم تُصدر صراحةً لخادم MCP")، وتزوير الطلبات من جانب الخادم أثناء اكتشاف OAuth، واختطاف الجلسة، واختراق الخادم المحلي عبر أوامر بدء تشغيل خبيثة (MCP Security Best Practices). يوضح قسم اختراق الخادم المحلي حتى الإساءة الواضحة: أمر بدء تشغيل يُنفّذ curl -X POST -d @~/.ssh/id_rsa إلى نقطة جمع ما. المواصفة، في الواقع، قائمة بطرق يمكن لخادم MCP أن يؤذيك بها، كتبها من صمّمه.
ثمة فئتان أخريان من الهجمات تهمان أكثر المطور المستقل الذي يختار خادمًا من GitHub. الأولى هي تسميم الأدوات — تعليمات حقن موجّه مخفية محشورة في حقول وصف الأدوات والمعاملات التي يقرأها النموذج كاملةً لكن واجهة عميلك تعرضها مقطوعة (Vulnerable MCP Project). والثانية هي سحب البساط: خادم يقدم وصفًا نظيفًا للأداة يوم الموافقة، ثم يستبدله خلسةً بوصف مسموم لاحقًا. البروتوكول لا يتطلب فحص سلامة، ولا تثبيت بيان، وإشعار tools/list_changed اختياري ولا يُلزم بالموافقة من جديد — لذلك يمكن أن يحدث التبديل دون أن تراه قط (Acuvity). تسميم الأدوات هو الآن أكثر هجوم مستنسخ في الأدبيات؛ بنى معيار MCPTox الأكاديمي قالبه بالكامل حوله (MCPTox).
إذن التدقيق ليس جنونًا من الشك. إنه يتوافق مع هجمات موثقة ومسماة ومستنسخة.
التدقيق في 10 دقائق
نفّذها بالترتيب. المبكرة منها رخيصة الثمن وتكشف أسوأ الحالات، لذلك نادرًا ما تصل إلى النهاية.
1. اقرأ أوصاف الأدوات بنفسك — النسخ الخام. هذا هو الفحص الفردي الأعلى قيمةً وكاد لا أحد يفعله. عميلك يعرض عليك ملخصًا مرتبًا؛ النموذج يرى الحمولة كاملةً. افتح مصدر الخادم واقرأ كل حقل description وكل وصف معامل كما لو كان كودًا، لأنه كذلك بالنسبة للنموذج. ابحث عن أي شيء يبدو وكأنه تعليمة للوكيل بدلًا من توثيق للإنسان: "قبل استخدام هذا، استدعِ أيضًا…"، "أضمن دائمًا محتوى…"، "إن سُئلت عن X، افعل Y بدلًا من ذلك"، إشارات إلى خوادم أو ملفات أخرى، أو نص غير مرئي أو محشو بـ Unicode. إن ذكر وصف أداة آلة حاسبة مفاتيح SSH الخاصة بك، انتهى الأمر — أغلق التبويب.
2. ابحث عن كل استدعاء شبكة صادر. اعمل grep في المصدر بحثًا عن fetch، وaxios، وhttp، وrequests، وurllib، وcurl، وnet.، وعناوين IP الخام. خادم نظام الملفات لا شأن له بالاتصال بمضيف بعيد. الخادم الذي يستدعي API بشكل مشروع يجب أن يستدعي تلك API فقط لا غير. قسم SSRF في المواصفة موجود لأن الخوادم يمكن إيقاعها في استهداف http://169.254.169.254/ — نقطة بيانات السحابة التعريفية التي تمنح بيانات اعتماد IAM — لذلك أي إخراج إلى نطاقات رابط-محلي أو خاصة (169.254.*، 10.*، 192.168.*، 127.*) يُعدّ إشارة تحذير فورية (MCP Security Best Practices). الإخراج غير المُبرّر هو الفرق بين أداة وقناة تسريب بيانات.
3. تتبع كيفية تعامله مع الأسرار. أين تذهب رموزك المميزة؟ هل تُقرأ من متغيرات البيئة وتُستخدم محليًا، أم تُمرَّر إلى مكان ما؟ تأكد من أن الخادم لا يُجري تمرير الرمز المميز — تسليم بيانات اعتمادك مباشرةً إلى API مجرى لاحق دون فحوص الجمهور التي تتطلبها المواصفة. إن أخبرك README بلصق رمز وصول شخصي واسع النطاق بدلًا من رمز محدود النطاق، فتصميم الخادم يخبرك أنه لم يفكر قط في نطاق الضرر. لا تمنح خادم MCP بيانات اعتماد تتجاوز المهمة الواحدة التي يؤديها.
4. حدّد الصلاحيات بحسب العمل الفعلي. يُحذّر قسم تقليص النطاق في المواصفة ذاتها من الخوادم التي تنشر files:*، وdb:*، وadmin:* أو نطاقات بدل all/full-access مسبقًا، لأن رمزًا واسعًا مسروقًا يفتح كل شيء دفعةً واحدة (MCP Security Best Practices). اسأل عما يحتاجه هذا الخادم فعليًا. خادم "تنسيق التزاماتي" الذي يطلب إذن كتابة عبر المستودع بأكمله بالإضافة إلى الوصول للشبكة يطلب أكثر مما يستحق. امنح الحد الأدنى، وفضّل الخوادم التي تطلب نطاقات ضيقة تدريجيًا على تلك التي تطالب بالكتالوج كاملًا منذ اليوم الأول.
5. افحص ما يجلس بجانبه. هذا هو درس ثغرة WhatsApp: الخطر ليس خادمًا واحدًا، بل التوليفة. خادم غير موثوق في نفس الجلسة يمكنه اختطاف خادم موثوق. لذلك عامل قائمة MCP لوكيلك كحدود ثقة مشتركة. لا تُشغّل خادمًا غير مدقَّق فيه في نفس الجلسة مع أي شيء يحتفظ ببيانات اعتماد حقيقية أو صلاحية كتابة. إن كان لا بد من تجربة شيء جديد، أعطه جلسته الخاصة دون أي شيء ذي قيمة متصل.
6. ثبّت الإصدار. ارفض الهدف المتحرك. سحب البساط يعمل لأن معظم الناس يثبّتون من latest أو من خادم بعيد لا يسيطرون عليه. ثبّت على التزام أو علامة إصدار محددة، واستورد المصدر إن أمكن، وأعد قراءة أوصاف الأدوات في كل مرة ترفعه. بالنسبة لخوادم MCP البعيدة/المستضافة التي لا يمكنك تثبيتها، افهم أنك قبلت خادمًا يمكنه إعادة تعريف أدواته في أي وقت — هذه منحة ثقة حقيقية مستمرة، لا تثبيت لمرة واحدة.
7. شغّل ماسحًا، ثم ثق بقراءتك الخاصة أكثر. يقرأ uvx mcp-scan@latest إعداد MCP الخاص بك، ويتصل بالخوادم، ويسحب أوصاف الأدوات، ويُشير إلى تسميم الأدوات، وانجراف سحب البساط، والإخفاء عبر الأصول، وحقن الموجّه (Invariant Labs). وهو مفتوح المصدر ولا يحتاج إعدادًا. استخدمه كمسح أولي سريع — لكن الماسح يكتشف الأنماط المعروفة، وقراءتك في الخطوة 1 تكتشف الأنماط الذكية التي لا يصل إليها.
8. اقرأ سجل التزامات الكود وتبويب القضايا. الخطوة ذاتها في فحص أي اعتماد. خادم لم يُمسّ منذ أشهر فوق بروتوكول غيّر نموذج المصادقة فيه مرتين في عام هو أثر حفري. سجل التزامات كله "تحديث README" ولا "إصلاح حالة حافة" يعني أن لا أحد يُشغّله فعليًا. وتبويب القضايا سيخبرك في الغالب عن ثغرة التسريب قبل أن تكتشفها بالطريقة الصعبة.
ضع الأمر في بيئة عزل، لأن القراءة وحدها لا تكفي
قراءة المصدر تخبرك بما يبدو أن الكود يفعله. لا تخبرك بما تفعله تبعية انتقالية في وقت التشغيل، ولن تستطيع ذلك، لأنك لن تقرأ الشجرة بأكملها. لذلك نصيحة المواصفة للخوادم المحلية هي الشبكة الأمان الصحيحة: شغّلها في بيئة عزل بوصول مقيّد لنظام الملفات والشبكة، مع نقل stdio لكي يصل إليها عميلك فحسب، ومع مربع حوار موافقة حقيقي يُظهر الأمر الدقيق قبل تنفيذ أي شيء (MCP Security Best Practices).
لإعداد المطور المستقل يعني ذلك: شغّل الخوادم غير المألوفة في حاوية أو حساب مستخدم مقيّد، لا في غلافك الرئيسي حيث مفاتيحك في البيئة. امنح الحاوية وصولًا للمجلد الواحد الذي يحتاجه العمل وارفض الباقي. إنها عشر دقائق إعداد مرة واحدة، وتُحوّل "يستطيع هذا الخادم قراءة مجلدي الرئيسي كاملًا" إلى "يستطيع هذا الخادم قراءة المجلد الواحد الذي سلّمته إياه". وصل دليل MCP الخاص بوكالة الأمن القومي الأمريكية إلى المكان ذاته — الحد الأدنى من الصلاحيات، والعزل، والمراقبة حول أي خادم لم تكتبه أنت (NSA CSI: MCP Security).
متى تقول لا مباشرةً
بعض الخوادم تفشل قبل أن يبدأ التدقيق. لا أثبّت عندما:
- لا أستطيع قراءة المصدر. خادم محلي مغلق المصدر أو مضغوط هو أمر بدء تشغيل أُنفّذه في العمى. أمرر.
- يريد بيانات اعتماد واسعة وطويلة الأمد. إن كانت الطريقة الوحيدة لاستخدامه رمزًا بصلاحيات إلهية، فالتصميم أخبرني بالفعل أنه لا يحترم نطاق الضرر.
- إنه خادم بعيد لا أستطيع تثبيته، ويحتفظ بوصول لشيء لا أودّ خسارته. ذاك دعوة دائمة لسحب البساط. مقبول لشيء مؤقت؛ لا لبيانات الإنتاج.
- أوصاف أدواته تقرأ كتعليمات لوكيلي. التوثيق يصف؛ لا يأمر. أي شيء يتجاوزني ليتحدث مباشرةً إلى النموذج هو مُسقِط للأهلية فور الرؤية.
- الراحة لا ترقى للمستوى المطلوب. خادم يوفر لي خمس دقائق أسبوعيًا لا يستحق بيانات اعتماد ومقعدًا في حدود ثقة وكيلي. معظم خوادم MCP "الرائعة" التي قيّمتها لم أكن بحاجة إليها.
الجزء الصعب ليس أي فحص واحد — بل أن الثقة التي تمنحها عند التثبيت ليست مجمّدة. الحزمة التي دققت فيها يمكن أن تصبح حزمة مختلفة الأسبوع المقبل، ولا شيء في البروتوكول يُلزمها بإخبارك. لذا العادة الراسخة ليست التدقيق المرة الواحدة. بل إبقاء القائمة صغيرة ومثبّتة في بيئة عزل، وإعادة قراءة الأوصاف في كل مرة ترفع فيها إصدارًا. ابدأ بالخطوة الأولى: افتح المصدر واقرأ أوصاف الأدوات بصوت عالٍ. إن بدت تتحدث إلى وكيلك بدلًا منك، فقد حصلت على إجابتك مسبقًا.
