
(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 बंडल होता है |
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 */
};
जब कर्नेल पॉइंटर प्रतिबंधित होते हैं (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 प्रोटोकॉल क्लाइंट:
1. TCP कनेक्ट 127.0.0.1:5555
2. A_CNXN → कनेक्शन अनुरोध
3. A_AUTH → RSA टोकन चुनौती
4. dlopen("libcrypto.so") → PEM_read_bio_RSAPrivateKey → RSA_sign
5. A_AUTH (AUTH_SIGNATURE) → हस्ताक्षरित प्रतिक्रिया
6. A_CNXN → कनेक्शन स्थापित
7. A_OPEN "shell:/data/local/tmp/a/e" → पूर्ण शोषण
SHA-1 और SHA-256 हस्ताक्षर एल्गोरिदम का समर्थन करता है।
ghostlock-oneplus/
├── Makefile # बिल्ड कॉन्फ़िगरेशन (NDK क्रॉस-कंपाइल)
├── README.md # दस्तावेज़ीकरण
├── src/
│ ├── core/ # मुख्य शोषण कोड
│ │ ├── main.c # प्रवेश बिंदु: दो-चरणीय लेखन + रूट शेल
│ │ ├── fops.c # FOPS/CFI मोड: pselect मार्ग, PI लेखन, KASLR लीक
│ │ ├── util.c # उपयोगिताएँ: हीप स्प्रे, KASLR, कर्नेल R/W प्रिमिटिव्स
│ │ ├── slide.c # SLIDE मोड: boot_id KASLR लीक + pselect मार्ग
│ │ ├── pipe.c # पाइप बफ़र भौतिक मेमोरी R/W (physrw)
│ │ ├── root.c # Cred अधिलेखन, seccomp साफ़, रूट चाइल्ड प्रबंधन
│ │ ├── miniadb.c # अंतर्निहित ADB क्लाइंट (TCP + RSA प्रमाणीकरण)
│ │ ├── common.h # वैश्विक मैक्रोज़, संरचनाएँ, घोषणाएँ, स्थिरांक
│ │ ├── target.h # लक्ष्य मेमोरी लेआउट / संरचना ऑफसेट / KASLR पैरामीटर
│ │ ├── offset.h # कंपाइल-टाइम लक्ष्य कॉन्फ़िग ब्रिज (#include TARGET_CONFIG_H)
│ │ └── kernelsnitch/ # KernelSnitch — mm_struct पता लीक
│ │ ├── kernelsnitch.h # मुख्य एल्गोरिदम: futex हैश टकराव + ब्रूट-फोर्स
│ │ ├── futex_hash.h # Futex हैश फ़ंक्शन
│ │ ├── timeutils.h # CPU टाइमस्टैम्प मापन (RDTSC)
│ │ └── utils.h # सहायक मैक्रोज़ (pr_info / SYSCHK / ASSERT आदि)
│ └── devices/ # डिवाइस ऑफसेट तालिकाएँ
│ ├── offsets.h # सभी डिवाइस ऑफसेट एकत्रित करें (लुकअप तालिका + sentinel)
│ ├── ace6t/offsets.h # OnePlus Ace 6T ऑफसेट (2 कर्नेल संस्करण)
│ └── op15/offsets.h # OnePlus 15 ऑफसेट (1 कर्नेल संस्करण)
└── tools/ # ऑफसेट निष्कर्षण टूलचेन
├── extract_target.py # kallsyms वैश्विक प्रतीक ऑफसेट निकालें (28 आइटम)
└── extract_btf.py # BTF संरचना फ़ील्ड ऑफसेट निकालें (57 आइटम)
इस रिपॉजिटरी को संशोधित किया गया है; विवरण के लिए मूल रिपॉजिटरी देखें।
सुनिश्चित करें कि आप ADB शेल में चला रहे हैं। ऐप संदर्भ के लिए --bootstrap की आवश्यकता होती है।
आपका कर्नेल संस्करण अभी तक समर्थित नहीं है। ऑफसेट निकालने और पुनर्निर्माण के लिए नए डिवाइस जोड़ना का पालन करें।
CORE मैक्रो)PSELECT_ENTER_DELAY_USEC टाइमिंग समायोजित करेंperf_event_open को अवरुद्ध करता है (ऐप संदर्भ में --bootstrap उपयोग करें)kaslr_base मान्य)ksud मौजूद है और निष्पादन योग्य हैload_policy फिक्स)केवल अधिकृत सुरक्षा अनुसंधान और शैक्षिक उद्देश्यों के लिए।
| CI रिलीज़ | ReSukiSU CI से डाउनलोड करें (ksud-aarch64-linux-android.zip) |
| प्रकार | संख्या | निष्कर्षण |
|---|
| 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 | मेमोरी विवरणक स्वामी |
| मॉड्यूल | फ़ाइल(एँ) | ज़िम्मेदारी |
|---|
| प्रवेश | main.c | CLI पार्सिंग, W1/W2 डिस्पैच, बूटस्ट्रैप प्रवाह |
| PI मार्ग | fops.c / slide.c | pselect/select स्टैक लेआउट, futex PI चेन हेरफेर |
| KASLR | util.c / fops.c / slide.c | दोहरी-मोड बाईपास: boot_id लीक + fops तालिका लीक |
| हीप स्प्रे | util.c | order-3 पृष्ठ आवंटन, SKB स्प्रे, forge ऑब्जेक्ट लेआउट |
| Phys R/W | pipe.c | पाइप बफ़र हाईजैकिंग, मनमाना भौतिक मेमोरी एक्सेस |
| Priv Esc | root.c | Cred अधिलेखन, क्षमता सत्यापन, seccomp साफ़ |
| ADB | miniadb.c | हल्का ADB प्रोटोकॉल क्लाइंट, RSA प्रमाणीकरण |
| लीक इंजन | kernelsnitch/ | mm_struct स्थान के लिए futex हैश टकराव |