
إثبات مفهوم مبني على C لـ CVE-2019-5736
يحتوي هذا المستودع على استغلال إثبات المفهوم مكتوب بلغة C لـ CVE-2019-5736.
تسمح هذه الثغرة لحاوية Docker ضارة باستبدال ملف runc الخاص بالمضيف وتنفيذ أي أوامر على المضيف بصلاحيات الجذر – مما يؤدي إلى اختراق كامل لنظام المضيف.
مستوحى من إثبات المفهوم الأصلي بلغة Go بواسطة Frichetten
هذا الكود مخصص للأغراض التعليمية فقط. لا تقم بتشغيله على أي نظام لا تملكه أو ليس لديك إذن باختباره. قد يؤدي سوء الاستخدام إلى عواقب قانونية.
.
├── docker/
│ └── Dockerfile
├── lib/
│ └── exploit.h
├── scripts/
│ ├── build_docker.sh
│ ├── purge_docker_installation.sh
│ ├── setup_env.sh
│ ├── start_docker.sh
│ └── trigger_exploit.sh
├── src/
│ ├── exploit.c
│ └── main.c
├── LICENSE
├── Makefile
└── README.md
تم اختبار هذا الاستغلال على:
sudo ./scripts/install_dependencies.sh
ملاحظة: يمكنك تخطي هذه الخطوة بأمان إذا كان لديك بالفعل
wgetوbuild-essentialمثبتين.
sudo ./scripts/setup_env.sh
يقوم هذا السكربت بتثبيت Docker دون استخدام systemd أو تنشيط المقبس. إنه مثالي لمختبرات الأجهزة الافتراضية.
sudo dockerd
ملاحظة: ستحتاج إلى نافذة طرفية ثانية لتشغيل هذا في الخلفية.
sudo ./scripts/build_docker.sh
يقوم هذا السكربت بترجمة الاستغلال وبناء صورة Docker تحتوي على البرنامج الثنائي بداخلها.
ملاحظة: يمكنك أيضًا بناء البرنامج الثنائي للاستغلال يدويًا عن طريق تشغيل
make.
يمكنك إزالة Docker بالكامل واستعادة النظام إلى حالة ما قبل التثبيت:
sudo ./scripts/purge_docker_installation.sh
أولاً، نقوم بتشغيل حاوية الاستغلال. يمكنك استخدام هذا الأمر:
sudo docker run -it --name exp --rm runc_exploit
أو السكربت المضمن:
sudo ./scripts/start_docker.sh
داخل الحاوية، يمكننا الآن تشغيل البرنامج الثنائي للاستغلال:
./exploit -c "$COMAND"
يأخذ البرنامج الثنائي ثلاث وسائط:
-hيطبع رسالة الاستخدام، و-cيحدد سلسلة الأمر (payload) التي نريد تنفيذها على المضيف. الوسيطة الأخيرة-dتقوم بتبديل طباعة التصحيح أثناء التنفيذ (مثل تحليل معلومات/proc).
ملاحظة: إذا لم يتم توفير الوسيطة
-c، فسينفذ الاستغلال الأمرcp /etc/shadow > /tmp/pwned && chmod 644 /tmp/pwned.
ينتظر الاستغلال الآن عملية runc واردة من المضيف. قم بتنفيذ:
sudo ./scripts/trigger_exploit.sh
يقوم هذا السكربت بفتح عملية جديدة داخل الحاوية تنفذ bin/sh وبالتالي تشغيل الاستغلال.
ملاحظة: يمكنك أيضًا تشغيل الاستغلال عن طريق تنفيذ
docker execيدويًا على المضيف، لكن التوقيت الدقيق ضروري ليعمل الإصدار الحالي من إثبات المفهوم. لذلك قد يستغرق الأمر بضع محاولات...
إذا تم استغلال runc بنجاح، يجب أن ترى مخرجات مشابهة:

يمكننا الآن فتح ملف الظل (shadow) المخترق:
