
पायथन में copyfail (CVE-2026-31431) का कार्यान्वयन
badsectorlabs/copyfail-go (CVE-2026-31431) का Python पोर्ट। केवल Linux; Python 3.10+ (os.splice) आवश्यक है।
यह टूल /etc/passwd पेज-कैश ट्रिक का उपयोग नहीं करता है।
su बाइनरी के पेज कैश को एम्बेडेड शेलकोड (Go main.go के समान पेलोड) के साथ अधिलेखित करता है, फिर su को निष्पादित करता है।/etc/passwd के माध्यम से getpwnam() को यह सोचने पर मजबूर करने से नहीं, बल्कि setuid रूट प्रोग्राम के रूप में su की दूषित कैश्ड छवि को चलाने से आती है कि आपका UID 0 है।समान CVE के लिए अन्य सार्वजनिक Python PoCs पेज कैश में /etc/passwd को पैच कर सकते हैं और फिर आपको su <user> चलाने का निर्देश दे सकते हैं। यह इस स्क्रिप्ट से एक अलग लक्ष्य फ़ाइल और एक अलग अनुवर्ती है।
केवल अधिकृत परीक्षण — केवल उन होस्टों पर उपयोग करें जिनके आप स्वामी हैं या जिनका मूल्यांकन करने की आपको स्पष्ट अनुमति है।
chmod +x copyfail_su.py
# इंटरैक्टिव-शैली प्रवाह (--exec के बिना copyfail-go के समान विचार)
./copyfail_su.py --backup /tmp/su.bak
# किसी अन्य प्रोग्राम को उन्नत रूप से चलाएं (पथ को argv के रूप में su को पास करता है; exec-argv1 पेलोड का उपयोग करता है)
./copyfail_su.py --backup /tmp/su.bak --exec /full/path/to/binary
सफल रन के बाद, वास्तविक su को पुनर्स्थापित करें।
--backup के बिना पुनर्प्राप्तिPoC /usr/bin/su के लिए पेज कैश को दूषित करता है। जब तक आप सत्यापित या पुनर्स्थापित नहीं करते, तब तक यह न मानें कि डिस्क पर मौजूद फ़ाइल अभी भी विश्वसनीय है।
/usr/bin/su के स्वामी पैकेज को पुनर्स्थापित करें (पहले इसे खोजें, फिर पुनर्स्थापित करें):
rpm -qf /usr/bin/su फिर sudo dnf reinstall shadow-utils (रिपोर्ट किए गए पैकेज नाम का उपयोग करें)।dpkg -S /usr/bin/su फिर sudo apt install --reinstall <package>।सत्यापित करें: /usr/bin/su में अप्रत्याशित परिवर्तनों के लिए sudo rpm -V <package>, या Debian-शैली प्रणालियों पर debsums।
वैकल्पिक: पुरानी कैश धारणाओं से बचने के लिए पुनर्स्थापना के बाद रीबूट करें।
यदि आप रूट के रूप में पुनर्स्थापित नहीं कर सकते: रिकवरी बूट, लाइव USB, या ज्ञात-अच्छे समान distro/version/arch छवि से /usr/bin/su को बदलें; स्वामित्व root:root और मोड 4755 () सुनिश्चित करें।
-rwsr-xr-x