
تحليل استغلال وتخفيف ثغرة تجاوز سعة المخزن المؤقت المستند إلى الكومة CVE-2021-3156 في sudo
CVE-2021-3156، المعروفة باسم بارون ساميديت، هي ثغرة تجاوز سعة للمخزن المؤقت في الكومة في برنامج sudo. تسمح لأي مستخدم محلي غير مميَّز بالحصول على صلاحيات الجذر على الأنظمة الهشّة دون مصادقة.
يوثّق هذا المشروع الاستغلال الكامل لهذه الثغرة ووسائل التخفيف منها ضمن دورة الثغرات البرمجية: الاستغلال والتخفيف في جامعة لوكسمبورغ.
OS: Ubuntu 20.04.1
sudo version: 1.8.31-1ubuntu1 (vulnerable)
libc version: 2.31
User: Non-root account
لإعادة إنتاج الحالة الهشّة:
sudo apt install sudo=1.8.31-1ubuntu1
تُطلق الثغرة عند تنفيذ sudo في وضع sudoedit مع وسائط سطر أوامر مصنوعة بعناية تتسبب في تجاوز سعة المخازن المؤقتة الداخلية في الكومة.
يستخدم الاستغلال أربعة معاملات حاسمة تم ضبطها بدقة عبر تحليل الذاكرة:
exploit_launcher.c — الاستغلال الرئيسييُطلق الثغرة عبر 5 خطوات:
LC_ALL للتحكم في تخطيط ذاكرة الكومةsudoedit بالوسائط والبيئة الضارةexploit_payload.c — الحمولة الضارةيُتنفَّذ تلقائيًا عند نجاح الاستغلال عبر دالة _init:
0 (الجذر)$ make
$ ./exploit_it
[!] CVE-2021-3156 Exploit
[+] Target: Ubuntu 20.04.1 (sudo 1.8.31, libc-2.31)
[+] Parameters: A=56, B=54, Nulls=63, LC_ALL=212
[+] Launching exploit...
[+] Exploit successful. Root privileges obtained.
# whoami
root
✅ تم التصعيد بنجاح من مستخدم غير مميَّز إلى الجذر.
قم بترقية sudo إلى الإصدار المُصحَّح:
sudo apt install sudo=1.8.31-1ubuntu1.5
بعد الترقية، فشل نفس الاستغلال في التنفيذ ولم تُمنح صلاحيات الجذر — مما يؤكد فعالية التصحيح.
الخلاصة الأساسية: الحفاظ على تحديث أدوات النظام مثل
sudoأمر بالغ الأهمية لمنع هجمات تصعيد الصلاحيات.
├── exploit_launcher.c # Main exploit triggering the heap overflow
├── exploit_payload.c # Malicious payload spawning root shell
├── libnss_X/ # Malicious library loaded during exploitation
└── Makefile # Build configuration
# Build
make
# Run exploit
./exploit_it
| الخاصية | التفاصيل |
|---|
| معرف CVE | CVE-2021-3156 |
| الاسم المستعار | بارون ساميديت |
| النوع | تجاوز سعة المخزن المؤقت في الكومة |
| المكوّن | sudo (وضع sudoedit) |
| الأثر | تصعيد صلاحيات محلي إلى الجذر |
| الإصدارات المتأثرة | sudo ≤ 1.8.31 (أوبونتو)، ≤ 1.9.5p1 (غيرها) |
| الإصدار المُصحَّح | sudo 1.8.31-1ubuntu1.5 |
| درجة CVSS | 7.8 (عالية) |
| المعامل | الحجم | الغرض |
|---|
A | 56 بايت | تجاوز سعة المخزن المؤقت الأولي |
B | 54 بايت | تجاوز سعة كتلة كومة ثانية |
Nulls | 63 بايت | محاذاة بنية الذاكرة |
LC_ALL | 212 بايت | التحكم في تخطيط الكومة عبر متغير البيئة |