CVE-2025-9074 (PoC تعليمي / كود إثبات المفهوم)
يحتوي هذا المستودع على PoC يوضح، لأغراض تعليمية، خطر استغلال واجهة برمجة تطبيقات Docker Engine البعيدة غير المُصادق عليها لإنشاء حاوية مميزة (privileged container) قادرة على القراءة والكتابة على نظام ملفات المضيف.
الملف القابل للتنفيذ هو poc.go.
مهم: استخدم هذا الـ PoC للأغراض التعليمية والدفاعية فقط. يُحظر تشغيله في بيئات طرف ثالث أو أنظمة غير مصرح بها.
تقييم الخطورة
- التقييم العام: حرِج (Critical)
- قيمة CVSS v3.1 الأساسية المفترضة: 9.8 (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)
- الأساس المنطقي:
- الوصول إلى TCP/2375 دون مصادقة → PR:N, UI:N, AV:N
- الحاوية المميزة + bind mount للمضيف تؤدي إلى تغيير النطاق وتأثير عالٍ على السرية/السلامة/التوافر → S:C, C/I/A:H
- يتطلب الهجوم بضعة طلبات HTTP إلى واجهة برمجة تطبيقات Docker Engine → AC:L
- نطاق التأثير:
- نظام تشغيل المضيف بالكامل، والحاويات الأخرى، والأصول على نفس الشبكة (بما في ذلك سرقة بيانات الاعتماد والحركة الجانبية).
- صلاحيات التنفيذ:
- غير مُصادق عليها (PR:N). لا تتطلب صلاحيات إدارية.
الخلفية
- يوفر Docker Engine واجهة برمجة تطبيقات عن بُعد، ويمكن التعامل معه عبر نقاط النهاية مثل
/version و/info و/containers/create.
- عندما تكون الحاوية قابلة للوصول من الخارج، قد يصبح من الممكن إنشاء حاويات، ومنح صلاحيات مميزة، وتنفيذ bind mount لدلائل المضيف دون مصادقة.
- في بيئة Windows + Docker Desktop، توجد مسارات تثبيت تتيح الوصول إلى محركات أقراص مضيف ويندوز عبر
/run/desktop/mnt/host/<drive> أو /host_mnt/<drive>. يستخدم هذا الـ PoC هذا المسار لتصوير التأثير من خلال إنشاء ملف على المضيف.
نظرة عامة على السلوك
يقوم poc.go بما يلي:
- استدعاء واجهة برمجة تطبيقات Docker Engine عبر
http://192.168.65.7:2375 وإجراء فحص الاتصال (/version).
- التحقق من قائمة الصور المتاحة (
/images/json)، ومحاولة سحب alpine:latest إذا لم تكن موجودة.
- إنشاء حاوية مميزة وتنفيذ bind mount لمحركات أقراص المضيف (مثل: C:, N:) على
/host_root.
- كتابة ملف تحقق (مثال:
cve_2025_9074_poc.txt) داخل /host_root من داخل الحاوية لتصوير التأثير.
- حذف الحاوية بعد التنفيذ.
المخاطر (الاستغلال المحتمل)
- قراءة وكتابة نظام ملفات المضيف (ضمن صلاحيات تشغيل Docker Engine).
- سرقة المعلومات الحساسة (كلمات المرور، مفاتيح SSH، إلخ).
- العبث بملفات إعدادات النظام.
- تثبيت البرمجيات الخبيثة والاستمرارية (persistence).
- الحركة الجانبية إلى حاويات أو شبكات أخرى.
- تصعيد الصلاحيات.
المتطلبات
- إصدار Go 1.20+ تقريبًا (يعمل عبر
go run).
- تشغيل Docker Desktop/Engine (به ثغرة).
- تشغيل هذا الكود داخل حاوية Docker تعمل على Docker Desktop/Engine (به ثغرة).
- استجابة واجهة برمجة تطبيقات Docker Engine على
http://192.168.65.7:2375 (القيمة الافتراضية للـ PoC).
طريقة الاستخدام
-
الحصول على المستودع
git clone <this-repo>
cd cve-2025-9074
-
تنفيذ الـ PoC
-
مثال على الإخراج
- عرض نجاح الاتصال بـ
/version.
- اكتشاف صورة مستخدمة أو سحب
alpine:latest.
- إنشاء الحاوية المميزة ونتيجة إنشاء الملف على المضيف.
- عرض مقتطف من معلومات النظام استنادًا إلى
/info.
-
أمثلة curl للعرض التوضيحي (تظهر على الشاشة)
- مثال JSON لـ
/containers/create، ومثال تشغيل /containers/{id}/start.
تخصيص الإعدادات
- يمكن تعديل مصفوفة المرشحين داخل
attemptHostWrite (/run/desktop/mnt/host/<drive> و/host_mnt/<drive> وC:/ وغيرها) لتتناسب مع البيئة.
- الصورة المستخدمة
- الأولوية للصور الموجودة. وإلا يتم سحب
alpine:latest تلقائيًا.
ملاحظات حول بيئة التحقق
- يتضمن أمثلة لمسارات التثبيت المبنية على سلوك Windows + Docker Desktop.
- في macOS، تختلف مسارات المضيف، لذا يلزم تعديلها حسب الحاجة.
- اعتمادًا على إصدار Docker Desktop وإعداداته، قد لا ينجح الـ PoC (= آمن).
إخلاء مسؤولية
- هذا المستودع مخصص لأغراض البحث والتعليم فقط، ولا يشجع على الهجمات أو الاختراق أو الأعمال التخريبية.
- لا يتحمل المؤلف أي مسؤولية عن أي أضرار تنشأ عن استخدام هذا الـ PoC.
- لا تشغّله خارج بيئة معزولة تملك فيها صلاحيات إدارية مشروعة.
الترخيص