ثغرة Prefab UI بدرجة 10.0: حين يتحول صندوق الرمل لشيفرة النموذج إلى باب مفتوح على الخادم
ثغرة CVE-2026-120338 في Prefab UI بدرجة 10.0 تكسر عزل شيفرة بايثون التي يولّدها النموذج وتتيح قراءة ملفات الخادم وكتابتها. اعرف الإصدارات المتأثرة وطريقة الإصلاح.

في الأول من نوفمبر 2026 نشر فريق JFrog Security Research ثغرة برقم CVE-2026-120338 في Prefab UI، وهو إطار عمل من PrefectHQ لتوليد الواجهات بالذكاء الاصطناعي. تقييم الخطورة بلغ الدرجة القصوى 10.0 بحسب إشعار GitHub، لأن «صندوق الرمل» الذي كان يفترض أن يعزل شيفرة بايثون التي يكتبها النموذج لم يكن معزولاً فعلاً. النتيجة أن شيفرة غير موثوقة تستطيع قراءة ملفات الخادم وكتابتها. الإصلاح متاح في الإصدار 0.21.0، والقصة تستحق القراءة لأنها تلخّص خطأً شائعاً في بناء أدوات الوكلاء: الاطمئنان إلى عزل لم يُختبر.
ما هو Prefab UI ولماذا يهمّ؟

يتيح Prefab UI ما يسمى الواجهات التوليدية (Generative UI)، أي أن يكتب النموذج شيفرة بايثون تصف واجهة، فتُنفَّذ داخل بيئة معزولة ثم تُعرض للمستخدم. ولأن الشيفرة صادرة عن نموذج وقد تتأثر بنص خارجي، فالتوثيق يقدّم البيئة المعزولة بوصفها ضماناً لتشغيل شيفرة غير موثوقة. لذلك كان انهيار هذا الضمان هو جوهر المشكلة.
كيف حدثت الثغرة تقنياً؟
بحسب الوصف المنشور، تعمل الشيفرة داخل Pyodide، وهي بايثون مترجمة إلى WebAssembly، ويجري تشغيلها في عملية فرعية من Deno. في الإصدارات من 0.14.0 إلى 0.20.2 حدثت ثلاثة أمور مجتمعة:
- يطلق المُشغِّل Deno بصلاحيات مفتوحة للقراءة والكتابة والشبكة.
- يترك المُشغِّل واجهة Deno ظاهرة على الكائن العام في جافاسكربت.
- وحدة js في Pyodide تعمل كوسيط لهذا الكائن العام، فيمكن لشيفرة بايثون استدعاء دوال مثل قراءة ملف نصي وكتابته على الخادم.
بعبارة أخرى، الجدار الخارجي كان موجوداً، لكن الباب الخلفي بين بايثون وجافاسكربت ترك مفتوحاً، ومن خلفه صلاحيات كاملة.
مسار الهجوم المحتمل
المسار البعيد المعتاد يمر عبر مزوّد GenerativeUI في FastMCP، الذي يسجل أداة MCP باسم generate_prefab_ui ويمرر وسيط الشيفرة إلى الصندوق. ولا يشترط أن يكون المهاجم هو من يتحدث إلى الأداة مباشرة. يكفي حقن أوامر في مستند أو صفحة ويب يقرؤها النموذج، فيُنتج شيفرة خبيثة يمررها عميل شرعي وحسن النية إلى الصندوق.
حين تُنفَّذ شيفرة كتبها نموذج، فأنت تنفّذ شيفرة كتبها أي شخص استطاع أن يؤثر في ما قرأه النموذج.
لماذا الدرجة 10.0 بالذات؟
تُحسب الدرجة 10.0 لحالة المهاجم غير المصادَق عليه، بينما تبلغ الحالة نفسها مع مستدعٍ مصادَق عليه 9.9. الفرق بسيط، والمعنى واحد: الأثر على الخادم كامل، من قراءة الملفات الحساسة كالمفاتيح وملفات الإعداد إلى الكتابة فوق ملفات قد تؤدي إلى تنفيذ شيفرة.
| العنصر | التفاصيل |
|---|---|
| المعرّف | CVE-2026-120338 |
| الحزمة | prefab-ui من PrefectHQ |
| الإصدارات المتأثرة | من 0.14.0 إلى 0.20.2 |
| الدرجة | 10.0 (حالة غير مصادَق) و9.9 (مصادَق) |
| الإصلاح | الإصدار 0.21.0 |
| الاستغلال الفعلي | لا يوجد استغلال معروف حتى الآن |
هل أنت معرَّض؟
التعرض محدود بشروط، وهذا مطمئن نسبياً. الميزة اختيارية، ويجب أن يكون Deno مثبّتاً على المضيف. الخوادم التي لا تنفذ شيفرة غير موثوقة داخل هذا الصندوق لا تتأثر. ومع ذلك، إن كنت تستخدم FastMCP مع الواجهات التوليدية، فالأفضل أن تراجع إصدارك الآن بدل أن تفترض أنك بخير.
خطوات المعالجة
- افحص إصدار prefab-ui في بيئتك، وإن كان بين 0.14.0 و0.20.2 فحدّثه إلى 0.21.0 أو أحدث.
- عالج الإصلاح بحسب وصفه: يسحب الإصدار الجديد صلاحيات القراءة والكتابة والشبكة بعد بدء التشغيل وقبل قبول أي شيفرة.
- راجع سجلات الخادم بحثاً عن قراءة أو كتابة غير مألوفة في المجلدات الحساسة.
- دوّر الأسرار التي كانت قابلة للقراءة من العملية إن وجد ما يدعو للشك.
- شغّل الخدمة بمستخدم محدود الصلاحيات وداخل حاوية، فالطبقة الإضافية تحميك حتى حين يخطئ المكوّن المعزول.
الدروس الأوسع لمطوّري الوكلاء
القصة ليست عن مكتبة واحدة، بل عن نمط يتكرر مع كل أداة تنفّذ شيفرة مولَّدة:
- اختبر العزل بنفسك: لا تكتفِ بما يقوله التوثيق، وحاول فعلاً قراءة ملف خارج الصندوق من داخله.
- اسحب الصلاحيات بدل أن تمنحها ثم تقيّدها: المبدأ الأقل صلاحية يبدأ من الصفر.
- لا تُبقِ جسوراً بين الطبقات: كل وسيط بين لغتين أو بيئتين نقطة هروب محتملة.
- افترض حقن الأوامر: مدخلات النموذج ليست أكثر ثقة من مدخلات مستخدم مجهول.
- أضف طبقة ثانية: حاوية أو جهاز افتراضي أو مستخدم محدود يخفّف أثر أي خطأ في الأولى.
أسئلة شائعة
هل تم استغلال الثغرة فعلاً؟
بحسب المعلومات المنشورة حتى الآن لا يوجد استغلال معروف في البيئات الحقيقية، لكن ذلك لا يلغي أولوية الترقية.
هل يتأثر كل من يستخدم Prefab UI؟
لا. تتأثر الخوادم التي تفعّل الواجهات التوليدية وتشغّل شيفرة غير موثوقة داخل الصندوق، ويلزم وجود Deno على المضيف.
هل التحديث وحده كافٍ؟
هو الخطوة الأولى الأهم. ويُستحسن معه تقييد صلاحيات العملية وتدوير الأسرار إن شككت في تعرضها.
الخلاصة
ثغرة Prefab UI تذكير بأن «الصندوق المعزول» ادعاء يجب إثباته. الإصلاح بسيط، فحدّث إلى 0.21.0، لكن الدرس أبعد: حين ينفّذ نظامك شيفرة كتبها نموذج، اجعل العزل متعدد الطبقات، وابدأ من صلاحيات صفرية، واختبر الهروب بنفسك قبل أن يفعل غيرك.
المصادر: إشعار JFrog وDEV Community.