
(CVE-2026-43499)कर्नेल शोषण प्रोग्राम, अनलॉक किए गए Bootloader वाले OnePlus 15T के लिए उपयुक्त।
लॉक्ड-बूटलोडर OnePlus 15T डिवाइसों के लिए कर्नेल शोषण। CVE-2026-43499 का उपयोग करके बूटलोडर अनलॉक किए बिना या boot.img संशोधित किए बिना रूट एक्सेस प्राप्त करता है।
केवल अधिकृत सुरक्षा अनुसंधान और शैक्षिक उद्देश्यों के लिए।
मूल GhostLock-for-OnePlus रिपॉजिटरी से संशोधित, OnePlus 15T (PLZ110 / SM8850 / Snapdragon 8 Elite) की भौतिक मेमोरी लेआउट और CPU टाइमिंग के लिए अनुकूलित।
| आइटम | विवरण |
|---|---|
| CVE | CVE-2026-43499 |
| प्रकार | Futex PI (प्रायोरिटी इनहेरिटेंस) Use-After-Free |
| दायरा | Linux कर्नेल 2.6.39 ~ 7.1 |
| समाधान | मेनलाइन 7.1 (कमिट 3bfdc63936dd) |
| Android स्थिति | GKI 6.12.x अभी भी असुरक्षित |
pselect6 सिस्कॉल fd_set को कर्नेल स्टैक पर कॉपी करता है। जब इसे futex PI वेटर तंत्र के साथ जोड़ा जाता है, तो एक मुक्त (freed) स्टैक फ्रेम को rt_mutex_waiter संरचना के रूप में पुनः आवंटित किया जा सकता है। PI चेन ट्रैवर्सल के दौरान, rb-tree रीबैलेंसिंग नियंत्रित डेटा को मनमाने कर्नेल पतों पर लिखती है।
futex PI UAF (CVE-2026-43499)
├─ rt_mutex_waiter ऑब्जेक्ट फोर्ज करें
├─ pselect/select fd_set लेआउट के माध्यम से कर्नेल स्टैक नियंत्रित करें
├─ मनमाना लेखन के लिए rt_mutex PI ऑपरेशन ट्रिगर करें
├─ लेखन 1: selinux_state.enforcing = 0
└─ लेखन 2: cred → init_cred (uid=0, पूर्ण क्षमताएँ)
| डिवाइस | कोडनेम | SoC | कर्नेल | फर्मवेयर | स्थिति |
|---|---|---|---|---|---|
| OnePlus 15T | PLZ110 | SM8850 (Snapdragon 8 Elite) | 6.12.38-android16-5-g844001fb8721-ab14552068-4k | ColorOS 16.0.9.400 | ✅ सत्यापित |
Ace 6T और OnePlus 15 के लिए, मूल रिपॉजिटरी देखें।
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 सेट करें# डिफ़ॉल्ट (API 35)
make
# API स्तर निर्दिष्ट करें
make API=34
# NDK पथ निर्दिष्ट करें
NDK=/path/to/android-ndk make
ghostlock — स्टैटिकली लिंक्ड ARM64 ELF निष्पादन योग्य।
# 1. ADB TCP मोड सक्षम करें
adb tcpip 5555
# 2. ADB कुंजी पुश करें (बूटस्ट्रैप मोड के लिए आवश्यक)
adb push ~/.android/adbkey /data/local/tmp/a/adbkey
# 3. शोषण पुश करें
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 को कर्नेल पते के साथ अधिलेखित करके बेस पता लीक करें:
/proc/sys/kernel/random/boot_id पढ़ें
└─ UUID में nfulnl_logger पता होता है
└─ KASLR slide = लीक हुआ पता - image_offset
└─ kaslr_base
जब ashmem डिवाइस सुलभ हो, तो configfs रीड/राइट प्रिमिटिव्स का उपयोग करके ashmem fops तालिका से फ़ंक्शन पॉइंटर पढ़ें और KASLR ऑफसेट की गणना करें।
order-3 (32KB) पृष्ठों पर कर्नेल ऑब्जेक्ट फोर्ज करें:
file_operations — ashmem miscdevice fops पॉइंटर हाईजैक करेंrt_mutex_waiter — PI चेन वेटर नोड अनुकरण करेंtask_struct — PI ट्रैवर्सल के दौरान कार्य संदर्भrt_mutex (लॉक) — सही वेटर/स्वामी जानकारीSKB (सॉकेट बफ़र) + KernelSnitch के माध्यम से कार्यान्वित:
mm_struct पते लीक करेंsendmsgKASLR बेस प्राप्त करने के बाद, भौतिक-स्तरीय मेमोरी एक्सेस के लिए पाइप बफ़र्स का उपयोग करें:
1. पाइप बफ़र को physmap में ढूँढें
2. ज्ञात pipe_buf_ops की ओर इशारा करने वाली नकली pipe_buffer ops तालिका बनाएं
3. pipe_buffer.page को लक्षित भौतिक पते पर हाईजैक करें
4. सामान्य पाइप संचालन के माध्यम से मनमाना भौतिक पढ़ना/लिखना
समर्थित: pipe_read64, pipe_write64, pipe_phys_read_data, pipe_phys_write_data
लक्ष्य: selinux_state.enforcing (ऑफसेट 0x00)
विधि: चाइल्ड-नोड PI लेखन → forge waiter __rb_parent_color
selinux_enforcing - 8 की ओर इशारा करते हुए
rb-tree रीबैलेंसिंग 0x00 लिखती है
लक्ष्य: चाइल्ड प्रक्रिया cred पॉइंटर
विधि: 1. fork चाइल्ड → task_struct ढूँढने के लिए perf_find_task()
2. cred फ़ील्ड ऑफसेट की गणना करें
3. चाइल्ड-नोड PI लेखन → cred = init_cred (uid=0, पूर्ण क्षमताएँ)
4. seccomp साफ़ करें (TIF_SECCOMP + seccomp संरचना शून्य)
cred अधिलेखन के बाद क्षमता रीडबैक सत्यापन किया जाता है।
src/core/miniadb.c — बूटस्ट्रैप मोड के लिए हल्का ADB प्रोटोकॉल क्लाइंट: