
CVE-2026-31431 के लिए एक्सप्लॉइट, एक Linux कर्नेल authencesn भेद्यता जो पेज कैश हेरफेर के माध्यम से रूट तक स्थानीय विशेषाधिकार वृद्धि को सक्षम बनाती है।
"कॉपी फेल" Linux कर्नेल के authencesn क्रिप्टोग्राफिक टेम्पलेट में एक गंभीर लॉजिक भेद्यता है। यह एक अन-प्रिविलेज्ड स्थानीय उपयोगकर्ता को सिस्टम पर किसी भी पठनीय फ़ाइल के पेज कैश में एक नियतात्मक, नियंत्रित 4-बाइट लेखन ट्रिगर करने की अनुमति देता है। setuid बाइनरी (जैसे /usr/bin/su) को लक्षित करके, एक हमलावर इन-मेमोरी निष्पादन कैश को संपादित करके विशेषाधिकारों को रूट (UID 0) तक बढ़ा सकता है।
"डर्टी काउ" या "डर्टी पाइप" जैसी पुरानी भेद्यताओं के विपरीत, कॉपी फेल एक सीधी-रेखा लॉजिक त्रुटि है जो रेस कंडीशन, पुनः प्रयास, या क्रैश-प्रवण टाइमिंग विंडो के बिना ट्रिगर होती है। यह अत्यधिक पोर्टेबल और गुप्त है, क्योंकि यह केवल इन-मेमोरी पेज कैश को संशोधित करता है जबकि डिस्क पर मौजूद फ़ाइल को पूरी तरह अपरिवर्तित छोड़ देता है, जिससे मानक फ़ाइल अखंडता निगरानी उपकरण बायपास हो जाते हैं।
यह भेद्यता तीन अलग-अलग कर्नेल घटकों के प्रतिच्छेदन पर मौजूद है:
splice() सिस्टम कॉल: splice() सिस्कॉल फ़ाइल डिस्क्रिप्टर और पाइप के बीच बिना कॉपी किए डेटा स्थानांतरित करता है, पेज कैश पेजों को संदर्भ द्वारा पास करता है। जब कोई उपयोगकर्ता किसी फ़ाइल (जैसे /usr/bin/su) को AF_ALG सॉकेट में स्प्लाइस करता है, तो सॉकेट की इनपुट स्कैटरलिस्ट उस फ़ाइल के कर्नेल के कैश्ड पेजों के सीधे संदर्भ रखती है।authencesn स्क्रैच राइट: authencesn एल्गोरिदम (IPsec एक्सटेंडेड सीक्वेंस नंबरों के लिए उपयोग किया जाता है) को बाइट्स को पुनर्व्यवस्थित करने की आवश्यकता होती है। ऐसा करने के लिए, यह अस्थायी रूप से 4 बाइट्स सीक्वेंस नंबरों को "स्क्रैच स्पेस" के रूप में आउटपुट बफर में लिखता है। हालाँकि, यह वैध आउटपुट सीमा से आगे लिखता है।2017 के इन-प्लेस अनुकूलन के कारण, आउटपुट स्कैटरलिस्ट में splice() द्वारा पास किए गए रीड-ओनली पेज कैश पेज होते हैं। जब authencesn आउटपुट सीमा से आगे लिखता है, तो यह सीधे लक्ष्य फ़ाइल के कैश्ड कर्नेल मेमोरी में 4 बाइट्स को अधिलेखित कर देता है।
एक हमलावर निम्नलिखित चरणों का पालन करके इसका शोषण कर सकता है:
AF_ALG सॉकेट खोलें और authencesn(hmac(sha256),cbc(aes)) से बाइंड करें।sendmsg() भेजें जिसमें एक एसोसिएटेड ऑथेंटिकेटेड डेटा (AAD) पेलोड हो जिसमें वे 4 बाइट्स हों जिन्हें वे लिखना चाहते हैं।/usr/bin/su) को सॉकेट में पाइप करने के लिए splice() का उपयोग करें। ऑफसेट और लंबाई परिभाषित करते हैं कि पेज कैश में 4 बाइट्स कहाँ लिखे जाएंगे।recv() को कॉल करने से डिक्रिप्ट ऑपरेशन ट्रिगर होता है, जो आउट-ऑफ-बाउंड्स स्क्रैच राइट को सीधे लक्ष्य फ़ाइल के पेज कैश में निष्पादित करता है।execve("/usr/bin/su"))। कर्नेल इंजेक्ट किए गए दुर्भावनापूर्ण शेलकोड वाले छेड़छाड़ किए गए पेज कैश संस्करण को निष्पादित करता है, जिससे रूट एक्सेस मिलता है।यदि कर्नेल को पैच करना या रीबूट करना तुरंत संभव नहीं है, तो आप सभी संबंधित af_alg मॉड्यूल को ब्लैकलिस्ट करके और उन्हें मेमोरी से अनलोड करके इस भेद्यता को कम कर सकते हैं।
इन मॉड्यूल को ब्लॉक करने के लिए, निम्नलिखित कमांड निष्पादित करें:
# 1. यदि वर्तमान में लोड हैं तो मॉड्यूल को मेमोरी से अनलोड करें
sudo modprobe -r algif_hash algif_skcipher algif_aead algif_rng af_alg
# 2. मॉड्यूल को ब्लैकलिस्ट में जोड़ें
echo -e "blacklist af_alg\nblacklist algif_hash\nblacklist algif_skcipher\nblacklist algif_aead\nblacklist algif_rng" | sudo tee /etc/modprobe.d/stop-exploit.conf
# 3. af_alg मॉड्यूल को पूरी तरह से लोड होने से रोकें
echo "install af_alg /bin/true" | sudo tee -a /etc/modprobe.d/stop-exploit.conf
# 4. परिवर्तनों के पूर्ण प्रभाव को सुनिश्चित करने के लिए सिस्टम को रीबूट करें
sudo reboot
Linux कर्नेल सुरक्षा टीम ने इस भेद्यता को पैच किया है (कमिट: a664bf3d603d)। पैच AF_ALG AEAD ऑपरेशनों को आउट-ऑफ-प्लेस मॉडल में वापस लाता है, जो स्रोत और गंतव्य स्कैटरलिस्ट को अलग करता है। यह पेज कैश पेजों को लिखने योग्य गंतव्य स्कैटरलिस्ट में उजागर होने से रोकता है।
आवश्यक कार्रवाई: अपने वितरण के कर्नेल को आपके विक्रेता (Ubuntu, Amazon Linux, RHEL, SUSE, आदि) द्वारा प्रदान किए गए नवीनतम संस्करण में अपडेट करें और अपने सिस्टम को रीबूट करें।