
C-based PoC for CVE-2019-5736
यह रिपॉजिटरी CVE-2019-5736 के लिए एक C-आधारित प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट रखती है।
यह कमजोरी एक दुर्भावनापूर्ण Docker कंटेनर को होस्ट के runc बाइनरी को ओवरराइट करने और होस्ट पर रूट विशेषाधिकारों के साथ मनमाने कमांड निष्पादित करने की अनुमति देती है – जिससे होस्ट सिस्टम पूरी तरह से समझौता हो जाता है।
मूल Go-आधारित PoC से प्रेरित, Frichetten द्वारा
यह कोड केवल शैक्षिक उद्देश्यों के लिए है। इसे किसी भी ऐसे सिस्टम पर न चलाएं जिसके आप मालिक नहीं हैं या जिसके परीक्षण की अनुमति नहीं है। दुरुपयोग के कानूनी परिणाम हो सकते हैं।
.
├── docker/
│ └── Dockerfile
├── lib/
│ └── exploit.h
├── scripts/
│ ├── build_docker.sh
│ ├── purge_docker_installation.sh
│ ├── setup_env.sh
│ ├── start_docker.sh
│ └── trigger_exploit.sh
├── src/
│ ├── exploit.c
│ └── main.c
├── LICENSE
├── Makefile
└── README.md
यह एक्सप्लॉइट निम्नलिखित पर परीक्षण किया गया है:
sudo ./scripts/install_dependencies.sh
नोट: यदि आपने पहले से
wgetऔरbuild-essentialस्थापित कर लिए हैं तो आप सुरक्षित रूप से इसे छोड़ सकते हैं।
sudo ./scripts/setup_env.sh
यह स्क्रिप्ट systemd या सॉकेट सक्रियण के बिना Docker स्थापित करती है। यह VM लैब के लिए आदर्श है।
sudo dockerd
नोट: इसे बैकग्राउंड में चलाने के लिए आपको दूसरा टर्मिनल चाहिए।
sudo ./scripts/build_docker.sh
यह स्क्रिप्ट एक्सप्लॉइट को संकलित करती है और अंदर बाइनरी के साथ एक Docker इमेज बनाती है।
नोट: आप
makeचलाकर मैन्युअल रूप से भी एक्सप्लॉइट बाइनरी बना सकते हैं।
आप Docker को पूरी तरह से हटा सकते हैं और सिस्टम को पूर्व-स्थापना स्थिति में पुनर्स्थापित कर सकते हैं:
sudo ./scripts/purge_docker_installation.sh
पहले हम अपना एक्सप्लॉइट कंटेनर प्रारंभ करते हैं। आप या तो इस कमांड का उपयोग कर सकते हैं:
sudo docker run -it --name exp --rm runc_exploit
या शामिल शेल स्क्रिप्ट:
sudo ./scripts/start_docker.sh
कंटेनर के अंदर अब हम अपना एक्सप्लॉइट बाइनरी प्रारंभ कर सकते हैं:
./exploit -c "$COMAND"
बाइनरी तीन आर्गुमेंट लेता है:
-hउपयोग संदेश प्रिंट करता है और-cउस कमांड स्ट्रिंग पेलोड को परिभाषित करता है जिसे हम होस्ट पर निष्पादित करना चाहते हैं। अंतिम-dआर्गुमेंट निष्पादन के दौरान डीबग प्रिंट को टॉगल करता है (जैसे/procकी जानकारी पार्स करना)।
नोट: यदि
-cआर्गुमेंट प्रदान नहीं किया जाता है तो एक्सप्लॉइटcp /etc/shadow > /tmp/pwned && chmod 644 /tmp/pwnedनिष्पादित करेगा।
एक्सप्लॉइट अब होस्ट पर एक आने वाली runc प्रक्रिया की प्रतीक्षा करता है, निष्पादित करें
sudo ./scripts/trigger_exploit.sh
नोट: आप होस्ट पर
docker execमैन्युअल रूप से निष्पादित करके भी एक्सप्लॉइट को ट्रिगर कर सकते हैं, लेकिन वर्तमान PoC संस्करण के काम करने के लिए समय महत्वपूर्ण है। इसलिए इसमें कुछ प्रयास लग सकते हैं...
यदि runc सफलतापूर्वक एक्सप्लॉइट किया गया तो आपको समान आउटपुट देखना चाहिए:

अब हम अपनी pwned shadow फ़ाइल खोलने में सक्षम हैं:
