Dirty Pipe तैनाती
इस चैलेंज के लिए, आप CVE-2022-0847 एक्सप्लॉइट का उपयोग करके "cat.txt" read-only फ़ाइल को ओवरराइट करना चाहते हैं
एक्सप्लॉइट का उपयोग करके इसे करने के कई तरीके हैं
निर्भरताएँ
- Linux कर्नेल संस्करण 5.8 या उसके बाद का (असुरक्षित)
- gcc (GNU Compiler Collection) एक्सप्लॉइट कोड को कंपाइल करने के लिए
पहली बार सेटअप
- एक असुरक्षित वातावरण सेट करें:
- Linux उपयोगकर्ताओं के लिए:
- कर्नेल संस्करण 5.8 या नए, लेकिन पैच किए गए संस्करणों से पुराने वाले Linux डिस्ट्रीब्यूशन का उपयोग करें:
- पैच किए गए संस्करणों में 5.16.11, 5.15.25, और 5.10.102 शामिल हैं।
- निम्न कमांड चलाकर अपने सिस्टम पर कर्नेल संस्करण सत्यापित करें:
uname -r
- यदि आपका कर्नेल पहले से पैच किया हुआ है, तो असुरक्षित मानदंडों से मेल खाने के लिए आपको डाउनग्रेड करने या किसी भिन्न Linux इंस्टॉलेशन का उपयोग करने की आवश्यकता हो सकती है।
- Windows उपयोगकर्ताओं के लिए:
- एक वर्चुअल मशीन स्थापित करें:
- Oracle VM VirtualBox या VMware जैसी वर्चुअल मशीन डाउनलोड करें और स्थापित करें।
- एक असुरक्षित Linux डिस्ट्रीब्यूशन डाउनलोड करें:
- Kali Linux का पुराना संस्करण डाउनलोड करने के लिए Kali Linux Archives पर जाएँ।
- सुझाए गए संस्करणों में 5.8 - 5.15 कर्नेल वाला कोई भी रिलीज़ शामिल है (जैसे, Kali 2021.1)।
- वैकल्पिक रूप से, मेल खाते कर्नेल संस्करणों वाले अन्य Linux डिस्ट्रीब्यूशन भी काम करेंगे (जैसे, Ubuntu या Debian के पुराने संस्करण)।
- VM सेट करें:
- VirtualBox में एक नई वर्चुअल मशीन बनाएं:
- कम से कम 2 GB RAM और 10 GB डिस्क स्थान आवंटित करें।
- Linux डिस्ट्रीब्यूशन स्थापित करने के लिए डाउनलोड की गई ISO फ़ाइल का उपयोग करें।
- इंस्टॉलेशन के बाद, निम्न कमांड चलाकर कर्नेल संस्करण की पुष्टि करें:
uname -r
- आवश्यक टूल्स स्थापित करें:
- वातावरण सेट करने के बाद, सुनिश्चित करें कि निम्नलिखित टूल्स स्थापित हैं:
- gcc: एक्सप्लॉइट कोड को कंपाइल करने के लिए आवश्यक।
- make: यदि आवश्यक हो तो प्रोजेक्ट्स बनाने के लिए।
- अपने पैकेज मैनेजर को अपडेट करें और टूल्स स्थापित करें:
sudo apt update
sudo apt install gcc make -y
चैलेंज शुरू करना
- शुरू करें:
कर्नेल संस्करण की जाँच करना सुनिश्चित करें!
इस github लिंक का उपयोग करें (https://github.com/basharkey/CVE-2022-0847-dirty-pipe-checker.git)
जाँच करें कि cat.txt फ़ाइल read-only है
सीमाएँ निम्नलिखित हैं:
हमलावर के पास read अनुमतियाँ होनी चाहिए (क्योंकि उसे splice() करके एक पेज को पाइप में डालना होता है)
ऑफसेट पेज बाउंड्री पर नहीं होना चाहिए (क्योंकि उस पेज का कम से कम एक बाइट पाइप में splice किया गया होना चाहिए)
write पेज बाउंड्री को पार नहीं कर सकता (क्योंकि बाकी के लिए एक नया anonymous बफर बन जाएगा)
फ़ाइल का आकार नहीं बदला जा सकता (क्योंकि पाइप का अपना पेज फिल प्रबंधन होता है और यह पेज कैश को यह नहीं बताता कि कितना डेटा जोड़ा गया है)
- एक्सप्लॉइट तैनात करें:
-
एक पाइप बनाएं।
-
पाइप को मनमाने डेटा से भरें (सभी रिंग एंट्रीज़ में PIPE_BUF_FLAG_CAN_MERGE फ्लैग सेट करने के लिए)।
-
पाइप को खाली करें (सभी struct pipe_buffer इंस्टेंसेस में struct pipe_inode_info रिंग पर फ्लैग सेट छोड़ते हुए)।
-
टार्गेट फ़ाइल (O_RDONLY के साथ खोली गई) से डेटा को टार्गेट ऑफसेट से ठीक पहले पाइप में splice करें।
-
पाइप में मनमाना डेटा लिखें; यह डेटा नया anonymous struct pipe_buffer बनाने के बजाय कैश की गई फ़ाइल पेज को ओवरराइट करेगा क्योंकि PIPE_BUF_FLAG_CAN_MERGE सेट है।
-
cat.txt को ओवरराइट करें, निम्न को बदलें
I'm a cat
1444
को
I'm a dog
2025
-
यह जाँचने के लिए कि यह काम करता है या नहीं, check_cat.sh का उपयोग करें
chmod +x check_cat.sh
./check_cat.sh
चैलेंज पुनः निर्माण
निम्न का उपयोग करें
chmod +x cat_generate.sh
./cat_generate.sh
चैलेंज प्रकाशित करना
संकेत hints.txt में हैं