CVE-2021-3156 — Baron Samedit
تجاوز سعة المخزن المؤقت في الكومة في sudo → تصعيد الصلاحيات محليًا
قسم الأمن السيبراني في ITSOLERA | تدريب الفريق الأحمر 2026
██████╗ █████╗ ██████╗ ██████╗ ███╗ ██╗ ███████╗ █████╗ ███╗ ███╗███████╗██████╗ ██╗████████╗
██╔══██╗██╔══██╗██╔══██╗██╔═══██╗████╗ ██║ ██╔════╝██╔══██╗████╗ ████║██╔════╝██╔══██╗██║╚══██╔══╝
██████╔╝███████║██████╔╝██║ ██║██╔██╗ ██║ ███████╗███████║██╔████╔██║█████╗ ██║ ██║██║ ██║
██╔══██╗██╔══██║██╔══██╗██║ ██║██║╚██╗██║ ╚════██║██╔══██║██║╚██╔╝██║██╔══╝ ██║ ██║██║ ██║
██████╔╝██║ ██║██║ ██║╚██████╔╝██║ ╚████║ ███████║██║ ██║██║ ╚═╝ ██║███████╗██████╔╝██║ ██║
╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═════╝ ╚═╝ ╚═╝
⚠️ للاستخدام التعليمي / المختبر المعزول فقط
يجب إجراء جميع الاختبارات حصريًا داخل حاوية مختبر Docker.
لا تقم أبدًا بالتشغيل ضد أنظمة حقيقية أو إنتاجية أو مشتركة.
جدول المحتويات
- نظرة عامة على CVE
- ما الذي يجعل هذا CVE مميزًا
- هيكل المشروع
- مخرجات الفريق
- البدء السريع
- كيف يعمل الاستغلال
- اختبار Canary للثغرة
- استخدام exploit.py
- إعادة تعيين المختبر واللقطة
- المقارنة: المُصحَّحة مقابل الهشّة
- المراجع
نظرة عامة على CVE
| الخاصية | القيمة |
|---|
| معرف CVE | CVE-2021-3156 |
| الاسم المستعار | Baron Samedit |
| النوع | تجاوز سعة المخزن المؤقت في الكومة → تصعيد الصلاحيات محليًا |
| المكوّن | sudo — أداة صلاحيات لينكس (set_cmnd() في src/sudo.c) |
| درجة CVSS v3 | 7.8 عالية |
| المتجه | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| الإصدارات الهشّة | sudo 1.8.2 – 1.8.31p2 و 1.9.0 – 1.9.5p1 |
| الإصدارات المُصحَّحة | sudo 1.9.5p2 (فرع 1.9) / sudo 1.8.32 (فرع 1.8) |
| إصدار هدف المختبر | sudo 1.8.31 على Ubuntu 20.04 |
| نشرة التصحيح / الاستشارة | SA: https://www.sudo.ws/security/advisories/unescape_overflow/ |
| اكتُشفت بواسطة | فريق أبحاث Qualys |
| تاريخ الإفصاح | 2021-01-26 |
| في البرية منذ (كود) | ~2011-07-09 (sudo 1.8.2) — ~10 سنوات دون اكتشاف |
| المصادقة المطلوبة | مستخدم محلي فقط — لا حاجة لأي صلاحيات sudo |
ما الذي يجعل هذا CVE مميزًا
| الخاصية | CVE-2021-3156 | استغلال sudo LPE نموذجي |
|---|
| يتطلب إدخال sudoers | ❌ لا | ✅ نعم |
| يتطلب عضوية مجموعة sudo | ❌ لا | ✅ نعم |
| يتطلب أي وصول sudo سابق | ❌ لا | ✅ نعم |
| يعمل من حساب مستخدم جديد تمامًا | ✅ نعم | ❌ لا |
| يستغل نظام الصلاحيات | ❌ يتجاوزه تمامًا | ✅ يسيء استخدامه |
| سطح الهجوم | محلل الوسائط (قبل المصادقة) | فحص الصلاحيات |
الرؤية الأساسية: يحدث التجاوز في set_cmnd() — وهي الوظيفة التي
تحلل الوسائط — والتي تعمل قبل أن يرجع sudo إلى /etc/sudoers على الإطلاق.
يمكن لحساب أُنشئ قبل 10 ثوانٍ فقط وبدون أي صلاحيات استغلال هذا الأمر.
هيكل المشروع
CVE-2021-3156-Project/
│
├── README.md ← you are here
│
├── lab/ ← Member 1: Lab Environment
│ ├── Dockerfile ← Ubuntu 20.04 + sudo 1.8.31 (pinned)
│ ├── docker-compose.yml ← vulnerable target + patched reference
│ ├── evidence_helper.sh ← pre/post-exploit state capture
│ ├── SETUP.md ← step-by-step VM/Docker guide
│ └── config_notes.md ← CVE conditions & container details
│
├── exploit/ ← Member 2: Exploit Development
│ ├── exploit.py ← Python LPE framework + canary test
│ └── payloads.txt ← heap overflow research notes
│
├── docs/ ← Member 3: Research & Documentation
│ ├── root_cause_analysis.md ← set_cmnd() deep dive + off-by-one
│ ├── references.md ← all sources, PoCs, CWE mapping
│ └── mitigation.md ← sudo upgrade + hardening checklist
│
├── proof/ ← Member 4: Evidence Collection
│ ├── screenshots/ ← exploitation screenshots
│ └── terminal_logs.txt ← command output template + logs
│
└── report/
└── CVE-2021-3156_Report.docx ← Member 4: Final professional report
مخرجات الفريق
العضو 1 — بيئة المختبر والتحقق من CVE
| الملف | الوصف |
|---|
lab/Dockerfile | Ubuntu 20.04 مع تثبيت sudo 1.8.31 (هشّ)؛ Python 3 مثبّت؛ حساب labuser بدون أي وصول sudo |
lab/docker-compose.yml | ينسّق بين الهدف الهشّ + حاوية مرجعية مُصحَّحة على Ubuntu 22.04 |
lab/evidence_helper.sh | سكربت Bash لالتقاط حالة النظام (المستخدم، إصدار sudo، canary) قبل/بعد الاستغلال |
lab/SETUP.md | خطوة بخطوة: البناء ← التشغيل ← الدخول ← التحقق من إصدار sudo ← تشغيل canary ← اللقطة |
lab/config_notes.md | يشرح لماذا لا حاجة لأي إعدادات خاطئة، إعدادات أمان Docker، مرجع بيانات الاعتماد |
العضو 2 — تطوير الاستغلال (سكربت PoC)
| الملف | الوصف |
|---|
exploit/exploit.py | إطار عمل Python كامل: check_platform()، check_sudo_version()، run_canary_test()، get_system_info() + ثلاثة أكواد TODO استغلالية (select_heap_strategy، build_overflow_argument، trigger_overflow_and_escalate) مع مراجع تفصيلية لـ PoCs الخاصة بـ blasty/worawit |
exploit/payloads.txt | مفاهيم تجاوز الكومة، مكافئ COMPRESSION_TRANSFORM (بنية الوسائط)، ثلاث استراتيجيات للكومة، قالب سجل المحاولات الفاشلة، توقيعات الكشف |
ملاحظة: لا يتضمن كود استغلال النواة/الكومة الفعلي التزامًا بالمبادئ الأخلاقية.
تشير أكواد TODO في exploit.py إلى https://github.com/blasty/CVE-2021-3156
و https://github.com/worawit/CVE-2021-3156 باعتبارها PoCs العامة الموثوقة
لفريقك لدراستها ودمجها.
العضو 3 — تحليل السبب الجذري والبحث
| الملف | الوصف |
|---|
docs/root_cause_analysis.md | تفصيلي: عدم تطابق الحجم مقابل النسخ في set_cmnd()، خطأ off-by-one مع أمثلة برمجية، فرق التصحيح، سلسلة الاستغلال، CVSS 7.8 مقياسًا بمقياس، خط زمني لـ10 سنوات، جدول تأثير التوزيعات |
docs/references.md | استشارة Qualys، MITRE، NVD، مشروع sudo، blasty PoC، worawit PoC، ExploitDB، GTFOBins، تعيين CWE |
docs/mitigation.md | apt-get install --only-upgrade sudo، canary للتحقق، تقوية AppArmor، مراقبة auditd، جدول التقوية |
العضو 4 — جمع الأدلة والتقارير والتكامل
| الملف | الوصف |
|---|
proof/terminal_logs.txt | قالب لجمع الأدلة (املأه بالمخرجات الفعلية من المختبر) |
proof/screenshots/ | مجلد لـ7 لقطات شاشة مطلوبة |
report/CVE-2021-3156_Report.docx | تقرير احترافي من 12 قسمًا: صفحة الغلاف، الملخص التنفيذي، وصف CVE، تحليل السبب الجذري، تفصيل CVSS، خطوات الاستغلال، شرح الكود، قائمة التحقق من الأدلة، التخفيف، الخط الزمني، المراجع، إخلاء المسؤولية |
البدء السريع
1. البناء وبدء تشغيل المختبر
cd CVE-2021-3156-Project/lab/
# Build the vulnerable image (downloads Ubuntu 20.04, pins sudo 1.8.31)
docker compose build
# Start both containers
docker compose up -d
# Confirm containers are running
docker compose ps
المتوقع:
NAME STATUS
baron_samedit_target running
baron_samedit_patched running
2. الدخول إلى الحاوية الهشّة
docker exec -it baron_samedit_target bash
3. تأكيد شروط الثغرة
# Inside the container as labuser
whoami # Expected: labuser
id # Expected: uid=1000(labuser)...
sudo --version # Expected: Sudo version 1.8.31
sudo -l # Expected: Sorry, user labuser may not run sudo...
sudoedit -s '\' 2>&1 # Expected: NOT "usage:" → VULNERABLE
4. نسخ وتشغيل الاستغلال
# From host machine
docker cp exploit/exploit.py baron_samedit_target:/home/labuser/