
Android (Linux 6.6/6.12) पर SELinux को अक्षम करने के लिए CVE-2026-43074 का उपयोग करें
CVE-2026-43074 eventpoll UAF शोषण से SELinux-अक्षमीकरण चरण का स्वतंत्र निष्कर्षण। यह eventpoll लूप-गहराई जाँच (ep_get_upwards_depth_proc) के साथ दौड़ लगाकर selinux_state.enforcing में एक शून्य लिखता है, जो एकल-बाइट कर्नेल लेखन के माध्यम से डिवाइस को परमिसिव पर स्विच करता है। यह केवल MAC-अक्षमीकरण प्रिमिटिव है — कोई विशेषाधिकार वृद्धि नहीं।
[!चेतावनी] कर्नेल शोषण प्रूफ ऑफ कॉन्सेप्ट। कर्नेल को क्रैश कर सकता है, डेटा दूषित कर सकता है, या डिवाइस को असंगत छोड़ सकता है। केवल उन उपकरणों पर चलाएँ जिनके आप मालिक हैं या जिनका परीक्षण करने के लिए अधिकृत हैं। पहले बैकअप लें।
NebuSec द्वारा पूर्ण PoC से छाँटा गया (स्रोत ट्री)। UAF eventpoll लूप-गहराई जाँच (ep_get_upwards_depth_proc) में स्थित है, जो RCU के अंतर्गत epi->ep को चलाता है जबकि ep_free() एक समवर्ती थ्रेड से struct eventpoll को मुक्त कर सकता है। अपस्ट्रीम ने RCU अनुग्रह अवधि तक मुक्ति को स्थगित करके इसे ठीक किया (कमिट 07712db8; NVD, OSV)।
यह "Bad Epoll" (CVE-2026-46242) से अलग है, जो उसी eventpoll कोड में ep_remove() में एक अलग उपयोग-के-बाद-मुक्ति है; यहाँ दौड़ विशेष रूप से 07712db8 द्वारा ठीक किया गया लूप-गहराई-जाँच जीवनकाल बग है।
kernel.org CNA के अनुसार (OSV/NVD के माध्यम से), कमजोर स्थिर स्ट्रीम और उनके सुधार:
6.4.0 – <6.6.136 (Fixed 6.6.136)6.7.0 – <6.12.83 (Fixed 6.12.83)6.13.0 – <6.18.24 (Fixed 6.18.24)6.19.0 – <6.19.14 (Fixed 6.19.14)पिन किया गया लक्ष्य कर्नेल 6.6.118-android15-8 प्रभावित 6.6 श्रेणी (Fixed 6.6.136 पर) में आता है। जिन विक्रेता कर्नेलों ने अपस्ट्रीम संस्करण बढ़ाए बिना सुधार को बैकपोर्ट किया, वे कमजोर नहीं हैं — केवल uname -r पर निर्भर रहने के बजाय वास्तविक पैच उपस्थिति सत्यापित करें।
एक सटीक बिल्ड पर पिन किया गया — प्रवर्तन बाइट एक हार्डकोडेड KVA उपनाम के माध्यम से पहुँचा जाता है और दौड़ उस कर्नेल के स्लैब लेआउट पर निर्भर करती है:
6.6.118-android15-8-g53e6e091166e-ab15266607-4kgoogle/blazer/blazer:17/CP2A.260705.006/15641320:user/release-keysTARGET_SELINUX_ENFORCING_ALIAS = 0xffffff800236a2e0किसी अन्य बिल्ड को पुनः लक्षित करने के लिए src/target.h में उपनाम (selinux_state का छवि ऑफसेट + मैपिंग बेस + लोड एड्रेस) की पुनर्गणना आवश्यक है।
aarch64 clang टूलचेन के साथ Android NDK की आवश्यकता है। डिफ़ॉल्ट NDK_ROOT=/opt/android-ndk, API=35:
make # → build/disabler
आवश्यकतानुसार ओवरराइड करें:
make API=35 NDK_ROOT=/path/to/android-ndk
build/disabler को डिवाइस पर पुश करें और shell उपयोगकर्ता (uid 2000) के रूप में चलाएँ। SELinux प्रारंभ में प्रवर्तन पर होना चाहिए; अन्यथा बाइनरी छोड़ देता है। सफलता पर:
SELINUX_AFTER Permissive
RESULT PASS selinux_zero attempt=N
getenforce → Permissive से सत्यापित करें।
मूल शोषण इस प्रिमिटिव के ऊपर, एक पाइप-बफर flags रीडायरेक्ट (DirtyPipe-शैली लेखन एक केवल-पढ़ने योग्य पेज-कैश पृष्ठ में) जोड़ता है जो /system/bin/dumpstate को पैच करके एक रूट डेमॉन उत्पन्न करता है। वे चरण (pipe.c, patch.c, su.c, payloads.S, और मूल main.c व्यवस्थापन) यहाँ हटा दिए गए हैं, और late_refs.c को इसके शून्य-बाइट-रीडायरेक्ट पथ तक सीमित कर दिया गया है। केवल SELinux अक्षम करना रूट नहीं देता — यह केवल MAC प्रवर्तन हटाता है ताकि वाहक पेलोड अप्रतिबंधित चल सके।