
CVE-2026-31431 (कॉपी फेल) नवीन शोषण: पेज कैश के माध्यम से लाइव कोड भ्रष्टाचार। MAP_PRIVATE पेज साझाकरण के माध्यम से libc exit() कोड को अधिलेखित करता है — सभी चल रही प्रक्रियाओं को प्रभावित करता है।
CVE-2026-31431 ("कॉपी फेल") के लिए एक नई शोषण तकनीक जो लिनक्स कर्नेल के पेज कैश के माध्यम से चल रही प्रक्रियाओं के निष्पादन योग्य कोड को भ्रष्ट करती है, जिससे रूट विशेषाधिकार वृद्धि प्राप्त होती है।
इस CVE के लिए प्रकाशित सभी शोषण डेटा फ़ाइलों को भ्रष्ट करते हैं — रूट का UID बदलने के लिए /etc/passwd को संशोधित करना, या डिस्क पर setuid बाइनरी को पैच करना। यह शोषण मौलिक रूप से अलग काम करता है: यह कर्नेल के पेज कैश तंत्र के माध्यम से मेमोरी में लाइव निष्पादन योग्य कोड को भ्रष्ट करता है।
| प्रकाशित शोषण | यह शोषण | |
|---|---|---|
| लक्ष्य | डेटा फ़ाइलें (/etc/passwd, /usr/bin/su) | निष्पादन योग्य कोड (libc .text अनुभाग) |
| तंत्र | प्रोग्रामों द्वारा पार्स की गई फ़ाइल सामग्री | CPU द्वारा सीधे निष्पादित कोड पेज |
| दायरा | एकल फ़ाइल | libc मैप करने वाली सभी प्रक्रियाएँ |
| डिस्क परिवर्तन | हाँ (फ़ाइल सामग्री संशोधित) | नहीं (केवल मेमोरी में पेज कैश) |
| पहचान | फ़ाइल अखंडता निगरानी | फ़ाइलसिस्टम जाँचों के लिए अदृश्य |
जब लिनक्स MAP_PRIVATE के साथ एक साझा लाइब्रेरी मैप करता है, तो यह तुरंत फ़ाइल पेजों की प्रतिलिपि नहीं बनाता। इसके बजाय, प्रक्रिया की पेज टेबल प्रविष्टियाँ सीधे पेज कैश भौतिक पेजों की ओर इंगित करती हैं। प्रतिलिपि केवल लेखन पर होती है (कॉपी-ऑन-राइट)। कोड पेजों (.text) के लिए, प्रक्रियाएँ उन पर कभी लिखती नहीं हैं — इसलिए वे पेज कैश के साथ हमेशा साझा रहते हैं।
प्रक्रिया A (bash) प्रक्रिया B (su) पेज कैश (libc)
┌──────┐ ┌──────┐ ┌──────────┐
│ PTE │───────────>│ │ │ exit(): │
│ │ │ PTE │───────────>│ endbr64 │
└──────┘ └──────┘ │ push rax │
MAP_PRIVATE MAP_PRIVATE │ ... │
(स्वच्छ पेज) (स्वच्छ पेज) └──────────┘
↑
कॉपी फेल यहाँ लिखता है!
CVE-2026-31431 हमें किसी भी पठनीय फ़ाइल के पेज कैश में नियंत्रित 4-बाइट लेखन देता है। libc के कोड पेजों को भ्रष्ट करके, हम उन निर्देशों को संशोधित करते हैं जिन्हें हर प्रक्रिया निष्पादित करती है।
on_exit() फ़ंक्शन स्थान पर — 4 बाइट्स के 10 लेखनexit() को पैच करें ताकि यह हमारे शेलकोड पर कूद जाए — 4 बाइट्स का 1 लेखनexit() को कॉल करता है (वस्तुतः हर प्रोग्राम) हमारा शेलकोड निष्पादित करता हैशेलकोड setuid(0) → setgid(0) → execve("/bin/sh") करता है, जिससे रूट शेल मिलता है।
crypto/algif_aead.c में तर्क त्रुटि — 2017 का इन-प्लेस अनुकूलन (72548b093ee3) splice() को AEAD डिक्रिप्ट में पेज कैश पेजों को फीड करने की अनुमति देता है। authencesn एल्गोरिदम का ESN पुनर्व्यवस्था 4 स्क्रैच बाइट्स को स्रोत स्कैटरलिस्ट में वापस लिखता है, जिससे स्प्लिस्ड फ़ाइल का पेज कैश भ्रष्ट हो जाता है।# संकलन
gcc -o exploit exploit.c
# विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में चलाएँ
./exploit /lib/x86_64-linux-gnu/libc-2.31.so
# ट्रिगर — कोई भी प्रोग्राम चलाएँ (यह exit() को कॉल करता है)
su -c id
# uid=0(root) gid=0(root) groups=0(root)
process 'id' launched '/bin/sh'exploit.c — शेलकोड इंजेक्शन के साथ पूर्ण शोषणcopyfail_test.c — प्रिमिटिव सत्यापन (4-बाइट लेखन का परीक्षण)72548b093ee3)यह उपकरण केवल अधिकृत सुरक्षा अनुसंधान और शैक्षिक उद्देश्यों के लिए प्रदान किया गया है। उन प्रणालियों के विरुद्ध उपयोग न करें जिनके स्वामी आप नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट अनुमति नहीं है।
डर्टी फ्रैग ने उसी बग वर्ग में दो और पेज-कैश लेखन वेरिएंट का खुलासा किया:
esp4/esp6): कॉपी फेल के समान authencesn सिंक, IPsec ESP-in-UDP के माध्यम से पहुँचा जाता है। उपयोगकर्ता नेमस्पेस की आवश्यकता होती है। 4-बाइट लेखन।rxrpc/rxkad): स्प्लिस-पिन्ड पेज पर pcbc(fcrypt) इन-प्लेस डिक्रिप्ट। किसी नेमस्पेस की आवश्यकता नहीं। 8-बाइट लेखन।इस रिपॉजिटरी में लाइव कोड भ्रष्टाचार तकनीक इनमें से किसी भी पेज-कैश लेखन प्रिमिटिव के साथ काम करती है — बस write4() फ़ंक्शन को ESP या RxRPC ट्रिगर से बदलें। यह तकनीक प्रिमिटिव-अज्ञेयवादी है।