
CVE-2026-31431 के लिए कार्यशील प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो AF_ALG AEAD पेज कैश भ्रष्टाचार के माध्यम से Linux कर्नेल में स्थानीय विशेषाधिकार वृद्धि है, जो रूट शेल प्रदान करता है।
2026-04-29 — मैं इस एक्सप्लॉइट को MyDigitalLife फ़ोरम पर साझा करने के एक दिन बाद प्रकाशित कर रहा हूँ। इसे Python की आवश्यकता नहीं है; यह C में लिखा गया है और निम्न का उपयोग करके सबसे छोटे संभव आकार में संकलित किया गया है:
musl-gcc -static -Os -o exploit exploit.c -sगंभीर खतरा। एक्सप्लॉइट बाइनरी बिना निर्भरता के संकलित है और किसी भी Linux सिस्टम पर कमजोरियों का परीक्षण करने के लिए उपयोग की जा सकती है
CVE-2026-31431 Linux कर्नेल में NIST-पुष्टि की गई एक कमजोरी है जो एक अन-विशेषाधिकार प्राप्त स्थानीय उपयोगकर्ता को सेकंडों में
rootशेल प्राप्त करने की अनुमति देती है। CVE-2026-31431 के लिए सार्वजनिक रूप से प्रसारित एक्सप्लॉइट के मद्देनज़र, मैंने अपने आंतरिक बुनियादी ढांचे के जोखिम का मूल्यांकन करने के लिए एक बाइनरी प्रूफ-ऑफ-कॉन्सेप्ट (PoC) विकसित किया है। जबकि कुछ वातावरण su के उपयोग को प्रतिबंधित करते हैं, यह कमजोरी साझा सर्वरों के लिए विशेष रूप से महत्वपूर्ण है क्योंकि यह अंतर्निहित कर्नेल मेमोरी प्रबंधन को लक्षित करती है। परिणामस्वरूप, कोई भी SETUID बाइनरी — जिसमें sudo, passwd, mount, या newgrp शामिल हैं — का उपयोग एक्सप्लॉइट को ट्रिगर करने और root शेल प्रदान करने के लिए किया जा सकता है। कर्नेल को पैच करने के लिए तत्काल प्रशासनिक कार्रवाई आवश्यक है, क्योंकि मानक उपयोगकर्ता-स्थान प्रतिबंध इस खतरे को कम करने के लिए अपर्याप्त हैं। अनपैच्ड कर्नेल चलाने वाला कोई भी Linux सिस्टम जोखिम में है।
मेरा अपना कार्यशील एक्सप्लॉइट · Linux कर्नेल · AF_ALG क्रिप्टोग्राफ़िक इंटरफ़ेस (AEAD)
डिस्क पर फ़ाइल को छुए बिना कर्नेल पेज कैश में /usr/bin/su को प्रतिस्थापित करता है
स्थानीय शेल एक्सेस पर्याप्त है — कोई अतिरिक्त विशेषाधिकार आवश्यक नहीं
अनपैच्ड Linux वितरणों को प्रभावित करता है

CVE-2026-31431 Linux कर्नेल क्रिप्टोग्राफ़िक सबसिस्टम में स्कैटर-गैदर I/O संचालन और पेज कैश संदर्भों के प्रबंधन में एक बग है — विशेष रूप से AEAD एल्गोरिदम के लिए AF_ALG सॉकेट कार्यान्वयन में (crypto/af_alg.c, crypto/aead.c)।
| गुण | मान |
|---|---|
| पहचानकर्ता | CVE-2026-31431 |
| संदर्भ | NIST NVD |
| प्रकार | स्थानीय विशेषाधिकार वृद्धि (LPE) |
| घटक | Linux कर्नेल — AF_ALG / AEAD (authencesn) |
| आवश्यक पहुँच | अन-विशेषाधिकार प्राप्त स्थानीय उपयोगकर्ता |
| प्रभाव | इंटरैक्टिव root शेल |
| एक्सप्लॉइट स्थिति | GitHub पर सार्वजनिक रूप से उपलब्ध कार्यशील PoC |
| स्थिरता | कोई नहीं — संशोधन केवल RAM में मौजूद है; रिबूट मूल स्थिति को पुनर्स्थापित करता है |
Linux कर्नेल AF_ALG सॉकेट के माध्यम से उपयोगकर्ता स्थान पर एक क्रिप्टोग्राफ़िक इंटरफ़ेस उजागर करता है। कमजोरी इस तथ्य में निहित है कि AEAD डिक्रिप्शन ऑपरेशन के दौरान, कर्नेल डिक्रिप्शन आउटपुट को अस्थायी बफर के बजाय सीधे स्रोत फ़ाइल के पेज कैश पृष्ठों पर मैप करता है। एक हमलावर इस प्रकार डिस्क पर संशोधित किए बिना, root विशेषाधिकारों के बिना, और फाइलसिस्टम में कोई दृश्यमान निशान छोड़े बिना किसी भी फ़ाइल की इन-मेमोरी सामग्री को अधिलेखित कर सकता है।
| सिस्टम | स्थिति |
|---|---|
| Ubuntu 24.04 (बेयर मेटल / VM) | ⚠️ अनपैच्ड कर्नेल पर कमजोर |
| Debian, Fedora, Arch अनपैच्ड कर्नेल पर | ⚠️ कमजोर |
CONFIG_SECURITY_LOCKDOWN_LSM वाले वितरण | ✅ संभवतः सुरक्षित |
nosuid या ProtectSUID (systemd) वाले सिस्टम | ✅ सुरक्षित |
AppArmor/SELinux द्वारा AF_ALG अवरुद्ध करने वाले सिस्टम | ✅ सुरक्षित |
| macOS, Windows (मूल) | ✅ प्रभावित नहीं |
एक्सप्लॉइट में दो घटक होते हैं: /tmp/x पर एक सहायक स्क्रिप्ट और AF_ALG पर आधारित एक भ्रष्टाचार लूप। स्रोत कोड विश्लेषण पर आधारित एक सटीक वॉकथ्रू निम्नलिखित है:
1. सहायक स्क्रिप्ट सेटअप
एक्सप्लॉइट निम्नलिखित सामग्री के साथ /tmp/x बनाता है:
#!/bin/sh
export TERM=xterm-256color
exec /bin/sh
यह अनुमतियों को 0755 पर सेट करता है। कारण: /usr/bin/su लॉन्च पर पर्यावरण चर (TERM सहित) हटा देता है। सहायक स्क्रिप्ट वास्तविक शेल शुरू करने से पहले उन्हें पुनर्स्थापित करती है, जिससे एक कार्यशील टर्मिनल सुनिश्चित होता है।
2. ELF पेलोड निर्माण
कच्चे शेलकोड वाला एक न्यूनतम 158-बाइट x86_64 ELF बाइनरी मेमोरी में बनाया गया है। ऑफसेट 150 पर स्ट्रिंग /bin/sh को फिर memcmp/memcpy के माध्यम से /tmp/x\0 में पैच किया जाता है। विवरण के लिए ELF पेलोड देखें।
3. /usr/bin/su को केवल-पठन मोड में खोलना
int su_fd = open("/usr/bin/su", O_RDONLY);
फ़ाइल केवल-पठन मोड में खोली जाती है — एक्सप्लॉइट को किसी भी लेखन अनुमति की आवश्यकता नहीं होती है।
4. भ्रष्टाचार लूप — 4 बाइट्स के 39 पुनरावृत्तियाँ
पेलोड (158 बाइट्स) को 4-बाइट चंक्स (39 पूर्ण चंक्स) में संसाधित किया जाता है। प्रत्येक चंक corrupt_binary_chunk() के माध्यम से पारित किया जाता है, जो निम्न कार्य करता है:
AF_ALG सॉकेट बनाता है (SOCK_SEQPACKET)authencesn(hmac(sha256),cbc(aes)) से बाइंड करता है — एक यौगिक AEAD एल्गोरिदमop_sock) स्वीकार करता है'A' + 4 पेलोड बाइट्स) और तीन CMSGs के साथ sendmsg भेजता है: ALG_OP_DECRYPT, IV (20 बाइट्स), assoclen=8splice करता है: su_fd → pipe → op_sock (कर्नेल के माध्यम से ज़ीरो-कॉपी)recv() के माध्यम से अंतिम रूप देता है — यहीं पर कर्नेल गलती से पेज कैश को अधिलेखित कर देता है5. निष्पादन
execve("/usr/bin/su", args, NULL);
कर्नेल /usr/bin/su को पेज कैश के माध्यम से लोड करता है — जो अब ज़हरीला हो चुका है। SUID बिट (chmod u+s) बरकरार है, इसलिए कर्नेल फ़ाइल को root के रूप में निष्पादित करता है। शेलकोड setuid(0) → execve("/tmp/x") → इंटरैक्टिव root शेल चलाता है।
flowchart TD
A[अन-विशेषाधिकार प्राप्त स्थानीय उपयोगकर्ता] --> B["/tmp/x सहायक स्क्रिप्ट बनाता है\nchmod 0755"]
B --> C["158-बाइट ELF पेलोड बनाता है\nपैच: /bin/sh → /tmp/x"]
C --> D["open /usr/bin/su O_RDONLY\nकोई लेखन अनुमति आवश्यक नहीं"]
D --> E[लूप: 4 बाइट्स के 39 चंक्स]
E --> F[socket AF_ALG SOCK_SEQPACKET]
F --> G["bind: authencesn hmac sha256 cbc aes"]
G --> H["setsockopt: 72B कुंजी + authsize=4"]
H --> I[accept → op_sock]
I --> J["sendmsg: 8B डेटा + 3x CMSG\nDECRYPT / IV 20B / assoclen=8"]
J --> K["splice: su_fd → pipe → op_sock\nकर्नेल के माध्यम से ज़ीरो-कॉपी"]
K --> L[recv → AEAD ऑपरेशन अंतिम रूप देता है]
L --> M["कर्नेल बग: डिक्रिप्शन आउटपुट\nsu_fd के पेज कैश को अधिलेखित करता है"]
M --> N{अगला चंक?}
N -->|हाँ| E
N -->|नहीं| O["execve /usr/bin/su"]
O --> P["कर्नेल /usr/bin/su लोड करता है\nज़हरीले पेज कैश से"]
P --> Q["SUID बिट बरकरार\nकर्नेल root के रूप में निष्पादित करता है"]
Q --> R["शेलकोड: setuid 0 syscall 105"]
R --> S["execve /tmp/x syscall 59"]
S --> T[इंटरैक्टिव root शेल]