
Linux के लिए स्थानीय विशेषाधिकार वृद्धि (local privilege escalation) शोषण, CVE-2026-31431 के लिए, जो AF_ALG क्रिप्टो API का दुरुपयोग splice() के साथ करके पेज कैश (page cache) को संशोधित करता है और रूट शेल (root shell) उत्पन्न करता है।
इस रिपॉजिटरी में CVE-2026-31431 के लिए एक छोटा Linux लोकल प्रिविलेज एस्केलेशन PoC शामिल है, जिसे "कॉपी फेल" के नाम से भी जाना जाता है।
यह एक्सप्लॉइट AF_ALG यूज़रस्पेस क्रिप्टो API में Linux कर्नेल algif_aead पथ को लक्षित करता है। यह कर्नेल को /usr/bin/su के पेज कैश में 4-बाइट चंक्स में लिखने के लिए मजबूर करने हेतु AF_ALG के साथ splice() का उपयोग करता है, और फिर पेज कैश संशोधित होने के बाद su को निष्पादित करता है।
copy_fail_exp.py में मौजूद PoC चार काम करता है:
authencesn(hmac(sha256),cbc(aes)) के साथ aead के लिए एक AF_ALG सॉकेट खोलता है।setsockopt() मानों के साथ रिक्वेस्ट को कॉन्फ़िगर करता है।splice() कॉल का उपयोग करता है, जो बग्गी कर्नेल पथ है।/bin/sh शामिल है।zlib ब्लॉब यादृच्छिक डेटा नहीं है। यह एक कॉम्पैक्ट पेलोड है जिसका उद्देश्य पेज कैश में /usr/bin/su की शुरुआत को बदलना है ताकि su का अगला निष्पादन रूट शेल उत्पन्न करे।
कमजोर कोड Linux कर्नेल 4.14-युग के algif_aead परिवर्तनों में पेश किया गया था और इन-प्लेस ऑप्टिमाइज़ेशन को रिवर्ट करने वाले अपस्ट्रीम फिक्स तक मौजूद रहा।
algif_aead इन-प्लेस पथ शामिल है।AF_ALG क्रिप्टो API सक्षम है, जो अधिकांश सामान्य-उद्देश्य Linux डिस्ट्रीब्यूशन पर डिफ़ॉल्ट है।| डिस्ट्रीब्यूशन | कर्नेल |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-1007-aws |
| Amazon Linux 2023 | 6.18.8-9.213.amzn2023 |
| RHEL 10.1 |
6.18.226.19.127.0डाउनस्ट्रीम LTS शाखाएं केवल तभी सुरक्षित हैं जब वेंडर बैकपोर्ट उस कर्नेल पैकेज में आ जाए जिसे आप वास्तव में चला रहे हैं।
अपनी खुद की लैब VM या कंटेनर होस्ट का उपयोग करें। इसे प्रोडक्शन सिस्टम पर न चलाएं।
/usr/bin/su मौजूद है और setuid-root है।python3 copy_fail_exp.py
/usr/bin/su को पैच करती है और फिर su को आमंत्रित करती है। आपको रूट शेल में समाप्त होना चाहिए या पर्यावरण के आधार पर रूट प्रॉम्प्ट दिखना चाहिए।स्क्रिप्ट में Python 3 स्टैंडर्ड लाइब्रेरी के अलावा कोई अतिरिक्त निर्भरता नहीं है।
python3 copy_fail_exp.py
यदि आप पहले लक्ष्य का निरीक्षण करना चाहते हैं, तो स्क्रिप्ट वर्तमान में डिफ़ॉल्ट रूप से /usr/bin/su पर सेट है।
यदि आप डाउनस्ट्रीम कर्नेल बनाए रखते हैं, तो सही फिक्स उस अपस्ट्रीम रिवर्ट को बैकपोर्ट करना है जो इन-प्लेस AEAD ऑप्टिमाइज़ेशन को हटाता है:
a664bf3d603dc3bdcf9ae47cc21e0daec706d7a572548b093ee3 इन-प्लेस परिवर्तन को रिवर्ट करता है।डाउनस्ट्रीम कर्नेल ट्री के लिए अनुशंसित वर्कफ़्लो:
git cherry-pick a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5
make olddefconfig
make -j"$(nproc)"
make modules_install
make install
reboot
यदि आप स्वयं कर्नेल का पुनर्निर्माण नहीं कर रहे हैं, तो वेंडर कर्नेल पैकेज स्थापित करें जिसमें बैकपोर्ट शामिल है और उसमें रीबूट करें।
यदि पैचिंग में देरी हो रही है, तो अस्थायी उपाय के रूप में मॉड्यूल पथ को अक्षम करें:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
यह एक शमन है, फिक्स नहीं।
6.12.0-124.45.1.el10_1 |
| SUSE 16 | 6.12.0-160000.9-default |