رسم توضيحي تقني مجرد على خلفية زرقاء كحلية داكنة: مكعب خادم صغير الحجم على اليسار يُصدر ثلاث بطاقات مستطيلة صغيرة نحو عقدة وكيل على اليمين؛ البطاقتان الأولى والثانية باهتتان وخاملتان، والثالثة تُلقي ظلًا طويلًا على هيئة مفتاح. خيوط سماوية رفيعة تمتد من الخادم نحو شبكة غير منتظمة من عُقد المستودعات خلفه، وخط عنبري واحد يصل عقدة الوكيل بحلقة من أقراص بيانات الاعتماد الصغيرة. لا أشخاص، ولا شعارات، ولا نص. شعار OrcaRouter مُركَّب في الزاوية السفلية اليمنى.
AI Safety Incidents

Deadbugz: خادم MCP يتحوّل إلى عدائي عند استدعاء الأداة الثالث، وتم دفعه إلى 23 مستودعًا خلال 74 دقيقة

الكاتب

Magnus Corvin

تاريخ النشر

أحدث النماذج · 20عرض جميع النماذج →
المعايير: Artificial Analysis · يُحدَّث يوميًا
العودة إلى جميع المقالات

في 10 أغسطس 2026، فتح حساب GitHub واحد، zellkernel، 23 طلب سحب خلال 74 دقيقة ضد مستودعات غير ذات صلة للذكاء الاصطناعي وMCP وأدوات المطورين، كل منها يضيف خادم MCP باسم productivity-suite كان يعلن عن أداتين عاديتين، format_text وsummarize. وفقًا لـ Pillar Security، التي أطلقت على الحملة اسم Deadbugz ونشرت تقريرها في 12 أغسطس، أعاد الخادم نتائج صادقة في أول ثلاث استدعاءات ثم أعاد كتابة البيانات الوصفية التي سلّمها للوكيل: بدأت أوصاف الأدوات ومحتوى التوجيهات توجّه النموذج نحو مفاتيح SSH، بيانات اعتماد AWS، وسجل أوامر shell وإعدادات Kubernetes، وتطلب منه إخفاء ذلك النشاط عن المستخدم. أُغلقت تسعة عشر من طلبات السحب الـ23، وبقي أربعة مفتوحة ولم يُدمج أي منها عندما راجعتها Pillar. لم يتم تأكيد وجود أي ضحية. هذا سجل واحد، أبلغ عنه آخرون ويُستشهد به هنا بالرجوع إليهم. أما حوادث الوكلاء الموثقة الأخرى، ولكل منها مصادرها ودرجة خطورتها ودرجة ثقتها وعلامة النزاع، فتقع في أرشيف حوادث الذكاء الاصطناعي — لذا يمكن قراءة حملة سلسلة توريد تستهدف أدوات الوكلاء إلى جانب بقية ما حدث فعلًا.

يصنّف الأرشيف هذا السجل بدرجة خطورة عالية وثقة A — موثّق جيدًا، مع مصادر أولية متوافقة — بينما يسجّل بشكل منفصل عدم وجود ضرر حقيقي مؤكد. كلا الأمرين صحيحان في الوقت نفسه، والفجوة بينهما هي موضوع السجل: حملة وُثّق تصميمها بتفصيل غير معتاد قبل أن تُسفر عن ضحية يمكن لأي شخص تسميتها. التاريخان المهمان يفصل بينهما يومان. صدرت طلبات السحب في 10 أغسطس؛ ونشر Ariel Fogel من Pillar Security التحليل في 12 أغسطس، ويتضمّن المنشور ملاحظة دائمة مفادها أنه سيُحدّث كلما وصلت معلومات موثّقة.

ثلاثة استدعاءات، ثم تتغير البيانات الوصفية

لا يلزم أن يشغّل خادم MCP شيفرة على جهاز لتغيير ما يفعله وكيل. إذ تُسلّم تعريفات الأدوات إلى النموذج بوصفها سياقًا في كل جلسة، مما يعني أن الخادم الذي يوفّرها يمكنه إعادة كتابة التعليمات التي يقرأها الوكيل مع إبقاء اسم الأداة ومستودعها وبيانها كما هي تمامًا. وقد بُني Deadbugz على هذا التفاوت، ويسمّيه Pillar تسمّم بيانات تعريف MCP المقيّد بوقت التشغيل.

الآلية صغيرة بما يكفي لوصفها في جملة واحدة. يحتفظ الخادم بعدّاد في الذاكرة لكل عميل خاص بـ tools/call من الطلبات. بالنسبة للثلاثة الأولى، يتصرف كما ينبغي. وبمجرد تجاوز العداد، تصبح استجابات tools/list وprompts/get اللاحقة معدلة — أوصاف أدوات مختلفة، ومحتوى مطالبات مختلف — توجّه الوكيل إلى مفاتيح SSH وبيانات اعتماد AWS وسجل أوامر الصدفة وإعدادات Kubernetes وتأمره بإخفاء النشاط عن المستخدم. يحمل نص المطالبة المسموم العلامة deadbugz وعنوان بيتكوين.

البوابة هي أيضًا سببُ عدم اكتشاف الدفاعاتِ العادية لها. فالحمولة موجودة في المصدر منذ الطلب الأول؛ ولا يتغيّر شيء في الشيفرة أو الإعدادات عند لحظة التبديل. والفحص الساكن، أو مدخل SBOM، أو قراءة لمرة واحدة لبيان الأدوات عند التثبيت، لا يرى إلا أداة تنسيق، لأن هذا هو ما تُرجعه الأداة حتى يتحرّك العدّاد. وتصف Pillar هذا التبديل المؤجَّل بأنه تقنية تهريب بحثية، وتقول إن باحثيها تحقّقوا من العتبة ومن البيانات الوصفية المعدّلة معًا بإرسال طلبات نصية فقط إلى الخدمة البعيدة الحيّة ومطابقة الردود مع المصدر العام.

ثمة تفصيل واحد يجعل الفخ أوسع من جلسة واحدة. يُعلن الخادم عن tools.listChanged، وهي قدرة MCP التي تُخبر العميل بأن قائمة أدواته قد جرى تحديثها. والعميل الذي يستجيب لتلك الإشارة سيعيد قراءة التعريفات في منتصف الجلسة ويسحب النسخة المسمومة دون أي إجراء من المشغّل؛ أما العميل الذي يخزّن التعريفات مؤقتًا عند الموافقة فلن يفعل ذلك. وأي سلوك يظهره وكيل معيّن هو خاصية للعميل لا للخادم، ولا يعدّد تقرير Pillar العملاء بأسمائهم.

HTML card titled 'Three calls, then the metadata changes', kicked 'MCP · productivity-suite', with the subtitle 'The payload is present from the first request; the gate is a counter in memory'. Three columns. 'Calls one to three — benign' lists format_text returning formatted text, summarize returning a summary, and tools/list and prompts/get returning honest tool definitions, with a note that nothing on disk differs from what a reviewer approved. 'The gate' lists an in-memory per-client counter of tools/call requests, a threshold of three, altered tool descriptions and prompt content in later tools/list and prompts/get responses, and the advertised tools.listChanged capability that lets compliant clients re-read definitions mid-session. 'What the poisoned metadata asks for' lists SSH keys, AWS credentials, shell history and Kubernetes configuration, an instruction to keep the activity from the user, and the embedded marker deadbugz with a Bitcoin address. A footer reads 'Per Pillar Security's disclosure of 12 August 2026. Pillar says its researchers confirmed the threshold and the altered metadata against the live remote service using text-only requests, matching the public source.'

التسليم: 23 طلب سحب في 74 دقيقة

لم يكن هذا التوزيع حزمةً على سجل، ولا اعتمادًا مسمومًا مدفونًا في ملف قفل. كان عبارة عن طلبات سحب مزعجة تستهدف مشاريع لا علاقة لها بالوظيفة المفترضة للخادم، وهو الشكل الذي تتخذه محاولة منخفضة التكلفة في سلسلة التوريد حين لا يتمكن المهاجم من الحصول على حساب مسؤول صيانة: تقديم عدد كافٍ من تغييرات الإعدادات وانتظار دمج أحدها أو تطبيقه محليًا.

تفصيل Pillar للـ23 ثلاثي الأوجه. سبعة عشر منها تضيف نقطة نهاية MCP بعيدة، productivity-suite-mcp[.]onrender[.]com/mcp، مستضافة على Render؛ وأربعة تستدعي ملف Python محليًا مخفيًا في ~/.config/.cache/.sys/.deadbug-mcp.py؛ واثنان منها مُدخَلان إلى دليل أو قائمة، ويتعامل معهما التقرير باعتبارهما استطلاعًا أو حشوًا لا تسليمًا. تُعطى النافذة الزمنية على أنها من 9:52 مساءً إلى 11:07 مساءً بتوقيت UTC يوم 10 أغسطس 2026 — 74 دقيقة في صياغة الإفصاح، رغم أن الطابعين الزمنيين نفسيهما يمتدان 75، ولا شيء في السجل يتوقف على تلك الدقيقة. لا يُذكر بالاسم سوى مستودع هدف واحد: getsentry/sentry-mcp، طلب السحب #1239، مُستشهَدًا به كمثال على تسليم الأثر المحلي.

كان الحساب الذي يقف خلفه ذا ثقل كبير نسبيًا لعمره. عند جمع Pillar، كان لدى zellkernel 50 مستودعًا عامًا، 20 منها كانت نسخًا متفرعة، و21 من تلك الخمسين قد أُنشئت في 10 أغسطس، وهو اليوم نفسه الذي شُنت فيه الحملة. وكان الملف الشخصي مرتبطًا تبادليًا بحساب X @llmgod، الذي ارتبط بدوره بحساب GitHub، وهو نوع الربط التبادلي الذي يدل على هوية مبنية لغرض محدد بدلًا من هوية مخترقة.

تسعة عشر مغلقًا، وأربعة مفتوحة، وصفر مدمج هو الرقم الأكثر تكرارًا في السجل، وهو أيضًا الرقم الذي يُقرأ غالبًا على أنه إشارة أمان تامة، وهو ليس كذلك تمامًا. زر الدمج في GitHub ليس سجل تنفيذ للمضيف: إذ يمكن للمشرف سحب فرع وتشغيله، أو تطبيق إعداد يدويًا، أو يمكن لمهمة CI جلب رأس طلب سحب (PR) قبل أن يعلّق أي شخص. طلبات السحب الأربعة التي تكتب إعدادًا يستدعي مسار سكربت محلي هي التي تكون فيها هذه الفجوة أكثر أهمية، لأن السكربت يُجلب ويُشغّل خارج محاسبة الدمج في GitHub بالكامل. وقد قالت Cloud Security Alliance Labs النقطة نفسها في ملاحظتها بتاريخ 2 سبتمبر: لا يُثبت عدّا المغلق وغير المدمج أن شيئًا لم يُشغَّل.

HTML card titled 'Twenty-three pull requests in seventy-four minutes', kicked '10 August 2026 · delivery', subtitled 'Times UTC. Counts are Pillar Security's review snapshot.' Three columns. 'The window' lists the first pull request at 21:52, twenty-three pull requests to unrelated AI, MCP and developer-tooling repositories, the last at 23:07, and a note that the 74-minute framing spans 75 minutes on the clock. 'What each pull request added' lists seventeen adding the remote endpoint productivity-suite-mcp.onrender.com/mcp, four invoking the hidden file at ~/.config/.cache/.sys/.deadbug-mcp.py, two directory or listing submissions, and one named example, getsentry/sentry-mcp pull request 1239. 'At review' lists nineteen closed, four open, zero merged through GitHub's review, zero confirmed victims, and the account zellkernel linked to the X handle llmgod, with fifty public repositories and twenty-one created that day. A footer reads 'Per Pillar Security. Cloud Security Alliance Labs repeated the same figures on 30 August and 2 September 2026 without independent verification. As of 29 October 2026 the GitHub account and the productivity-suite-mcp repository both return 404.'

ما هو ثابت، وما هو غير ثابت

أُثبت ذلك بموجب الإفصاح، بمعنى أن Pillar يورده استنادًا إلى آثار قرأها، وفي حالة واحدة استنادًا إلى خدمة استعلمها: الخادم ومستودع مصدره، والأداتان المعلنتان، والعدّاد وعتبة الاستدعاءات الثلاثة، وأهداف بيانات الاعتماد الأربعة، وأعداد طلبات السحب (PR) وحالة دمجها وقت المراجعة، والصلة بين حساب GitHub ومعرّف X. ويُعدّ اختبار Pillar الخاص على نقطة النهاية الحيّة أقوى عنصر في القائمة، لأنه إعادة إنتاج لا مجرد قراءة للشيفرة المصدرية.

غير مُثبَت، والسجل يتحرّى الحذر في هذه المسألة: ضحية. فحقل real_harm في الأرشيف قيمته false، وهو تصريح عن الأدلة لا عن النية — إذ لم يُقدّم أحدٌ خادمًا ولا سجلًا ولا بيانات اعتماد مسروقة مرتبطة بهذه الحملة. كما أن الشخص أو الجماعة الواقفة خلف zellkernel و@llmgod لم تُحدَّد هويتها؛ وPillar ينسب العملية إلى الحسابات ويتوقف عند ذلك. والدافع المالي يستند إلى عنوان Bitcoin مُضمَّن في الحمولة، وهو استنتاج من مؤشر، لا نتيجة مؤكدة عن الفاعل. أما السؤال الذي يتوق المدافع إلى إجابة عنه — هل الحملة ما زالت جارية؟ — فلا جواب له في السجل: فقد وُسم المنشور بأنه سيُحدَّث، ولم يظهر أي تنقيح لاحق أو إشعار إزالة من GitHub أو Render.

التأييد أضعف مما قد يوحي به تصنيف الثقة، ويجدر قول ذلك صراحةً. هناك ملاحظتان بحثيتان من Cloud Security Alliance Labs، مؤرخان 30 أغسطس و2 سبتمبر 2026، يعيدان ذكر الحملة؛ واللاحقة منهما صريحة في أنها تنسب إلى Pillar الاكتشاف وتفاصيل العلاقات العامة وسلوك الخادم وإسناد الحساب، ولا تصف أي تحقق مستقل خاص بها. منشور مدونة Armorبتاريخ 22 سبتمبر 2026 يقدم إرشادات دفاعية ويقول إن Pillar فكك الخادم؛ ولا يقدم أي دليل جنائي خاص به. لم يُسند أي CVE، وتقول CSA إن هذه ليست ثغرة في مواصفات MCP. وحتى 29 أكتوبر 2026، لا تُظهر عمليات البحث أي تحذير من GitHub أو Render، ولا أي تغطية في الصحافة الأمنية المتخصصة السائدة — لا خبر من BleepingComputer أو The Register أو SecurityWeek أو Hackread — وهو أمر غير معتاد لحملة سلسلة توريد بهذا الشكل، وهو في حد ذاته جزء مما يظهره السجل. "المصادر الأولية تتفق" تعني هنا مصدرًا أوليًا منشئًا واحدًا ومجموعة من الوثائق الثانوية المستمدة منه.

هناك غموضان أصغر جديران بالإشارة إليهما بدلًا من التغاضي عنهما. تختلف الملخصات الثانوية حول ما إذا كان الاتصال الثالث أم الرابع هو أول اتصال يتلقى بيانات وصفية مسمومة، وهذا ناتج عن وصف العدّاد بأنه ينطلق عند الطلب الثالث؛ ويستخدم كلٌّ من السجل والإفصاح الرقم ثلاثة. كما تُوصَف نافذة التسليم بأنها 74 دقيقة لطوابع زمنية تمتد على 75.

فحص واحد تعذّر تكراره: في 29 أكتوبر 2026، حساب GitHub zellkernel والمستودع zellkernel/productivity-suite-mcp ويعيدان كليهما 404، وطلب السحب الوحيد المذكور بالاسم تحديدًا، getsentry/sentry-mcp #1239، لم يعد يُحلّ أيضًا — المستودع نفسه الآن يعيد التوجيه إلى getsentry/toolkit. لذلك لا يمكن اليوم إعادة التحقق من أعداد طلبات السحب وحالة الدمج ومحتويات المستودع من طرف أول؛ وهي تبقى بمنزلة لقطة Pillar، المأخوذة في منتصف أغسطس.

HTML card titled 'What is established, and what is not', kicked '2026-08-10-deadbugz-mcp-supply-chain', subtitled 'One record, one originating source, two secondary notes that restate it'. Three columns. 'Established by the disclosure' lists the server, its source repository and the two advertised tools; the counter and the three-call threshold, confirmed against the live endpoint; the four credential targets; twenty-three pull requests, nineteen closed, four open, none merged; and the delivery account linked to the X handle llmgod. 'Not established' lists any victim or executed payload, with the archive recording real harm as false; the actor behind the account and handle; motive, which rests on a Bitcoin address in the payload; and whether the campaign is still running, the post having promised updates that are not visible. 'Corroboration' lists the Cloud Security Alliance Labs notes of 30 August and 2 September 2026 as restatement without independent checks; the Armor blog of 22 September 2026 as guidance without forensic evidence; no CVE assigned; no GitHub or Render advisory found; and no mainstream trade-press coverage found as of 29 October 2026. A footer reads 'The archive grades the record A, well documented with primary sources that agree. The secondary documents here all derive from Pillar Security's post, so agreement between them is not a second measurement.'

ما الذي يطلب الإفصاح من المدافعين فعله

تتمحور الاستجابة التي توصي بها Pillar في الغالب حول التعامل مع البيانات الوصفية كسطح أمني لا كوصف له. وبالنسبة للمضيفين، فإن المطالب المحددة هي حظر أو تعقّب productivity-suite-mcp[.]onrender[.]com/mcp، وإبقاء نقطة النهاية trycloudflare.com الأسبق للحملة في قوائم الحظر والتعقّب رغم أن Pillar تقول إنها ليست نشطة حالياً، وعدم تشغيل deadbug-mcp.py — مسار الملف المخفي ~/.config/.cache/.sys/.deadbug-mcp.py هو الأثر الذي يجب البحث عنه عبر الدلائل الرئيسية والمستودعات وتكوينات عملاء MCP.

ترتيب التحقيق أهم من قائمة الحظر. إذا كان من المحتمل أن يكون أحد المضيفين قد اتصل، يقول Pillar إنه يجب الحفاظ على سجلات عميل MCP قبل تنظيف أي شيء، ثم مراجعة تحديثات تعريف الأدوات وما فعله الوكيل بعد الاستدعاء الثالث؛ ولا ينبغي تدوير بيانات الاعتماد إلا حيث تدعم الأدلة المحلية وجود تعرض، وهو عكس رد الفعل التلقائي بتدوير كل شيء عند الشك. كما سمح إعداد الخادم بإرسال بيانات تليمتري اختيارية إلى WEBHOOK_URL، وإرسال إشارات عند الاتصال والاستدعاء الأول وحدث التشغيل — وهو تفصيل يمنح التحقيق مكانًا ثالثًا للنظر فيه إلى ما هو أبعد من سجلات العميل وحركة مرور نقاط النهاية.

بالنسبة لمن يبنون عملاء MCP، فإن التوصية هيكلية، وهي الجزء الأطول عمرًا من السجل:

• سجّل بصمة تعريفات الأدوات وقت الموافقة وقارنها عند كل تحديث، بدلًا من الوثوق باسم الخادم ومستودعه.

تعامل مع أي تغيير في التعريف على خادم سبق اعتماده بوصفه حدثًا أمنيًا يراه المشغّل ويعيد الموافقة عليه، لا بوصفه تغييرًا روتينيًا في البيانات الوصفية يُبتلع بصمت.

• نفّذ العمليات الحساسة — الوصول إلى بيانات الاعتماد، وتنفيذ التعليمات البرمجية، والبريد الإلكتروني الصادر، والكتابة في المستودع — عبر السياسة لا عبر الأوصاف التي يوفّرها الخادم.

هذا البند الثالث هو ما يجعل Deadbugz سجلًا لا مجرد فضول. تفترض كل ضوابط التحكم أعلاه أن الوكيل يمكن إقناعه بأمور عبر النص الذي يربطه الخادم بأداة، وأن النص يمكن أن يتغير بعد اتخاذ قرار الثقة. يضع Pillar الحملة في سياق خط يشمل هجوم MCP sleeper attack لعام 2025 من Invariant Labs، وحزمة postmark-mcp المزيفة، وحزمة MCP موثّقة من Koi جرى تسليحها عبر تحديث — وكلها سوابق لهذه التقنية، يستشهد بها Pillar لهذا الغرض وليس كدليل بشأن هذا التسليم.

لماذا تهمّ البوابة أكثر من عدد الضحايا

حملة لها 23 محاولة تسليم، ولا دمج ولا ضحية مؤكدة، من السهل تصنيفها ضمن المحاولات وتجاوزها. السبب في أنها تستحق أن تُؤرشف بدرجة خطورة عالية هو أن تهربها لا يعتمد على نجاح التسليم على نطاق واسع. بل يعتمد على خاصية تتشاركها معظم عمليات نشر MCP اليوم: الموافقة تحدث مرة واحدة عند التثبيت، ويُفترض أن التعريف الذي تمت الموافقة عليه هو التعريف الذي سيُقدَّم. يحافظ Deadbugz على هذا الافتراض سليمًا خلال ثلاث استدعاءات ثم يكسره.

الإصلاح ليس تصحيحًا لخادم محدّد، ولا توجد ثغرة CVE لتتبّعها. المسألة أن تصبح «approved» حالة مستمرة تقف خلفها مقارنة — وهذا تغيير في كيفية تصرّف العملاء ومشغّليهم، لا تغيير في ما يبحث عنه الماسح الضوئي. ما زال غير معروف ما إذا كان أي شخص قد شغّل الخادم فعليًا في أغسطس؛ وبحسب ما هو مسجّل حتى الآن، فإن الآلية هي الاكتشاف.