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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/justinsteven/sudo_digest_toctou_poc_cve-2015-8239
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالالتعلم والتعليممختبرات وتدريب عملي
GitHubjustinsteven/sudo_digest_toctou_poc_cve-2015-8239

sudo_digest_toctou_poc_CVE-2015-8239

نموذج إثبات مفهوم قائم على Docker يوضح استغلال حالة سباق TOCTOU لميزة `Digest_Spec` في sudo (CVE-2015-8239) باستخدام inotify لهجمات استبدال الملفات عبر المستخدمين.

عرض المستودع

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
2منذ 5 سنواتلم تتم المراجعة بعد

Digest_Spec TOCTOU POC في sudoers

المبرر

اكتشفت أليسا ميلبورن (https://twitter.com/noopwafel) ثغرة سباق TOCTOU في sudo عند استخدام إعداد Digest_Spec. يمكن استخدام إعداد Digest_Spec للسماح لمستخدم بتنفيذ أمر عبر sudo لملف ثنائي إذا وفقط إذا تطابق تجزئته مع قيمة محددة. راجع man sudoers وابحث عن Digest_Spec لمزيد من المعلومات حول هذه الميزة، وراجع http://noopwafel.net/notes/2015/sudo-digest-race-condition.html لمزيد من المعلومات حول الثغرة التي اكتشفتها أليسا. تم تخصيص CVE-2015-8239 للمشكلة.

تم تخفيف المشكلة بإضافة توثيق إلى man sudoers يحذر من احتمالية حالة سباق، وبإضافة بعض السحر المتعلق بـ fexecve() إلى sudo لمحاولة منع أنواع معينة من تعديلات الملفات من أن تكون فعالة.

ومن المثير للاهتمام، أن cve-assign قال ما يلي على https://seclists.org/oss-sec/2015/q4/256:

root@kitploit:~
As far as we know, the Digest_Spec feature can be useful if the user
invoking sudo doesn't have write access to the program file, but a
second (and potentially untrusted) user does have write access to the
program file. In the envisioned scenario, the second user is not
allowed to use sudo, the second user has no way to predict when anyone
else may use sudo, and the second user cannot use their write access
often. Thus, if the second user attempts a file-replacement attack,
the attack will almost certainly occur at an ineffective instant of
time, and the Digest_Spec feature will successfully prevent the
attacker's desired outcome.

يوضح هذا POC أن هذه العبارة ليست صحيحة بالضرورة، بشرط أن يتمكن مستخدم "الكاتب" من تنفيذ كود مستمر على النظام. يمكن لمستخدم "الكاتب" الاستفادة من inotify لاكتشاف متى يقوم مستخدم "المنفذ" بتشغيل الملف باستخدام sudo ويمكنه محاولة هجوم استبدال الملف في ذلك الوقت.

حول

ينشئ هذا المشروع صورة Docker والتي:

  • تحتوي على ملف في /opt/sudoable يمكن لمستخدم editor الكتابة عليه، ويمكن لمستخدم executor تنفيذه باستخدام sudo إذا وفقط إذا تطابق تجزئة SHA256 الخاصة به مع قيمة معينة
  • تحتوي على ملف في /opt/hello (الملف "الجيد" الذي تم تضمين تجزئة SHA256 الخاصة به في sudoers) وملف في /opt/goodbye (ملف "شرير")
  • تجعل /opt قابلاً للكتابة فقط من قبل مستخدم root (وبالتالي يمكن لمستخدم editor استبدال محتويات /opt/sudoable ولكن لا يمكنه إجراء عملية تبديل ملف على مستوى نظام الملفات)
  • استغلال TOCTOU قائم على inotify في /home/editor/exploit/exploit.py

عندما يتم تنفيذ /home/editor/exploit/exploit.py بواسطة مستخدم editor، يتم استخدام inotify لمراقبة أحداث نظام الملفات. عندما يتم الوصول إلى ملف /opt/sudoable، يتم استبداله بـ /opt/goodbye. بعد إغلاق الملف، يتم استبداله بـ /opt/hello لترك الأمور في حالة "طبيعية".

بافتراض نجاح هذا السباق عندما يقوم مستخدم executor بتنفيذ sudo /opt/sudoable (وهو ما يحدث في أغلب الأحيان على جهازي)، يمكن لمستخدم editor أن يتسبب في قيام مستخدم executor بتنفيذ ثنائي ضار كـ root بغض النظر عن تجزئة SHA256 المحددة كقيمة Digest_Spec في sudoers.

البناء

قم بتشغيل make all

التشغيل

  1. قم بتنفيذ ./instantiate.sh
  2. قم بتشغيل tmux new-session واقسم اللوحة (Ctrl+b ثم "؛ استخدم Ctrl+b ثم السهم أعلى/أسفل للتبديل بين اللوحتين)
  3. في اللوحة العلوية، قم بتنفيذ sudo -u executor sudo /opt/sudoable ولاحظ الإخراج Hello uid=0
  4. في اللوحة السفلية، قم بتنفيذ sudo -u editor cp /opt/goodbye /opt/sudoable
  5. في اللوحة العلوية، قم بتنفيذ sudo -u executor sudo /opt/sudoable ولاحظ أنه يُطلب منك كلمة مرور (أي فشلت عملية sudo بسبب عدم تطابق التجزئة)
  6. في اللوحة السفلية، قم بتنفيذ sudo -u editor /home/editor/exploit/exploit.py
  7. في اللوحة العلوية، قم بتنفيذ sudo -u executor sudo /opt/sudoable عدة مرات ولاحظ الإخراج المتكرر لـ

مثال إخراج

اللوحة العلوية:

root@kitploit:~
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Hello uid=0

اللوحة السفلية:

root@kitploit:~
root@c600efec2da8:/# sudo -u editor cp /opt/goodbye /opt/sudoable

اللوحة العلوية:

root@kitploit:~
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for executor:

اللوحة السفلية:

root@kitploit:~
root@c600efec2da8:/# sudo -u editor /home/editor/exploit/exploit.py

اللوحة العلوية:

root@kitploit:~
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for executor:
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
sudo: unable to execute /opt/sudoable: Text file busy

عمل إضافي

في أي الحالات يكون تخفيف fexecve() فعالاً فعلياً؟ إذا كان لدى المستخدم صلاحية الكتابة إلى ملف sudoable ولكن ليس إلى الدليل الذي يوجد فيه، فيمكنه تعديل الملف الذي تم فتحه بواسطة sudo. إذا كان لدى المستخدم صلاحية الكتابة إلى الدليل ولكن ليس إلى الملف، فيمكنه نقل الملف خارج المسار وإعادة إنشائه بحيث يمكنه تعديله، ونعود إلى المربع الأول.

شكر وتقدير

شكرًا للوك (https://twitter.com/lukejahnke) لإخباري عن إعداد Digest_Spec، وتبادل بعض الأفكار والتفكير في استخدام inotify للحصول على POC نظيف عبر المستخدمين.

تنزيل الأداة
Goodbye uid=0