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

RufRoot: طلب واحد دون مصادقة إلى جسر MCP الخاص بـ Ruflo نفّذ أوامر، وسرق مفاتيح، وسمّم ذاكرة الذكاء الاصطناعي

الكاتب

Rowan Sterling

تاريخ النشر

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

في 30 يونيو 2026، Noma Labsسلّمت القائم على صيانة Rufloاستغلالًا عمليًا ضد المشروع نفسه. وكان قسم الأبحاث في Noma Security قد وجد أن Ruflo — منصة مفتوحة المصدر لتنسيق الوكلاء أُطلقت سابقًا باسم Claude Flow — تأتي بنشر Docker Compose افتراضي يربط Model Context Protocolجسرها بالمنفذ 3001على كل واجهة شبكة ولم يتطلب أي مصادقة على الإطلاق. كان طلب HTTP واحد إلى /mcp نقطة النهاية كافيًا لتنفيذ أوامر صدفة داخل الحاوية بصفة node المستخدم، ومن تلك الصدفة كان بإمكان المهاجم قراءة كل مفتاح API لمزوّد LLM في البيئة، وتفريغ كل المحادثات المخزّنة، وإنشاء أسراب من الوكلاء تُحمّل فواتيرها على مفاتيح الضحية، وكتابة تعليمات في AgentDB، مخزن التعلّم الذي سيظل يوجّه إجابات الذكاء الاصطناعي لكل مستخدم لذلك المثيل. الثغرة هي CVE-2026-59726، وتُلقّب بـ RufRoot، وقد حصلت على CVSS 10.0 وأُصلحت في 3.16.3 خلال 24 ساعة. لا يذكر أي مصدر اطّلعنا عليه أنها استُغلت في البرية. يوجد سجل الأرشيف الخاص بهذه الثغرة، مع قائمة مصادره ودرجة ثقته، في أرشيف حوادث الذكاء الاصطناعي، إلى جانب إدخالات MCP والبنية التحتية الأخرى المودعة حوله.

الافتراضي الذي فتح الباب

Ruflo هو ما تسميه Noma Labs «ميتا-هارنيس» للوكلاء: طبقة ذاتية الاستضافة لأسراب من الوكلاء يصل عددها إلى 100، مبنية لـ Claude Code وOpenAI Codex، مع ذاكرة طويلة الأمد وخادم MCP مدمج لاستدعاء الأدوات. الإعداد المعتاد هو الذي تصفه Noma — استنساخ المستودع، وإضافة مفاتيح API لنماذج LLM، وتشغيل docker compose up -d. كان ملف compose الافتراضي للمشروع يربط الجسر بـ 0.0.0.0 على المنفذ 3001، ويربط قاعدة MongoDB المرافقة به بجميع الواجهات على 27017، مع إيقاف مصادقة Mongo. ويعتمد مدى ذلك على جدار الحماية ومجموعة الأمان وتقسيم الشبكة حول النشر؛ وصياغة Noma نفسها هي أن أي نسخة يمكن الوصول إليها عبر الشبكة كانت قابلة للاستغلال بالكامل دون مصادقة.

إن MCP Bridge هو خادم Express.js يحوّل طلبات JSON-RPC الواردة عبر HTTP إلى استدعاءات ضد مكتبة الأدوات الداخلية في Ruflo. في السطر المعرّض للثغرة، كانت تلك المكتبة تضم 233 أداة تغطي الوصول إلى shell، وعمليات قواعد البيانات، وإدارة الوكلاء، وتخزين الذاكرة. وتصف تدوينة Noma بصراحة ما يجعله ذلك: "MCP Bridge ليس واجهة تصحيح مساعدة عشوائية؛ بل هو الجهاز العصبي المركزي لـ Ruflo. كل استدعاء أداة، وكل إجراء وكيل، وكل عملية ذاكرة يمر عبر MCP Bridge."

كانت طبقة المصادقة غائبة، لا مجرد ضعيفة. POST /mcp وPOST /mcp/:group يطبّقان بروتوكول MCP JSON-RPC ويمرّران طلبات tools/call الواردة مباشرةً إلى الدالة الداخلية executeTool(). كان Ruflo يحتفظ بالفعل بقائمة حظر للأوامر، AUTOPILOT_BLOCKED_PATTERNS، التي كان الغرض منها منع عمليات shell الخطرة، لكن تنبيه GitHub الأمني يصرّح بأنه «لم يكن يُطبَّق إلا في مسار الطيار الآلي. وقد تجاوزته POST /mcp و POST /mcp/:group». وهكذا، استدعاءٌ واحد غير مُصادَق عليه باسم ruflo__terminal_execute شغّل أوامر اعتباطية باسم مستخدم node في الحاوية، والمُسجَّل في التنبيه بمعرّف uid 1000، دون الحاجة إلى رمز أو جلسة أو تفاعل سابق. لم تكن هناك حاجة إلى تصعيد الامتيازات لما جاء بعد ذلك: فقد كانت بيانات الاعتماد وواجهات برمجة التطبيقات الخاصة بالوكيل ومخزن الذاكرة وقاعدة البيانات كلها قابلة للوصول من ذلك الـshell.

السلسلة، في ثماني خطوات

نشرت Noma Labs إثباتًا للمفهوم من ثماني خطوات، وأكّدت كل خطوة مباشرةً مقابل نشر Ruflo افتراضي على AWS EC2، باستخدام نداءات راجعة خارج النطاق إلى Burp Collaborator للتحقق من التنفيذ والتسريب. ولا تمثل الخطوات عواقب تخمينية متراكمة على ثغرة نظرية؛ بل هي تسلسل مُثبَت، وقد كُتب قسم المعالجة في التنبيه للمشغلين الذين قد يكونون بالفعل في خضمه.

A hand-built HTML card headed 'The RufRoot chain, step by step', kicker 'RufRoot - CVE-2026-59726', subtitle 'Eight steps Noma Labs confirmed live against a default Ruflo deployment on AWS EC2'. Eight rows, each with a circled step number, the action, and what it yielded. 1, call tools/list: enumerate the 233 exposed tools. 2, call ruflo__terminal_execute over POST /mcp: shell inside the bridge container as node, uid 1000, verified by an out-of-band callback. 3, run printenv: every LLM provider API key in the container environment. 4, call ruflo__swarm_init and ruflo__agent_spawn: attacker-controlled agent swarms running on the victim's keys and compute. 5, call ruflo__agentdb_pattern-store: a fabricated SOC2 policy in the learning store, steering future output for all users. 6, query MongoDB on port 27017: every stored conversation, title and metadata. 7, write /app/beacon.js and inject it into index.js, then kill PID 1: a backdoor that survives the container restart policy. 8, clear shell history: no forensic trace. A footer cites Noma Labs and CVE-2026-59726, and marks step 5 as the step a patched redeploy does not undo.

يأتي الاستطلاع أولاً لأن قائمة الأدوات متاحة لأي مستدعٍ: tools/list يعيد جميع الإدخالات الـ233 دون بيانات اعتماد. وينتج تنفيذ الأوامر عن نقطة النهاية نفسها، وقد أكّد نموذج الإثبات الخاص بـNoma ذلك عبر استدعاء خارج النطاق بدلاً من استنتاجه من جسم استجابة. وخطوة البيئة هي التي تحوّل اختراق المضيف إلى مشكلة فوترة وفقدان بيانات: فقد مرّر ملف compose مفاتيح المزوّد إلى الحاوية، وورثت عمليات الواجهة الخلفية البيئة كاملة عبر { ...process.env }، لذا أدّى تنفيذ واحد لـprintenv إلى كشفها. ثم سمحت هذه المفاتيح لـruflo__swarm_init وruflo__agent_spawn ببدء أسراب يتحكم بها المهاجم استهلكت حصة الضحية وقدرتها الحاسوبية.

الخطوة الخامسة هي التي تبقى بعد الاختراق. وباستخدام ruflo__agentdb_pattern-store، زرعت Noma سياسة امتثال SOC2 مُلفَّقة توجّه الذكاء الاصطناعي إلى تضمين رابط يتحكم فيه المهاجم في كل نص برمجي للنشر يولّده لاحقًا. ولأن AgentDB وُجدت أساسًا لحفظ هذا النوع من الأنماط بشكل دائم كي يتحسّن سلوك الوكلاء عبر الجلسات، فقد تصرّف الإدخال المحقون كما صُمم النظام ليتصرف. تقول كتابة Noma: "تنتج المحادثات المستقبلية مخرجات متأثرة بالمهاجم، ولا يملك المستخدم أي وسيلة لمعرفة ذلك." وقد طرحت Dark Reading، التي أوردت الخلل في 29 يوليو، هذا التمييز على خبير خارجي: وصف جون غالاغر، نائب الرئيس في Viakoo، الأمر بأنه فئة مختلفة من المشكلات: "هذا ليس استغلالًا لعيوب البرمجيات، بل تسميم للذاكرة."

الخطوات المتبقية هي استغلال لاحق تقليدي، نُفّذت بسهولة غير معتادة. لم يكن لدى MongoDB على شبكة Docker الداخلية أي مصادقة، لذا ثبّت المهاجمون عميلاً في /tmp، واستخرجوا المحادثات وأرسلوها إلى الخارج. جاء الاستمرار من كتابة /app/beacon.js، وإضافة سطر require('./beacon.js') إلى index.js وقتل PID 1، وبعد ذلك أعادت سياسة إعادة التشغيل في Docker الحاوية إلى العمل مع تنشيط الـ beacon. كانت الخطوة الأخيرة مسح سجل الصدفة. كل ذلك نجم عن طلب واحد غير مُصادَق؛ ولم يوقف أي شيء في النشر الافتراضي هذه السلسلة عند أي نقطة.

الإصلاح، والجزء الذي لا تستطيع أي رقعة أن تصله

أصدر المشرف Ruflo 3.16.3 خلال 24 ساعة من الكشف في 30 يونيو، ونشر GitHub التنبيه GHSA-c4hm-4h84-2cf3 في 1 يوليو 2026. يغيّر الإصلاح، المُتتبَّع في المستودع باسم ADR-166 والمدمج في طلب السحب 2521، الإعدادات الافتراضية بدلاً من مجرد إضافة فحص:

• يربط جسر MCP بـ127.0.0.1 افتراضيًا؛ ويتطلب الربط العام MCP_AUTH_TOKEN، وتخرج العملية برسالة خطأ فادح عند الإقلاع إذا كان الرمز غائبًا.

• تقع برمجيات وسيطة لـ Bearer-token مع مقارنة ثابتة الزمن أمام الجسر.

• terminal_execute محجوب من جهة الخادم خلف MCP_ENABLE_TERMINAL=true، ومعطّل افتراضيًا، ويُفرض هذا القيد بالطريقة نفسها على /mcp، و/mcp/:group وتدفق الطيار الآلي — الحلقة المفقودة التي كانت تسمح للسلسلة المُفصح عنها بالوصول إلى غلاف أوامر.

• يتطلب MongoDB المصادقة، مع ضرورة وجود كلمة مرور الجذر لكي تتمكن الحاوية من الإقلاع.

• تعمل حاوية الجسر بنظام ملفات جذر للقراءة فقط مع tmpfs، وتحل قائمة السماح الخاصة بـ CORS محل wildcard، وتغطي ضوابط الانحدار في CI التكوين الثابت والسلوك وقت التشغيل.

لا شيء من ذلك يزيل إدخالًا سبق كتابته في AgentDB. تنصح النشرة الإرشادية مشغّلي أي نسخة مكشوفة بأن يضعوا المنفذين 3001 و27017 خلف جدار حماية فورًا، ويبدّلوا مفاتيح المزوّد، ويدققوا مخزن الأنماط بحثًا عن أي مدخلات محقونة في agentdb_pattern-store ثم يطهّروها، ويدققوا MongoDB بحثًا عن أي تلاعب، ويعيدوا بناء الحاويات من صور نظيفة. تحذيرها مباشر على نحو غير معتاد: "إعادة نشر مصحّحة وحدها لا تُلغي التسميم." ويخلص تقرير Noma إلى الاستنتاج نفسه — تدقيق مخزن الأنماط جزء من المعالجة، أما التصحيح فليس كذلك.

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

A hand-built HTML timeline card headed 'From disclosure to coverage', kicker 'RufRoot - disclosure timeline', subtitle 'Five dates, from the private report to the day the record was filed'. Six dated rows. 30 June 2026: Noma Labs discloses the flaw to Ruflo's maintainer with a working proof of concept. 1 July 2026: Ruflo 3.16.3 ships and GHSA-c4hm-4h84-2cf3 is published with CVSS 10.0. 9 July 2026: the CVE record for CVE-2026-59726 is published in the National Vulnerability Database, later marked Deferred. 29 July 2026: The Hacker News and Dark Reading report the flaw; Noma Labs publishes its research. 30 July 2026: SecurityWeek reports it, and the record is dated to this day. A separate amber note reads: no source we read reports exploitation in the wild at any point on this timeline. A footer cites The Hacker News, the GitHub advisory API, the NVD record and SecurityWeek.

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

السجل التقني هنا أساسي ومتّسق. تُسمّي النشرة الاستشارية الحزمة المتأثرة (npm ruflo الأقدم من 3.16.3)، والنسخة المُرقّعة، ونقاط النهاية الدقيقة، ومستخدم الحاوية والمنفذين؛ وتصف ملاحظات إصدار المشرف السلسلة نفسها؛ ويقدّم تقرير Noma تفاصيل إثبات المفهوم؛ وتُبلِغ منصات إخبارية مستقلة — The Hacker News وDark Reading في 29 يوليو 2026، وSecurityWeek في 30 يوليو — عن الآلية نفسها دون إضافة تفاصيل متناقضة. وتعيد مذكرة بحثية صادرة عن Cloud Security Alliance بتاريخ 5 أغسطس 2026 سرد التسلسل وتضعه إلى جانب ثغرات سابقة في MCP وتنسيق الوكلاء لا تتطلب مصادقة كانت قد تتبّعتها. ويمنح الأرشيف السجل درجة ثقة A، غير متنازع عليها، ويصنّفه سجلاً بارزًا؛ وتصنيف شدّته للسجل مرتفع، منفصل عن درجة CVSS نفسها.

هناك تفصيل واحد يتعلق بالتحقيم يجدر ذكره بدقة، لأن وثيقتين أساسيتين تختلفان فيه. تحمل GHSA-c4hm-4h84-2cf3 CVSS 10.0 على المتجه AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H — وتغيّر النطاق هو ما يدفعها إلى الحد الأقصى. وتصف نسخة الإشعار نفسها على صفحة إصدار 3.16.3 الدرجة بأنها "CVSS 9.8 critical". وسجل قاعدة بيانات الثغرات الوطنية، الذي جرى التحقق منه في 30 أكتوبر 2026، ونُشر في 9 يوليو 2026 ومُعلَّم بـ Deferred، يحمل تقييم GitHub البالغ 10.0 كمعيار ثانوي، ولا يحمل أي تقييم من إعداد NVD خاص به. لم نعثر على تفسير لسطر 9.8، وهذه المقالة لا تحسم الأمر.

{{1}}أرقام التبني أقل. وصفت Noma Labs المشروع حينها بأن لديه أكثر من 67,000 نجمة على GitHub، ونحو 10 ملايين تنزيل، وحوالي مليون مستخدم نشط؛ ونقلت The Hacker News، كما لخّصتها Cloud Security Alliance، أكثر من 66,500 نجمة. وأرقام التنزيلات والمستخدمين هي أرقام Noma الخاصة وغير موثّقة بشكل مستقل. وكان عدد نجوم المستودع في 30 أكتوبر 2026 هو 80,198 — وهو فحص لمدى انتشار المشروع، وليس مقياسًا لمدى التعرّض، ولم ينشر أي مصدر عدد عمليات النشر التي كانت قابلة للوصول فعليًا من شبكة.{{/1}}

A hand-built HTML card headed 'Established, and not', kicker 'RufRoot - evidence', subtitle 'What the advisory, the release notes and the research support, against what nobody has shown'. Two columns. The left column, headed 'Established', lists: CVE-2026-59726 affects npm ruflo below 3.16.3 and is patched in 3.16.3; the default compose file bound the MCP bridge to 0.0.0.0 on port 3001 and MongoDB to 27017 without authentication; POST /mcp and POST /mcp/:group reached 233 tools and terminal_execute with no credential, running as node, uid 1000; Noma Labs confirmed an eight-step chain live on AWS EC2 with out-of-band callbacks, including an AgentDB pattern injection; the advisory was published 1 July 2026 with CVSS 10.0 and the fix shipped within 24 hours of the 30 June disclosure; the archive record is confidence A, undisputed, no real harm recorded, GLOBAL, MCP and INFRA. The right column, headed 'Not established', lists: that anyone exploited the flaw in the wild; how many Ruflo deployments were actually network-reachable; that any instance's AgentDB was poisoned, since no audit results are published; whether 9.8 in the release notes or 10.0 in the advisory is the intended score; Noma's counts of 10M downloads and 1M active users, which no independent source confirms; that any operator received notice beyond the public advisory. A footer cites GHSA-c4hm-4h84-2cf3, the Ruflo 3.16.3 release notes, Noma Labs and SecurityWeek.

ما لم يثبت هو الجزء الأكثر عرضة للتهويل. فلا Noma ولا المشرف ولا أي جهة إعلامية قرأناها تزعم أن الثغرة استُغلت في الواقع، ولا يسجّل الأرشيف أي ضرر حقيقي لهذا البند. وقد جُرّب نموذج الإثبات لدى Noma على نشر تحكّم فيه الباحثون على EC2، وهو يبيّن ما تسمح به التثبيتات الافتراضية، لا ما عاناه أي نسخة إنتاجية بعينها. ولم يُنشر أي إحصاء لعمليات نشر Ruflo المكشوفة على الإنترنت، ولم ينشر أي مشغّل نتائج تدقيق AgentDB، لذا فعدد المتأثرين وحجم الذاكرة المسمومة القائم كلاهما مجهول. أما نصيحة تحالف أمن السحابة بمعاملة عمليات النشر المكشوفة كاختراقات كاملة فهي موقف مخاطرة يبرّره الاستغلال بلا تفاعل؛ وليست دليلاً على وقوع اختراق.

لماذا يصنفه الأرشيف معلمًا بارزًا

تستند العلامة البارزة الخاصة بالأرشيف إلى شيء أكثر تحديدًا من مجرد الحصول على الدرجة القصوى. فثغرة تنفيذ شيفرة عن بُعد بتقييم CVSS 10.0 في خدمة شائعة ذاتية الاستضافة هي نوع مألوف، وقد وصل الإصلاح هنا خلال 24 ساعة. وما يميّز RufRoot هو أن الاستغلال انتهى داخل خط التعلم الخاص بالذكاء الاصطناعي نفسه، حيث يترك العلاج التقليدي — الترقية، وإعادة النشر، وإغلاق المنفذ — التعليمة المحقونة في موضعها وهي لا تزال تشكّل الإجابات. وتقرأ ملاحظة Cloud Security Alliance هذا الأمر كدراسة حالة لنمط كانت قد وثّقته بالفعل عبر أدوات الوكلاء، بما في ذلك سلسلة نقاط تفتيش LangGraph وسطح AutoGen Studio غير المصادق عليه، وتُجادل بأن الذاكرة الدائمة المستخدمة لتشكيل سلوك الوكيل ينبغي التعامل معها كمخزن بيانات حساس تحت مراقبة النزاهة بدلاً من التعامل معها كذاكرة مؤقتة.

إعادة التأطير هذه هي الخلاصة العملية. الأثر المرئي لهذا الحادث هو تبعية مصحّحة وتنبيه منشور؛ أما الأثر غير المرئي فهو أي نمط قد لا يزال موجودًا في AgentDB الخاصة بالمشغّل، ولا توجد أداة أو بصمة منشورة تميّز سياسة تعلّم مشروعة من سياسة مزروعة. وبالنسبة للمؤسسات التي شغّلت ملف compose الافتراضي خلف شبكة قابلة للوصول، فإن الاستجابة المفيدة هي ذاتها التي يقدّمها كل من Noma والتنبيه: افترض أن المفاتيح قُرئت، وبدّلها، وافحص الذاكرة قبل الوثوق بالإجابات التي تنتجها.