
CVE-2025-40271 MadEploits द्वारा संशोधित
लिनक्स कर्नेल proc फ़ाइलसिस्टम में स्थानीय विशेषाधिकार वृद्धि (LPE) भेद्यता का प्रूफ-ऑफ-कॉन्सेप्ट। यह बग proc_readdir_de() में rb_erase() के बिना RB_CLEAR_NODE() के उपयोग के कारण यूज़-आफ्टर-फ्री है, जिससे पुराने रेड-ब्लैक ट्री लिंक रह जाते हैं जिन्हें निर्देशिका गणना के दौरान रेस किया जा सकता है।
लेखक: MadExploits
मूल भेद्यता अनुसंधान और C PoC अविरल श्रीवास्तव (N-DAY RESEARCH) द्वारा। इस रिपॉजिटरी में एक शेल पोर्ट (
exploit.sh) शामिल है, जो उन वातावरणों के लिए है जहां संकलन व्यावहारिक नहीं है।
| फ़ील्ड | विवरण |
|---|---|
| CVE | CVE-2025-40271 |
| घटक | fs/proc — proc_readdir_de() / remove_proc_entry() |
| प्रकार | यूज़-आफ्टर-फ्री (rb-tree स्टेल लिंक) |
| प्रभाव | स्थानीय विशेषाधिकार वृद्धि (LPE) |
| आर्किटेक्चर | x86_64 |
| प्रभावित | 6.18-rc5 तक के लिनक्स कर्नेल |
जब एक proc निर्देशिका प्रविष्टि हटाई जाती है, तो प्रविष्टि के rb-नोड पर rb_erase() को बिना RB_CLEAR_NODE() के बुलाया जाता है। मुक्त नोड पुराने ट्री लिंक के माध्यम से पहुंच योग्य रह सकते हैं। यदि getdents64() /proc/self/net/dev_snmp6/ के अंतर्गत इंटरफ़ेस हटाने के साथ रेस करता है, तो कर्नेल मुक्त मेमोरी पढ़ सकता है — जिसे अक्सर स्प्रे किए गए msg_msg ऑब्जेक्ट्स द्वारा पुनः दावा किया जाता है — और असामान्य d_ino मान लौटाता है जो कर्नेल हीप पॉइंटर्स को लीक करते हैं।
PoC चल रहे कर्नेल संस्करण की जाँच करता है और पैच किए गए बिल्ड पर बाहर निकलता है:
| फ़ाइल | विवरण |
|---|---|
exploit.c | पूर्ण C PoC — netlink veth प्रबंधन, pthread रेस, msg_msg स्प्रे |
exploit.sh | नो-कंपाइल शेल पोर्ट — unshare, ip, सिस्कॉल/रेस के लिए एम्बेडेड Python 3 |
दोनों कार्यान्वयन समान शोषण प्रवाह का पालन करते हैं:
CAP_NET_ADMIN प्राप्त करें)/proc/self/net/dev_snmp6/ आबाद करेंgetdents64() को रेस करेंd_ino मानों के माध्यम से UAF का पता लगाएँcat /proc/sys/kernel/unprivileged_userns_clone
# must be 1
exploit.cgcc pthreads के साथlinux/netlink.h, आदि)gcc -o exploit exploit.c -lpthread
exploit.shbashpython3ip (iproute2)unshare (util-linux --map-root-user समर्थन के साथ)कोई संकलक आवश्यक नहीं है।
chmod +x exploit.sh
./exploit.sh
gcc -o exploit exploit.c -lpthread
./exploit
कमजोर कर्नेल — UAF ट्रिगर हुआ (आंशिक सफलता):
[+] Kernel X.Y.Z — VULNERABLE
[+] Namespace ready...
[+] Created 32 veth pairs (/proc/self/net/dev_snmp6 populated)
[+] UAF HIT! d_ino=0xffff8880........ (kernel heap pointer)
[+] Kernel heap leak: 0xffff8880........
[*] PARTIAL SUCCESS: UAF + heap leak DEMONSTRATED
पैच किया गया कर्नेल:
[-] Kernel X.Y.Z — PATCHED
[*] Kernel is patched. Nothing to do.
d_ino में x86_64 कर्नेल पॉइंटर पैटर्न (0xffff000000000000) से मेल खाने वाला मान होता है, आमतौर पर msg_msg हेडर m_list मुक्त proc_dir_entry डेटा को ओवरलैप करने से।modprobe_path को ओवरराइट करने के लिए लीक किए गए हीप पते और कर्नेल टेक्स्ट बेस के बीच ऑफ़सेट की आवश्यकता होती है — यह बिल्ड-विशिष्ट है (KASLR)। PoC UAF और लीक प्रदर्शित करता है; एक पूर्ण श्रृंखला को आपके लक्ष्य कर्नेल छवि के लिए ऑफ़सेट की आवश्यकता होती है।sysctl -w kernel.unprivileged_userns_clone=0
यह प्रोजेक्ट केवल अधिकृत सुरक्षा अनुसंधान, शिक्षा और रक्षात्मक परीक्षण के लिए प्रदान किया गया है।
| भूमिका | नाम |
|---|---|
| रिपॉजिटरी लेखक | MadExploits |
| मूल CVE अनुसंधान और C PoC | अविरल श्रीवास्तव — N-DAY RESEARCH |
अपने जोखिम पर उपयोग करें। कोई वारंटी प्रदान नहीं की गई है।
| शाखा |
|---|
| फिक्स किया गया |
|---|
| 5.10.x | 5.10.247+ |
| 6.1.x | 6.1.159+ |
| 6.6.x | 6.6.123+ |
| 6.12.x | 6.12.73+ |
| 6.18+ | 6.18-rc6+ |
| 7.x+ | पैच किया गया |