
Linux कर्नेल स्थानीय विशेषाधिकार वृद्धि (CVE-2026-31431) के लिए शोषण और डिटेक्टर, जो रूट प्राप्त करने के लिए पेज कैश को दूषित करता है, साथ में शमन मार्गदर्शन।
लिनक्स कर्नेल में 9 साल पुराना गंभीर दोष जो सेकंडों में रूट एक्सेस दिलाता है
| विशेषता | विवरण |
|---|---|
| CVE | CVE-2026-31431 |
| उपनाम | कॉपी फेल |
| प्रकार | स्थानीय विशेषाधिकार वृद्धि (LPE) |
| CVSS | 7.8 (उच्च) |
| खोजकर्ता | Theori (Xint Code) |
| प्रकटीकरण | 29 अप्रैल 2026 |
| घटक | लिनक्स कर्नेल का algif_aead सबसिस्टम |
2017 में पेश किए गए "इन-प्लेस" (in-place) ऑप्टिमाइज़ेशन में दोष (commit 72548b093ee3)। यह स्थानीय उपयोगकर्ता को सीधे कर्नेल के पेज कैश में नियंत्रित 4-बाइट लेखन करने की अनुमति देता है।
AF_ALG इंटरफ़ेस का उपयोग करता है/usr/bin/su) या संवेदनशील फ़ाइलों (/etc/passwd) के मेमोरी संस्करण को दूषित करता हैयह एक तार्किक डिज़ाइन बग है, मेमोरी ओवरफ़्लो नहीं। इसे पहचानने के लिए क्रिप्टोग्राफ़िक सबसिस्टम का गहन विश्लेषण आवश्यक था।
# Ubuntu/Debian
sudo apt update
sudo apt upgrade
sudo reboot
# RHEL/AlmaLinux/Rocky
sudo dnf update kernel
sudo reboot
# कर्नेल संस्करण जांचें
uname -r
⚠️ नया कर्नेल सक्रिय करने के लिए रीबूट अनिवार्य है।
# कमजोर मॉड्यूल की लोडिंग अक्षम करें
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/copyfail_mitigation.conf
# यदि पहले से उपयोग में है तो मॉड्यूल अनलोड करें
sudo rmmod algif_aead
# मॉड्यूल आमतौर पर कर्नेल में एकीकृत होता है
# इसे अक्षम करने के लिए बूट पैरामीटर जोड़ें
sudo grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
# परिवर्तन लागू करने के लिए रीबूट करें
sudo reboot
# पेज कैश को गर्म-स्थिति में शुद्ध करें
sudo sysctl -w vm.drop_caches=3
⚠️ नोट: यह पैच का विकल्प नहीं है। यह केवल एक पूरक उपाय है।
| तिथि | घटना |
|---|---|
| 29 अप्रैल | Theori द्वारा सार्वजनिक प्रकटीकरण |
| 1 मई | सक्रिय एक्सप्लॉइटेशन के पहले प्रयासों का पता चला |
# कर्नेल संस्करण प्राप्त करें
uname -r
# कमजोर है यदि:
# - v4.14 से v7.0-rc (2017 और अप्रैल 2026 के बीच जारी)
# - इसमें commit 72548b093ee3 शामिल है
# जाँचें कि algif_aead मॉड्यूल लोड है या नहीं
lsmod | grep algif_aead
# यदि सूची में दिखाई देता है, तो आपका सिस्टम कमजोर है
एक AI ने इस दोष की पहचान की जो डेवलपर्स से 9 वर्षों तक छिपा रहा। यह एक नए युग की शुरुआत है:
# 1. पहचान
python3 prueba.py
# exit 0 = कमजोर नहीं, 2 = कमजोर, 1 = परीक्षण त्रुटि
# 2. एक्सप्लॉइट (इंटरैक्टिव — su आपके अपने पासवर्ड के लिए पूछेगा)
python3 exploit.py --shell
python3 prueba.py
यह क्या करता है:
पुष्टि करता है कि AF_ALG और एल्गोरिदम authencesn(hmac(sha256),cbc(aes))
एक विशेषाधिकार-रहित प्रक्रिया से सुलभ हैं।
एक अस्थायी निर्देशिका में 4 KiB का सेंटिनल फ़ाइल बनाता है और पेज कैश भरता है।
sendmsg+cmsg के माध्यम से seqno_lo को PWND मार्कर पर सेट करके 8 बाइट AAD इनलाइन भेजता है, और फिर os.splice() के माध्यम से सेंटिनल के पेज कैश पेज से 32 बाइट्स को AF_ALG ऑपरेशन सॉकेट में कॉपी करता है।
डिक्रिप्शन शुरू करने के लिए recv() को कॉल करता है। प्रमाणीकरण जाँच
EBADMSG के साथ विफल होती है; अस्थायी लेखन फिर भी निष्पादित होता है।
फ़ाइल को फिर से पढ़ता है (पेज कैश, डिस्क नहीं) और मार्कर की खोज करता है।
आउटपुट वर्ग:
पूर्व शर्त पूरी नहीं हुई: AF_ALG या authencesn उपलब्ध नहीं। निकास 0।CVE-2026-31431 के लिए कमजोर: PWND मार्कर संशोधित पेज में डाला गया।निकास 2।
इन-प्लेस AEAD सम्मिलन पथ के माध्यम से पेज कैश संशोधित: पेज में लेखन हुआ,
लेकिन मार्कर अपेक्षित स्थिति में नहीं डाला गया।
कमजोर मानें। निकास 2।पेज कैश अक्षुण्ण: पैच किया गया। निकास 0।डिटेक्टर /usr/bin/su, /etc/passwd या अस्थायी निर्देशिका के बाहर किसी भी अन्य फ़ाइल को कभी संशोधित नहीं करता, और समाप्ति पर वह फ़ाइल हटा दी जाती है।
आउटपुट। ## LPE उपयोग
python3 exploit_cve_2026_31431.py # केवल पैच करता है, अगले चरण प्रिंट करता है
python3 exploit_cve_2026_31431.py --shell # पैच करता है और `su <उपयोगकर्ता>` चलाता है
कार्य:
/etc/passwd में चल रहे उपयोगकर्ता की UID लाइन खोजता है और 4-वर्ण UID फ़ील्ड काबाइट ऑफ़सेट ढूंढता है।
write4 निष्पादित करता है, UID को0000 से प्रतिस्थापित करता है।
pwd.getpwnam(उपयोगकर्ता) को कॉल करता है कि libc अब UID 0 रिपोर्ट करता है।--shell के साथ, execvp("su", ["su", उपयोगकर्ता]) निष्पादित करता है। अपना स्वयं का
पासवर्ड दर्ज करें। PAM /etc/shadow (अपरिवर्तित) के विरुद्ध सत्यापित करता है, फिरsetuid(getpwnam(user).pw_uid) 0 पर सेट होता है।
के लिए मल्टी-शॉट लेखन आवश्यक है; तदनुसार write4 का विस्तार करें।
कोई NSS कैश डेमॉन (nscd, sssd, systemd-userdbd) /etc/passwd की रीडिंग को
मास्क नहीं कर रहा है। यदि पैच लगाने के बाद भी getpwnam वास्तविक UID लौटाता है,
तो कैश को रीबूट करें या अनदेखा करें, या एक अलग उपयोगकर्ता चुनें।
/etc/passwd पेज पैच लगाने और su के निष्पादन के बीच कैश में बना रहना चाहिए।
व्यवहार में, यह सामान्य मेमोरी दबाव वाले किसी भी सिस्टम पर विश्वसनीय है।
डिस्क पर /etc/passwd फ़ाइल अपरिवर्तित रहती है।
ड्राई रन (exploit_cve_2026_31431.py बिना --shell) बाहर निकलते समय POSIX_FADV_DONTNEED के माध्यम से दूषित पेज को स्वचालित रूप से हटा देता है, इसलिए UID → नाम लुकअप तुरंत सामान्य हो जाते हैं।
--shell** का उपयोग करने के बाद, पेज तब तक दूषित रहता है जब तक इसे हटाया नहीं जाता।
जब तक यह दूषित है, UID 1000 → नाम हल करने वाला कोई भी ऑपरेशन (जैसे, ls,
फ़ाइल प्रबंधक, scp/sftp स्वामित्व जाँच) विफल होगा या संख्यात्मक पहचानकर्ता दिखाएगा। इसे हटाने के लिए:
# विशेषाधिकार-रहित: /etc/passwd के पेज कैश हटाने का अनुरोध करें:
python3 -c "import os; fd=os.open('/etc/passwd', os.O_RDONLY); \
os.posix_fadvise(fd, 0, 0, os.POSIX_FADV_DONTNEED); os.close(fd)"
# रूट कंसोल से:
echo 3 > /proc/sys/vm/drop_caches
रीबूट भी इसे हटा देता है।
write4 कैसे काम करता हैsendmsg([8 बाइट AAD], cmsg=[ALG_SET_OP=DECRYPT, ALG_SET_IV, ALG_SET_AEAD_ASSOCLEN=8],
flags=MSG_MORE)
splice(target_fd, pipe_w, 32, offset_src=file_offset)
splice(pipe_r, op_fd, 32)
recv(op_fd) # EBADMSG; अस्थायी लेखन पहले ही हो चुका है
AAD की स्थिति 4 से 7 के 4 बाइट (seqno_lo) authencesn द्वारा लक्ष्य स्कैटर सूची में लिखे जाते हैं, जो इस कोड पथ में वह पेज कैश पेज है जिसे हमने target_fd से निकाला था। पेज के भीतर लैंडिंग ऑफ़सेट उस offset_src से मेल खाता है जिसे हमने splice() को पास किया था।
जब तक पैच किया गया कर्नेल आपके डिस्ट्रीब्यूशन तक नहीं पहुँचता:
sudo tee /etc/modprobe.d/disable-algif-aead.conf <<<'install algif_aead /bin/false'
sudo rmmod algif_aead 2>/dev/null
पैच लगाने के बाद, test_cve_2026_31431.py को «पूर्व शर्त पूरी नहीं हुई» संदेश दिखाना चाहिए और कोड 0 के साथ बाहर निकलना चाहिए।
मूल सुधार AEAD इन-प्लेस ऑपरेशनों को आउट-ऑफ-प्लेस ऑपरेशनों में वापस लाता है, पेज कैश पेजों को संशोधन योग्य स्कैटर सूचियों से बाहर रखता है।
algif_aead को अक्षम करके अस्थायी शमन लागू करेंalgif_aead मॉड्यूल लोड करने के प्रयासों की खोज करेंअंतिम अपडेट: 3 मई 2026
स्थिति: 🔴 गंभीर - तत्काल कार्रवाई आवश्यक
| 2 मई | CISA ने अमेरिकी संघीय एजेंसियों को 15 मई से पहले पैच करने का आदेश दिया |
| 3 मई | Ubuntu, RHEL, AlmaLinux, Debian में पैच उपलब्ध |
| डिस्ट्रीब्यूशन | स्थिति | संदर्भ |
|---|
| Ubuntu | ✅ पैच किया गया | USN-8226-1 (20.04, 22.04, 24.04) |
| RHEL/AlmaLinux/Rocky | ✅ उपलब्ध | 1 मई से |
| Debian | ✅ सुरक्षा रिपॉजिटरी में | अपडेट उपलब्ध |
| Android | ⏳ जल्द ही | जून 2026 सुरक्षा बुलेटिन |