
# CVE-2026-31431 के लिए बहु-भाषा शैक्षिक एक्सप्लॉइट कार्यान्वयन algif_aead मॉड्यूल के माध्यम से Linux कर्नेल में स्थानीय विशेषाधिकार वृद्धि, एक सुरक्षित डिटेक्टर और CTF उपयोग मार्गदर्शन के साथ।
शैक्षिक रिपॉजिटरी जिसमें Copy Fail एक्सप्लॉइट के कई भाषाओं में कार्यान्वयन हैं।
@shotafry द्वारा निर्मित और अनुरक्षित — क्योंकि CVE पढ़ना पर्याप्त नहीं है। इसे दोहराना ज़रूरी है।
Copy Fail Linux कर्नेल में एक स्थानीय विशेषाधिकार वृद्धि (LPE) भेद्यता है, जिसे CVE-2026-31431 के रूप में वर्गीकृत किया गया है। यह कर्नेल के क्रिप्टोग्राफिक सबसिस्टम को प्रभावित करता है, विशेष रूप से algif_aead मॉड्यूल जो AF_ALG सॉकेट के माध्यम से प्रमाणित एन्क्रिप्शन (AEAD) संचालन का प्रबंधन करता है।
यह दोष 2017 में authencesn मॉड्यूल के अनुकूलन में पेश किया गया था और लगभग 9 वर्षों तक अनिर्धारित रहा, जो व्यावहारिक रूप से सभी आधुनिक Linux वितरणों में मौजूद था।
Copy Fail को अन्य ऐतिहासिक LPE से अलग बनाता है:
| विशेषता | Copy Fail | सामान्य LPE |
|---|---|---|
| रेस कंडीशन की आवश्यकता | ❌ नहीं | ✅ हाँ |
| कर्नेल के विशिष्ट ऑफसेट की आवश्यकता | ❌ नहीं | ✅ हाँ |
| सभी डिस्ट्रोस पर कार्यात्मक | ✅ हाँ | ❌ आमतौर पर नहीं |
| विश्वसनीयता | 100% नियतात्मक | परिवर्तनशील |
| डिस्क को संशोधित करता है | ❌ नहीं (केवल RAM) | निर्भर करता है |
यह भेद्यता Theori की शोध टीम के Taeyang Lee द्वारा खोजी गई थी। पूरी एक्सप्लॉइट श्रृंखला Xint Code Research टीम द्वारा विकसित की गई थी, जिसने Linux कर्नेल के crypto/ सबसिस्टम पर AI-सहायता प्राप्त विश्लेषण का उपयोग करके प्रक्रिया का दस्तावेजीकरण किया।
सार्वजनिक प्रकटीकरण में कार्यात्मक PoC, पूर्ण तकनीकी विश्लेषण और copy.fail पर दस्तावेज़ीकरण शामिल है।
CVE: CVE-2026-31431
CVSS: 7.8 — उच्च
वेक्टर: स्थानीय
प्रभाव: पूर्ण विशेषाधिकार वृद्धि (root)
डिस्ट्रोस: सभी Linux वितरण जिनमें कर्नेल >= 2017 बिना पैच के
CVSS 7.8 है और यह गंभीर (9+) तक नहीं पहुँचता केवल इसलिए क्योंकि इसके लिए पहले से स्थानीय पहुँच की आवश्यकता होती है — हमलावर के पास पहले से ही सिस्टम पर एक सत्र होना चाहिए। क्लाउड वातावरण और Docker कंटेनरों में, यह आवश्यकता जितनी लगती है उससे कहीं अधिक आसानी से पूरी होती है।
Linux कर्नेल हाल ही में पढ़ी गई फ़ाइलों को RAM में संग्रहीत करता है। इसे page cache कहा जाता है। जब कोई प्रक्रिया /etc/passwd पढ़ती है, तो कर्नेल डिस्क पर नहीं जाता — वह RAM में मौजूद प्रति परोसता है। यह तेज़ है, लेकिन एक हमले की सतह बनाता है: यदि आप डिस्क को छुए बिना RAM में उस प्रति को संशोधित कर सकते हैं, तो सिस्टम नकली डेटा देखेगा।
algif_aead मॉड्यूल AF_ALG सॉकेट के माध्यम से उपयोगकर्ता स्थान से AEAD संचालन करने की अनुमति देता है। बग 2017 में पेश किए गए अनुकूलन में है: जब किसी फ़ाइल के पृष्ठों को सॉकेट में पास करने के लिए splice() का उपयोग किया जाता है, तो page cache के वे पृष्ठ क्रिप्टोग्राफिक ऑपरेशन की गंतव्य (लिखने योग्य) स्कैटरलिस्ट में समाप्त हो जाते हैं।
परिणाम: कोई भी विशेषाधिकार-रहित उपयोगकर्ता किसी भी फ़ाइल में 4 नियंत्रित बाइट्स लिख सकता है जिसे वह पढ़ सकता है, बिना डिस्क को छुए।
विशेषाधिकार-रहित उपयोगकर्ता
│
▼
AF_ALG सॉकेट खोलता है (authencesn)
│
▼
sendmsg() — seqno_lo में हमारे 4 बाइट्स के साथ AEAD पैरामीटर
│
▼
splice() — फ़ाइल → pipe → socket op
[BUG] फ़ाइल की page cache गंतव्य scatterlist में रह जाती है
│
▼
recv() AEAD ऑपरेशन ट्रिगर करता है
प्रमाणीकरण विफल होता है (EBADMSG) लेकिन scratch-write पहले ही हो चुका होता है
│
▼
/etc/passwd (page cache) अब कहता है: उपयोगकर्ता → UID 0
│
▼
su <उपयोगकर्ता> → PAM वास्तविक पासवर्ड सत्यापित करता है → setuid(0) → ROOT
कल्पना करें कि कर्नेल के पास महल का रजिस्टर है (/etc/passwd)। Copy Fail ऐसा है जैसे यह खोजना कि यदि आप महल की जादू कार्यशाला को एक बहुत विशिष्ट क्रम में खोलते हैं, तो रजिस्टर गलती से आपकी कार्य मेज पर रह जाता है — और आप अपने पद को "साधारण सैनिक" से "राजा" में एक कलम से बदल सकते हैं। अभिलेखपाल (PAM) आपका पासवर्ड जाँचता है लेकिन मूल रजिस्टर की जाँच नहीं करता, केवल आपके सामने मौजूद प्रति की। आप राजा हैं।

>= ~2017 बिना CVE-2026-31431 के पैच केalgif_aead मॉड्यूल उपलब्ध और लोड करने योग्यइसे वास्तव में छोड़ा जा सकता है और सीधे किसी एक एक्सप्लॉइट का परीक्षण किया जा सकता है, लेकिन यह भी मान्य है यदि हम उन्हें अपलोड या बनाने का जोखिम नहीं लेना चाहते और केवल देखना चाहते हैं कि यह काम करता है या नहीं, लेकिन एक्सप्लॉइट्स में यह जाँचने का अपना कार्य है कि संबंधित सिस्टम भेद्य है या नहीं।
# कर्नेल संस्करण देखें
uname -a
# जाँचें कि एल्गोरिथ्म उपलब्ध है या नहीं
grep -i authencesn /proc/crypto
# जाँचें कि मॉड्यूल लोड है या नहीं
lsmod | grep alg
यदि grep -i authencesn /proc/crypto authencesn(hmac(sha256),cbc(aes)) लौटाता है, तो सिस्टम भेद्य है।
| भाषा | लक्ष्य पर आवश्यकता | पूर्व संकलन |
|---|---|---|
| C | कोई नहीं (स्थिर बाइनरी) | संकलन मशीन पर gcc |
| Python | Python 3.10+ | नहीं |
| Rust | कोई नहीं (स्थिर बाइनरी) | संकलन मशीन पर rustc |
| Go | कोई नहीं (स्थिर बाइनरी) | संकलन मशीन पर go |
| Ruby | Ruby + gem fiddle (डिफ़ॉल्ट रूप से शामिल) | नहीं |
| Perl | Perl 5 (व्यावहारिक रूप से हर Linux में शामिल) | नहीं |
इस रिपॉजिटरी में 6 भाषाओं में लागू एक्सप्लॉइट है, सभी कार्यात्मक रूप से समतुल्य हैं, स्पेनिश में शैक्षिक टिप्पणियों के साथ।
copy_fail_exploit.c → C — स्थिर बाइनरी, शून्य निर्भरताएँ
copy_fail_exploit.py → Python — अधिक पठनीय, सीखने के लिए आदर्श
copy_fail_exploit.rs → Rust — विडंबना: "सुरक्षित" भाषा कर्नेल का शोषण करती है
copy_fail_exploit.go → Go — स्थिर बाइनरी, अत्यधिक पोर्टेबल
copy_fail_exploit.rb → Ruby — Rails सर्वरों पर सर्वव्यापी
copy_fail_exploit.pl → Perl — सबसे मूक, हर Linux में मौजूद
test_cve_2026_31431.py → डिटेक्टर — बिना कुछ शोषण किए भेद्यता सत्यापित करता है
python3 test_cve_2026_31431.py
# संकलन
gcc copy_fail_exploit.c -o copy_fail_c
# Dry-run (बाहर निकलते समय साफ करता है, कोई निशान नहीं छोड़ता)
./copy_fail_c
# पूर्ण एक्सप्लॉइट
./copy_fail_c --shell
# Dry-run
python3 copy_fail_exploit.py
# पूर्ण एक्सप्लॉइट
python3 copy_fail_exploit.py --shell