
استغلالات الثغرة CVE-2022-0847(Dirty Pipe).
تم الكشف عنها في 7 مارس 2022 بواسطة Max Kellerman[2]، CVE-2022-0847 هي ثغرة في نواة لينكس (الإصدارات بين 5.8 و 5.16.11) تسمح للمهاجمين باستبدال الملفات القابلة للقراءة فقط أو غير القابلة للتغيير ورفع صلاحياتهم على نظام الضحية. أُطلق على CVE-2022-0847 اسم Dirty Pipe ولديها درجة CVSS تبلغ 7.8 (تعتبر عالية).
تُوصف ثغرة Dirty Pipe بأنها خلل في طريقة تهيئة سمة flags في هيكل pipe_buffer[7]، حيث لم تكن تحتوي على تهيئة مناسبة في دالتي copy_page_to_iter_pipe و push_pipe في نواة لينكس، وبالتالي يمكن أن تحتوي على قيم قديمة. إحدى العلامات التي يمكن تعيينها في سمة flags في هيكل pipe_buffer هي العلامة المسماة PIPE_BUF_FLAG_CAN_MERGE. تشير هذه العلامة إلى ما إذا كان دمج المزيد من البيانات في pipe_buffer مسموحًا به أم لا. وبهذه الطريقة، عندما يتم نسخ البيانات إلى pipe_buffer، يمكن إضافة المزيد من البيانات إلى pipe_buffer إذا كانت الصفحة المنسوخة أصغر من 4096 بايت.
من خلال حقن PIPE_BUF_FLAG_CAN_MERGE في مرجع من ذاكرة التخزين المؤقت للصفحات (page cache)، أصبح من الممكن الكتابة فوق البيانات في ذاكرة التخزين المؤقت للصفحات، ببساطة عن طريق كتابة بيانات جديدة إلى الأنبوب المُجهَّز بطريقة خاصة (سيتم وصف هذه العملية في الفقرات التالية). وبهذه الطريقة، يمكن لمستخدم محلي غير مُمتاز استخدام هذا الخلل للكتابة/الكتابة فوق الصفحات في ذاكرة التخزين المؤقت للصفحات المدعومة بملفات للقراءة فقط، وبالتالي رفع صلاحياته على النظام.
وبناءً على ذلك، لاستغلال الثغرة، يجب اتباع الخطوات التالية:
قم بتجميع كل شيء بالأمر التالي:
make
./exploit-1
يتكون الاستغلال 1، الموجود في الملف exploit-1.c من المستودع، من الكتابة فوق كلمة مرور المستخدم root الموجودة في الملف /etc/passwd (يحتوي هذا الملف على معلومات حول حساب المستخدم، مثل كلمة المرور المشفرة) وأخيرًا توفير محطة طرفية بصلاحيات root. للقيام بذلك، كان من الضروري:
/etc/passwd./etc/passwd إلى الأنبوب والكتابة فوق محتويات هذا الملف بكلمة مرور root جديدة معروفة (كما هو موضح في الخطوات 4 و 5 المذكورة أعلاه).find / -perm -4000 2>/dev/null
./exploit-2 <path-of-suid-binary>
يتكون الاستغلال 2، الموجود في الملف exploit-2.c من المستودع، من الكتابة فوق ثنائي SUID (تم الإبلاغ عن هذا النوع من الهجوم في القسم 3.5.2) وأخيرًا توفير محطة طرفية بصلاحيات root. للقيام بذلك، كان من الضروري:
/tmp/sh)، والذي بدوره ينشئ محطة طرفية shell بصلاحيات root./tmp/sh المذكور في الخطوة 1، وبذلك يتم فتح shell جديد بصلاحيات root../exploit-3
يستخدم الاستغلال 3، الموجود في الملف exploit-3.c من المستودع، نفس خطوات الاستغلال 1 للحصول على صلاحية shell root. الفرق هو أن الاستغلال 3، بعد الحصول على صلاحية shell root، يقوم بتحميل مفتاح SSH (Secure Shell) عام للمهاجم في الملف /root/.ssh/authorized_keys وإنشاء نفق TCP (Transmission Control Protocol) للوصول عن بُعد إلى SSH باستخدام منصة Ngrok.
[1] AHMED, Alexis. Privilege Escalation Techniques: Learn the art of exploiting Windows and Linux systems. Birmingham: Packt Publishing, أكتوبر 2021.
[2] KELLERMANN, Max. The Dirty Pipe Vulnerability. متاح في: https://dirtypipe.cm4all.com/. تم الوصول في: 23 يوليو 2022.
[3] Exploit Database. متاح في: https://www.exploit-db.com/. تم الوصول في: 03 أغسطس 2022.
[4] Traitor: Automatically exploit low-hanging fruit to pop a root shell. متاح في: https://github.com/liamg/traitor. تم الوصول في: 03 أغسطس 2022.
[5] PayloadsAllTheThings. Linux - Privilege Escalation. متاح في: https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Linux%20-%20Privilege%20Escalation.md#cve-2022-0847-dirtypipe. تم الوصول في: 03 أغسطس 2022.
[6] مستودع نواة لينكس - Struct pipe_inode_info. متاح في: https://github.com/torvalds/linux/blob/v5.8/include/linux/pipe_fs_i.h#L76. تم الوصول في: 03 أغسطس 2022.
[7] مستودع نواة لينكس - Struct pipe_buffer. متاح في: https://github.com/torvalds/linux/blob/v5.8/include/linux/pipe_fs_i.h#L26-L32. تم الوصول في: 03 أغسطس 2022.
[8] ARNTZ, Pieter. Linux "Dirty Pipe" vulnerability gives unprivileged users root access. Malwarebytes Lab. متاح في: https://www.malwarebytes.com/blog/news/2022/03/linux-dirty-pipe-vulnerability-gives-unprivileged-users-root-access. تم الوصول في: 03 أغسطس 2022.
[9] Picus Security. Linux “Dirty Pipe” CVE-2022-0847 Vulnerability Exploitation Explained. متاح في: https://www.picussecurity.com/resource/linux-dirty-pipe-cve-2022-0847-vulnerability-exploitation-explained. تم الوصول في: 03 أغسطس 2022.
[10] Exploit Database - Local Privilege Escalation (Dirty Pipe). متاح في: https://www.exploit-db.com/exploits/50808. تم الوصول في: 03 أغسطس 2022.