Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2021-3156 — CVE-2021-3156 (Baron Samedit) تقرير وبحث | Kitploit
أدوات/GitHubGitHub/ijbaig/cve-2021-3156
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالالتعلم والتعليماستغلال الملفات الثنائيةمختبرات وتدريب عملي
GitHubijbaig/cve-2021-3156

CVE-2021-3156

CVE-2021-3156 (Baron Samedit) تقرير وبحث

عرض المستودع
منذ شهر واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

غوص عميق في سلسلة استغلال CVE-2021-3156 (Baron Samedit)

المؤلف: IJ Baig
التاريخ: 7 يوليو 2026


1. معرّف CVE، الإصدارات المتأثرة، وتأكيد البناء

  • معرّف CVE: CVE-2021-3156
  • نوع الثغرة: تجاوز سعة المخزن المؤقت المستند إلى الكومة (Heap-Based Buffer Overflow)
  • نطاق الإصدارات المتأثرة: إصدارات Sudo القديمة 1.8.2 إلى 1.8.31p2، والإصدارات المستقرة 1.9.0 إلى 1.9.5p1.
  • الإصدار المستهدف المُبنى: Sudo 1.9.5p1

1.1 إعداد البيئة

لتحليل هذه الثغرة بأمان، تم تجميع إصدار Sudo المعرّض للثغرة داخل بيئة معزولة وغير إنتاجية.

معلومات نظام التشغيل

1.2 التجميع من المصدر

تم تنزيل الكود المصدري لإصدار Sudo 1.9.5p1 وتجميعه محليًا باستخدام أدوات make القياسية. تم الحرص على تشغيل ذلك من دليل محلي حتى لا يستبدل ثنائي sudo الأصلي المحدّث في النظام المضيف.

خطوة التجميع 1

تأكيد البناء: بعد التجميع، تم تنفيذ الثنائي المخصص للتحقق من أن الإصدار المعرّض للثغرة الصحيح قد تم بناؤه.

تثبيت Make

إصدار Sudo

2. تحليل السبب الجذري

2.1 موقع الكود المعرّض للثغرة

  • الملف: plugins/sudoers/sudoers.c
  • الدالة: set_cmnd() (حوالي السطر 864 في الإصدار 1.9.5p1)

الكود المعرّض للثغرة

2.2 شرح الثغرة

تخيّل أن لديك مساعدًا وظيفته إزالة أحرف الهروب (الشرطات المائلة للخلف) من قائمة الكلمات قبل وضعها في صندوق تخزين مخصّص حديثًا (مخزن مؤقت في الكومة). يفترض المساعد افتراضًا أعمى أن كل شرطة مائلة للخلف دائمًا يليها حرف صالح، لذلك كلما رأى شرطة مائلة للخلف، يتخطّاها وينسخ الحرف التالي.

ومع ذلك، يوجد خلل في كيفية تعامل البرنامج مع الوسائط عند تشغيل sudoedit -s. فهو يسمح للمستخدم بإدخال كلمة تنتهي تمامًا بشرطة مائلة للخلف واحدة (\)، يليها مباشرة علامة نهاية الكلمة غير المرئية (فاصل فارغ، \0).

عندما يصل كود المساعد إلى هذه الشرطة المائلة للخلف في النهاية، يتخطّاها وينظر إلى الحرف التالي — الفاصل الفارغ. بدلاً من التوقف، يجبر منطق عبارة if المساعد على تخطي الفاصل الفارغ أيضًا. تستمر الحلقة في النسخ، وتنسخ أي ذاكرة عشوائية خارج النطاق تأتي بعد ذلك إلى صندوق التخزين. هذا النسخ المستمر بما يتجاوز طول الكلمة المقصود يفيض على المخزن المؤقت المخصص، مما يؤدي إلى تجاوز سعة مخزن مؤقت شديد في الكومة.

مقتطف الكود المعرّض للثغرة:

root@kitploit:~
/* Unescape characters, skipping over backslashes */
for (to = user_args, av = NewArgv + 1; (from = *av); av++) {
    while (*from) {
        // VULNERABILITY: If from[0] is '\' and from[1] is '\0', 
        // the loop evaluates to true, increments 'from', skipping the null terminator.
        if (from[0] == '\\' && !isspace((unsigned char)from[1]))
            from++;
        *to++ = *from++; 
    }
    *to++ = ' ';
}
*--to = '\0';

2.3 التصحيح الرسمي وشرح الإصلاح

أصلح مطوّرو Sudo هذا الخطأ المنطقي في الإصدار 1.9.5p2 بإضافة فحص صارم للحدود. يضمن الكود الآن صراحةً أن الحرف الذي يلي الشرطة المائلة للخلف ليس الفاصل الفارغ قبل محاولة إلغاء هربه.

فرق التصحيح:

root@kitploit:~
- if (from[0] == '\\' && !isspace((unsigned char)from[1]))
+ if (from[0] == '\\' && from[1] != '\0' && !isspace((unsigned char)from[1]))

لماذا يصلح هذا السبب الجذري: إضافة from[1] != '\0' توقف فورًا القراءة خارج النطاق. الآن، إذا واجه الكود شرطة مائلة للخلف في نهاية السلسلة تمامًا (بمعنى أن from[1] هو الفاصل الفارغ)، يتم تقييم عبارة if على أنها خاطئة. لا يتم زيادة المؤشر قبل الأوان، ويُعالَج الفاصل الفارغ بشكل صحيح كنهاية للسلسلة، وتنتهي الحلقة بأمان دون تجاوز سعة الكومة.

3. إعادة إنتاج الاستغلال

3.1 إثبات المفهوم العام (PoC)

لإعادة الإنتاج هذه، تم استخدام استغلال Python المعترف به على نطاق واسع والذي طوّره باحث الأمن Worawit (تحديدًا نسخة exploit_nss.py).

3.2 تفصيل تنفيذ PoC

قبل تنفيذ PoC، من الضروري فهم آليته. لا يقوم السكربت ببساطة بتعطيل البرنامج؛ بل ينظّم تلاعبًا دقيقًا للغاية بالذاكرة لتحقيق تنفيذ الكود.

فيما يلي تفصيل خطوة بخطوة لعمليات PoC:

  1. توليد الحمولة: يقوم السكربت بتجميع حمولة C خبيثة ديناميكيًا في ملف كائن مشترك (.so). صُمّمت هذه الحمولة لتنفيذ /bin/sh كجذر.
  2. Heap Feng Shui: يقوم السكربت بإعداد متغيرات بيئة محددة (مثل LC_ALL وLANG وTZ). ولأن Sudo يقوم بتحميل متغيرات البيئة إلى الكومة عند بدء التشغيل، يحسب السكربت الأحجام الدقيقة اللازمة لترتيب الكومة بتخطيط قابل للتنبؤ.
  3. التجاوز: ينفذ السكربت sudoedit -s ويمرر وسيط سطر أوامر ينتهي بشرطة مائلة للخلف واحدة. يؤدي هذا إلى تشغيل ثغرة الإزاحة بواحد التي نوقشت في القسم 2، مما يسبب كتابة خارج النطاق.
  4. استهداف بنية NSS: تكتب الكتابة خارج النطاق بدقة فوق بنية glibc محددة في ذاكرة الكومة المجاورة: بنية service_user. تُستخدم هذه البنية من قبل مبدّل خدمة الأسماء (NSS) للبحث عن معلومات النظام.
  5. تنفيذ الكود: يتم إفساد بنية service_user لتشير إلى مكتبة .so الخبيثة التي جُمعت في الخطوة 1. عندما يحاول Sudo البحث عن صلاحيات المستخدم، يقوم بتحميل وتنفيذ مكتبة المهاجم بشكل أعمى، مما يمنح شل جذر.

3.3 تشغيل الثغرة (Sudo 1.9.5p1)

أولاً، تم إجراء اختبار تعطل أساسي لإثبات وجود الثغرة دون تسليحها.

فحص الثغرة

بعد ذلك، تم تنفيذ سكربت Worawit الكامل exploit_nss.py ضد الثنائي المعرّض للثغرة.

وصول الطرفية كجذر

3.4 التحقق من التصحيح (Sudo 1.9.5p2)

للتحقق من الإصلاح الرسمي، تم تنفيذ نفس مشغّل PoC بالضبط ضد ثنائي Sudo المحدّث.

root@kitploit:~
sudoedit -s '\' 2>&1 | grep -q "sudoedit:" && echo "Vulnerable" || echo "Not vulnerable"

التحقق من التصحيح

4. ملخص غير تقني

Sudo، برنامج إداري قياسي يُستخدم عبر خوادمنا، يحتوي على خلل خطير في كيفية معالجة مدخلات النص التي تحتوي على شرطات مائلة للخلف. من خلال إرسال أمر مشوّه بعناية، يمكن لمهاجم يملك وصول مستخدم أساسي خداع النظام لكتابة بيانات خارج منطقة الذاكرة المخصصة لها. يسمح هذا الخطأ بتجاوز ضوابط الأمان تمامًا والحصول على تحكم إداري كامل وغير مصرح به على الجهاز دون الحاجة إلى كلمة مرور.

5. التحديات التي وُوجهت والدروس المستفادة

التحديات: كان أحد التحديات الأساسية هو هشاشة التلاعب بالكومة. غالبًا ما تفشل حمولات الاستغلال الموجهة لإصدارات معينة من أنظمة التشغيل على أنظمة أخرى لأن مكتبة C القياسية الأساسية (glibc) تدير كتل الذاكرة بشكل مختلف. تطلّب تسليح هذه الثغرة بنجاح فهمًا دقيقًا لمحاذاة الذاكرة وتخطيطات متغيرات البيئة (Heap Feng Shui) الخاصة بالبيئة المستهدفة.

الدروس المستفادة: من منظور الدفاع وعمليات الأمن، عزّز هذا الغوص العميق عدة مفاهيم حرجة:

  • قيمة بيئات المختبرات الخاضعة للتحكم: الانتقال من الساحات التدريبية الموجّهة عبر الويب (مثل TryHackMe) إلى بناء واستغلال ثنائي معرّض للثغرة من المصدر محليًا يوفّر فهمًا أعمق بكثير لكيفية تحديد آليات نظام التشغيل الأساسية لجدوى الاستغلال.
  • هندسة الكشف أمر بالغ الأهمية: الاعتماد فقط على تصحيح ثنائيات SUID غير كافٍ لأن دورة التصحيح تستغرق وقتًا. أبرز استكشاف هذا الاستغلال الحاجة إلى قواعد كشف SIEM قوية. مراقبة تتبع تنفيذ العمليات لأوامر sudoedit -s المشبوهة التي تنتهي بأحرف هروب يمكن أن تسمح لفريق مركز العمليات الأمنية (SOC) باكتشاف محاولات الاستغلال قبل نشر التصحيح بالكامل عبر البنية التحتية.
  • حدود الصلاحيات: أبرز التمرين المخاطر الهائلة المرتبطة بثنائيات SUID. ولأن Sudo يُنفَّذ بصلاحيات الجذر منذ تعليمته الأولى، فإن أي خطأ في منطق التحليل عند بدء التشغيل يضمن اختراقًا كاملاً للنظام.

6. مكافأة: ثغرات موازية في Sudo

CVE موازٍ: CVE-2019-14287 (تجاوز أمان Sudo)

ثغرة بارزة أخرى داخل قاعدة كود Sudo نفسها تشترك في نمط سبب جذري مشابه: التحليل والتحقق غير السليمين من مدخلات المستخدم. في CVE-2019-14287، سمح خلل منطقي في كيفية تحليل Sudo لمعرّف المستخدم (UID) للمهاجم بتنفيذ أوامر كجذر بتحديد معرّف المستخدم -1 أو 4294967295.

التوازي: بينما تُعد Baron Samedit (CVE-2021-3156) خلل تلف الذاكرة وCVE-2019-14287 تجاوزًا للتفويض، فإن السبب الجذري في كلتا الحالتين هو فشل في منطق تحليل الوسائط الأولي. تنبع كلتا الثغرات من ثقة Sudo غير الصحيحة وسوء معالجته لوسائط سطر الأوامر في الحالات الحدّية (الشرطات المائلة للخلف اللاحقة مقابل التفافات الأعداد الصحيحة غير المتوقعة) قبل تنفيذ وظائفه المميزة الأساسية.


إعلان السلامة والأخلاقيات: جميع عمليات الاستغلال والاختبار الموضحة في هذا التقرير أُجريت بالكامل داخل جهاز افتراضي محلي معزول ومصرح به. لم يتم استهداف أو التفاعل مع أي أنظمة إنتاج أو شبكات غير مصرح بها أثناء هذا التمرين.

تنزيل الأداة