
cve-2026-43499 — Updated!
PD2229B के लिए 43499(ghostlock) संभाव्यता अध्ययन
GhostLock का PD2229 (SM8475, 5.10.233 GKI) पर शोषण विफलता सारांश
一、भेद्यता और डिवाइस तथ्य
1.1 CVE-2026-43499 (GhostLock) मूल जानकारी
| आइटम | मान |
|---|---|
| भेद्यता प्रकार | rt_mutex / futex PI पथ में स्टैक-आधारित Use-After-Free |
| परिचय संस्करण | Linux 2.6.39-rc1 (मई 2011, commit 8161239a8bcc) |
| फिक्स संस्करण | मुख्यलाइन 7.1 (commit 3bfdc63936dd), स्थिर शाखाएँ: 6.1.175 / 6.6.140 / 6.12.86 / 6.18.27 / 7.0.4 |
| पूर्वापेक्षा | CONFIG_FUTEX_PI=y (मुख्यधारा कर्नेल में डिफ़ॉल्ट रूप से सक्षम) |
| CVSS | 7.8 High |
| शोषण स्थिरता | NebuSec मूल श्रृंखला 97%, लगभग 5 सेकंड में root |
| kernelCTF इनाम | $92,337 USD |
प्रभावित कर्नेल रेंज:
- 2.6.39 ≤ Linux < 6.1.175 ✅ प्रभावित
- 6.2 ≤ Linux < 6.6.140 ✅ प्रभावित
- 6.7 ≤ Linux < 6.12.86 ✅ प्रभावित
- 6.13 ≤ Linux < 6.18.27 ✅ प्रभावित
- 6.19 ≤ Linux < 7.0.4 ✅ प्रभावित
- Android GKI 5.10 किसी भी फिक्स शाखा में नहीं है → PD2229 का 5.10.233 सैद्धांतिक रूप से प्रभावित
1.2 PD2229 डिवाइस वास्तविक परीक्षण
| आइटम | मान |
|---|---|
| SoC | Qualcomm SM8475 (Snapdragon 8 Gen 1 Plus) |
| कर्नेल संस्करण | 5.10.233-gki-g6e61de9f5b58 #1 SMP PREEMPT (नवंबर 24, 2025) |
| Android संस्करण | 15 (OriginOS 5) |
| संकलन समय | 2025/11/25 |
| Android पैच | 2025/11/01 |
CONFIG_FUTEX_PI | y ✅ |
CONFIG_UNMAP_KERNEL_AT_EL0 | y (KPTI सक्षम) |
kptr_restrict | enforced |
CONFIG_IO_URING | y ✅ (vmlinux प्रतीक द्वारा पुष्टि, और seccomp io_uring_setup को इंटरसेप्ट नहीं करता) |
二、आदर्श शोषण श्रृंखला बनाम PD2229 वास्तविक प्रगति
2.1 NebuSec मूल श्रृंखला (x86_64 / Pixel 10 सफल)
1. KASLR बाईपास → prefetch timing / PR_SET_MM_MAP auxv
2. UAF ट्रिगर → तीन-थ्रेड PI निर्भरता डेडलॉक → FUTEX_CMP_REQUEUE_PI -EDEADLK लौटाता है
3. स्टैक पुनर्प्राप्ति → PR_SET_MM_MAP auxv को waiter स्टैक फ्रेम में कॉपी करता है
4. rb_erase प्रतिबंधित लेखन → inet6_protos[IPPROTO_UDP] को ओवरराइट करता है
5. CEA + ROP → नियंत्रण प्रवाह अपहरण
6. core_pattern फ्लिप → root shell (97% सफलता दर)
2.2 PD2229 प्रत्येक चरण की वास्तविक प्रगति
| चरण | स्थिति | विवरण |
|---|---|---|
| 1. KASLR बाईपास | ✅ लागू | perf_event_open + callchain सैंपलिंग साइड-चैनल (OPPO Find X6 Pro 5.15.149 अनुकूलन विधि के समान) |
| 2. UAF ट्रिगर | ✅ लागू | तीन-थ्रेड PI डेडलॉक सफल, FUTEX_CMP_REQUEUE_PI -EDEADLK लौटाता है |
| 3. स्टैक पुनर्प्राप्ति प्रिमिटिव | ❌ आर्किटेक्चरल विफलता | सभी ज्ञात syscall के स्टैक फ्रेम waiter के साथ ओवरलैप नहीं होते (धारा 3 देखें) |
| 4. rb_erase प्रतिबंधित लेखन | ❌ अवरुद्ध | पूर्वापेक्षा पूरी नहीं हुई |
| 5. inet6_protos ओवरराइट | ❌ शुरू नहीं | चरण 4 पर निर्भर |
| 6. ROP / नियंत्रण प्रवाह अपहरण | ❌ शुरू नहीं | चरण 5 पर निर्भर |
| 7. root shell | ❌ शुरू नहीं | चरण 6 पर निर्भर |
三、स्टैक पुनर्प्राप्ति प्रिमिटिव संपूर्ण परीक्षण परिणाम (PD2229 वास्तविक परीक्षण)
3.1 स्टैक फ्रेम लेआउट प्रमुख गणना
futex पथ कुल गहराई:
__arm64_sys_futex 0x90
+ do_futex 0xc0
+ futex_wait_requeue_pi 0x1b0
= 0x300
waiter स्थिति = SYS_SP - 0x300 + 0x20 = SYS_SP - 0x2e0
pselect पथ:
core_sys_select स्टैक फ्रेम 0x1c0, stack_fds sp+0x50 पर
कवरेज रेंज: SYS_SP - 0x1c0 + 0x50 = SYS_SP - 0x170 से शुरू
waiter (SYS_SP - 0x2e0) से अंतर 0x170 (368 बाइट्स) → कोई ओवरलैप नहीं
3.2 परीक्षण की गई 17 स्टैक लेखन विधियाँ
| # | विधि | सिस्टम कॉल | PD2229 परिणाम | मुख्य विफलता कारण |
|---|---|---|---|---|
| 1 | stamp_prctl | PR_SET_MM_MAP | ❌ EPERM | Android हार्ड इंटरसेप्ट |
| 2 | stamp_pselect | pselect6 (NFDS=320) | ❌ कोई ओवरलैप नहीं | waiter fd_set से 120B नीचे |
| 3 | stamp_pselect | pselect6 (NFDS>336) | ❌ हीप आवंटन | kvmalloc पथ |
| 4 | stamp_socket | MCAST_JOIN_SOURCE_GROUP | ❌ अपर्याप्त कवरेज | केवल lock फ़ील्ड लिखता है |
| 5 | stamp_sendmsg | sendmsg | ❌ waiter से 80B दूर | स्टैक फ्रेम 0x90 गहराई अपर्याप्त |
| 6 | stamp_sendmmsg | sendmmsg | ❌ waiter से 112B दूर | स्टैक फ्रेम अपर्याप्त |
| 7 | stamp_recvmmsg | recvmmsg | ❌ task/lock शून्य करता है | 0x1d0 स्टैक फ्रेम महत्वपूर्ण पॉइंटर्स को नष्ट करता है |
| 8 | stamp_process_vm | process_vm_writev | ❌ कोई ओवरलैप नहीं | चाइल्ड थ्रेड स्टैक अलग से आवंटित |
| 9 | stamp_keyctl | KEYCTL_INSTANTIATE_IOV | ❌ EOPNOTSUPP | सिस्टम कॉल समर्थित नहीं + स्टैक फ्रेम 0x40 |
| 10 | stamp_tcp | TCP_ZEROCOPY_RECEIVE | ❌ स्टैक फ्रेम अपर्याप्त | अनुमानित गहराई पर्याप्त नहीं |
| 11 | stamp_futex | FUTEX_CMP_REQUEUE_PI पुनरावर्ती | ❌ तार्किक रूप से असंभव | UAF विंडो को नष्ट करता है |
| 12 | binder ioctl | BINDER_WRITE_READ | ❌ EACCES | shell के पास /dev/binder अनुमति नहीं |
| 13 | poll | poll | ❌ हीप आवंटन | pollfd हीप पर |
| 14 | epoll_wait | epoll_wait | ❌ फ्रेम बहुत उथला | स्टैक फ्रेम 0xE0 |
| 15 | sched_setattr | sched_setattr | ❌ गहराई अपर्याप्त | स्टैक फ्रेम 0xb0 |
| 16 | timerfd_settime | timerfd_settime | ❌ कोई स्टैक कॉपी नहीं | कोई बड़ा स्टैक बफर नहीं |
| 17 | io_uring_register | IORING_REGISTER_* | ❌ दोहरी विफलता | ①स्टैक फ्रेम केवल 0xF0, copy_from_user लक्ष्य निश्चित sp+0x8 (waiter के sp+0x1D0 से 424 बाइट्स का अंतर); ②हालाँकि io_uring_setup seccomp द्वारा इंटरसेप्ट नहीं किया गया (ENOSYS के बजाय EFAULT लौटाता है), स्टैक लेआउट मेल नहीं खाता |
17/17 सभी विफल।
3.3 विफलता का मूल कारण
PD2229 के SM8475 5.10 GKI कंपाइलर (PGO + LTO + BOLT) द्वारा उत्पन्न स्टैक लेआउट, core_sys_select के stack_fds और futex_wait_requeue_pi के rt_mutex_waiter के बीच आर्किटेक्चरल गैर-ओवरलैप का कारण बनता है। यह कंपाइलर द्वारा निर्धारित एक वस्तुनिष्ठ तथ्य है, न कि शोषण तकनीक की समस्या।
JoinChang रिपॉजिटरी स्पष्ट रूप से बताती है: "The pselect stack overlay only works when the freed rt_mutex_waiter lands within the user-controllable region of the stack_fds buffer" — PD2229 इस शर्त को पूरा नहीं करता।
四、सार्वजनिक संदर्भ रिपॉजिटरी तुलनात्मक विश्लेषण
NebuSec/CyberMeowfia — मूल शोषण फ्रेमवर्क
- रिपॉजिटरी: https://github.com/NebuSec/CyberMeowfia
- लक्ष्य: x86_64 Linux / Pixel 10 (6.x GKI)
- स्टैक पुनर्प्राप्ति:
PR_SET_MM_MAPauxv को कर्नेल स्टैक में कॉपी करता है - सफलता दर: 97%, लगभग 5 सेकंड [root shell]
- PD2229 अनुकूलता: ❌
PR_SET_MM_MAPAndroid पर EPERM द्वारा इंटरसेप्ट किया गया
JoinChang/ghostlock-oneplus — OnePlus बूटलोडर अनलॉक jailbreak
- रिपॉजिटरी: https://github.com/JoinChang/ghostlock-oneplus
- सत्यापित डिवाइस:
- OnePlus Ace 6T (PLR110, SM8845) — 6.12.38 GKI ✅
- OnePlus 15 (PLK110, SM8845) — 6.12.23 GKI ✅
- तकनीकी बिंदु:
- ऑफसेट स्वचालित निष्कर्षण: kallsyms (28) + BTF (57) + व्युत्पन्न (9) + स्थिरांक (12) = 103/103
- pselect स्टैक ओवरले, SP diff = -64
PSELECT_SHIFT = -2- शोषण श्रृंखला: futex UAF → नकली waiter → pselect नियंत्रित स्टैक → rb_erase प्रतिबंधित लेखन → selinux_state.enforcing=0 → cred को init_cred से ओवरराइट
- स्पष्ट रूप से असंभव घोषित: "Not Feasible (stack layout incompatible)" — केवल उन कर्नेलों पर लागू जहां pselect stack_fds और waiter ओवरलैप होते हैं
- PD2229 अनुकूलता: ❌ कर्नेल पीढ़ी बेमेल (6.12 बनाम 5.10), और स्टैक लेआउट ओवरलैप नहीं होता
p2p3p/GhostLock-for-OnePlus — OnePlus 6.12 पूर्ण शोषण
- रिपॉजिटरी: https://github.com/p2p3p/GhostLock-for-OnePlus
- सत्यापित: OnePlus Ace 6T (SM8845, 6.12.38) ✅
- PD2229 अनुकूलता: ❌ JoinChang के समान, कर्नेल पीढ़ी बेमेल
YuKongA/ghostlock-oplus — OPPO Find N5/X8
- रिपॉजिटरी: https://github.com/YuKongA/ghostlock-oplus
- कर्नेल: 6.6.118 GKI
- PD2229 अनुकूलता: ❌ कर्नेल पीढ़ी बेमेल
OPPO Find X6 Pro (PGEM10) अनुकूलन — 5.15.149
- डिवाइस: SM8550, 5.15.149-android13, Android 15
- प्रगति: ✅ KASLR बाईपास (perf_event_open + callchain सैंपलिंग); बाद के चरणों का पूर्ण शोषण सार्वजनिक नहीं
- महत्व: साबित करता है कि 5.15 GKI पर KASLR बाईपास संभव है, लेकिन स्टैक पुनर्प्राप्ति चरण सार्वजनिक रूप से सत्यापित नहीं
pubglite55/oppo-ghostlock — OPPO Find N2
- रिपॉजिटरी: https://github.com/pubglite55/oppo-ghostlock
- डिवाइस: OPPO Find N2 (CPH2413, SM8475)
- कर्नेल: 5.10.236-android12-9-o-g74d132f4467a
- Android: 16 (BP2A.250605.015)
- लागू:
- ✅ Firefox CVE-2026-10702 AAW (चरण 1)
- ✅ KASLR बाईपास (सीधे kaslr_base की गणना)
- ✅ GhostLock FUTEX ट्रिगर (FUTEX_CMP_REQUEUE_PI ret=0)
- ✅ KernelSnitch mm_struct लीक
- ✅ sk_buff हीप स्प्रे (4/4 send सफल)
- ✅ IDA Pro 70+ ऑफसेट सत्यापन
- मुख्य अवरोध:
"pselect waiter संरचना में हेरफेर नहीं कर सकता — NFDS >336 होने पर fd_set हीप पर; configfs/ashmem समर्थित नहीं (ashmem SET_NAME ट्रंकेटेड); अन्य सभी कर्नेल लेखन पथ अवरुद्ध (/proc/self/mem, /dev/mem, binder)"
- PD2229 संबंध: समान प्लेटफ़ॉर्म समान पीढ़ी (SM8475, 5.10.236 बनाम 5.10.233), केवल 3 मामूली संस्करणों का अंतर, बिल्कुल समान आर्किटेक्चरल सीमाओं का सामना करता है
harry1080/oppo-ghostlock — OPPO Find N2
- रिपॉजिटरी: https://github.com/harry1080/oppo-ghostlock
- डिवाइस: OPPO Find N2 (CPH2413, SM8475)
- कर्नेल: 5.10.236-android12-9-o-g74d132f4467a
- Android: 16 (BP2A.250605.015)
- समुदाय सार्वजनिक घोषणा:
"pixel10 जिस संस्करण का शोषण कर सकता है उसमें pselect stack_fds और rt_waiter कर्नेल स्टैक पर बिल्कुल ओवरलैप होते हैं, यह हिस्सा वास्तव में सबसे परेशानी वाला है, OPPO findN2 के कर्नेल में इन दो कॉलों के स्टैक हिस्से पूरी तरह से ओवरलैप नहीं होते, या ओवरलैप होते भी हैं तो नियंत्रण योग्य नहीं होते, स्टैक को नियंत्रित करने के लिए अन्य नियंत्रणीय कर्नेल स्टैक सिस्टम कॉल खोजने होंगे, केवल ऑफसेट अनुकूलित करना सफल नहीं हो सकता, oppo का rt_waiter पूरी तरह से pselect stack_fds के साथ ओवरलैप नहीं होता"
- PD2229 संबंध: PD2229 के समान SM8475 5.10 GKI, निष्कर्ष पूरी तरह से लागू
4.3 संदर्भ रिपॉजिटरी तुलना सारांश तालिका
| रिपॉजिटरी | डिवाइस | SoC | कर्नेल | स्टैक पुनर्प्राप्ति विधि | स्थिति | PD2229 पुन: उपयोग क्षमता |
|---|---|---|---|---|---|---|
| NebuSec/CyberMeowfia | Pixel 10 | - | 6.x | PR_SET_MM_MAP | ✅ 97% | ❌ Android इंटरसेप्ट |
| JoinChang/ghostlock-oneplus | OnePlus Ace 6T | SM8845 | 6.12.38 | pselect (SP diff=-64) | ✅ सत्यापित | ❌ कर्नेल पीढ़ी बेमेल |
| p2p3p/GhostLock-for-OnePlus | OnePlus Ace 6T | SM8845 | 6.12.38 | pselect | ✅ सत्यापित | ❌ कर्नेल पीढ़ी बेमेल |
| YuKongA/ghostlock-oplus | Find N5/X8 | - | 6.6.118 | pselect | ✅ | ❌ कर्नेल पीढ़ी बेमेल |
| OPPO Find X6 Pro अनुकूलन | Find X6 Pro | SM8550 | 5.15.149 | perf KASLR + ? | 🟡 KASLR ✅, बाद में सार्वजनिक नहीं | ❌ प्लेटफ़ॉर्म अलग |
| pubglite55/oppo-ghostlock | Find N2 | SM8475 | 5.10.236 | संपूर्ण परीक्षण विफल | ❌ मुख्य अवरोध | ⚠️ समान प्लेटफ़ॉर्म समान पीढ़ी, समान भाग्य |
| harry1080/oppo-ghostlock | Find N2 | SM8475 | 5.10.236 | संपूर्ण परीक्षण विफल | ❌ आर्किटेक्चरल रूप से असंभव | ⚠️ समान प्लेटफ़ॉर्म समान पीढ़ी, समान भाग्य |
| PD2229 (यह रिपोर्ट) | PD2229 | SM8475 | 5.10.233 | 17 उम्मीदवार सभी विफल | ❌ आर्किटेक्चरल रूप से असंभव | — |
五、मुख्य कर्नेल प्रतीक और ऑफसेट (PD2229 vmlinux वास्तविक परीक्षण)
स्थिर आधार पता
0xffffffc008000000, रनटाइम पर KASLR slide जोड़ना आवश्यक।
| प्रतीक | पता | उपयोग |
|---|---|---|
rt_mutex_start_proxy_lock | 0xffffffc00822baa8 | भेद्यता ट्रिगर प्रवेश बिंदु |
futex_wait_requeue_pi | 0xffffffc0082d7df4 | waiter आवंटन, स्टैक फ्रेम 0x1b0 |
__arm64_sys_futex | 0xffffffc0082dfe9c | स्टैक फ्रेम 0x90 |
do_futex | 0xffffffc0082d0768 | स्टैक फ्रेम 0xc0 |
core_sys_select | 0xffffffc008634cf0 | pselect स्टैक फ्रेम 0x1c0 |
____sys_sendmsg | 0xffffffc0093eda88 | स्टैक फ्रेम 0x90 |
do_recvmmsg | 0xffffffc0093ef49c | स्टैक फ्रेम 0x1d0 |
__arm64_sys_io_uring_register | 0xffffffc008aae328 | स्टैक फ्रेम 0x10+0x70 |
__io_uring_register | 0xffffffc008aae5f8 | स्टैक फ्रेम 0x80 |
inet6_protos | 0xffffffc00ab0a278 | चरण 4 लेखन लक्ष्य |
selinux_state | 0xffffffc00aee8c70 | SELinux अक्षम करने का लक्ष्य |
init_task | 0xffffffc00ab0c240 | cred पढ़ने का स्रोत |
rt_mutex_waiter संरचना (vivo 5.10.233 कस्टम)
struct rt_mutex_waiter {
uint64_t private; // +0x00 (vivo निजी फ़ील्ड)
struct rb_node {
uint64_t rb_parent_color; // +0x08
uint64_t rb_right; // +0x10 (vivo क्रम बदलता है)
uint64_t rb_left; // +0x18
} tree;
struct task_struct *task; // +0x20
struct rt_mutex *lock; // +0x28
};
// कुल आकार 0x30 (48 बाइट्स)
六、लागू बनाम लागू करने योग्य
✅ लागू बुनियादी ढांचा
- KASLR बाईपास —
perf_event_open+ callchain सैंपलिंग (OPPO Find X6 Pro 5.15.149 विधि के समान) - UAF ट्रिगर — तीन-थ्रेड PI डेडलॉक, FUTEX_CMP_REQUEUE_PI -EDEADLK लौटाता है
- पूर्ण प्रतीक तालिका — 103+ प्रतीक IDA द्वारा सत्यापित (JoinChang की 103/103 निष्कर्षण पद्धति के संदर्भ में)
- rt_mutex_waiter संरचना लेआउट — vivo कस्टम ऑफसेट की पुष्टि हुई
- स्टैक फ्रेम लेआउट सटीक विश्लेषण — futex और pselect/io_uring पथ गहराई गणना पूर्ण
- 17 स्टैक पुनर्प्राप्ति उम्मीदवारों का संपूर्ण बहिष्करण — पूर्ण "असंभव" मैट्रिक्स स्थापित
❌ लागू नहीं (मुख्य अवरोध)
- स्टैक पुनर्प्राप्ति प्रिमिटिव — SM8475 5.10 GKI कंपाइलर स्टैक लेआउट आर्किटेक्चरल रूप से अनुपयोगी
- प्रतिबंधित लेखन प्रिमिटिव — स्टैक पुनर्प्राप्ति विफलता के कारण rb_erase ट्रिगर नहीं हो सकता
- बाद के सभी चरण — कैस्केड अवरोध
七、अंतिम निष्कर्ष
⚠️ GhostLock (CVE-2026-43499) PD2229 (vivo X Fold+, SM8475, 5.10.233 GKI, Android 15 OriginOS 5) पर शोषण योग्य नहीं है।
मूल कारण यह है कि SM8475 5.10 GKI कंपाइलर (PGO+LTO+BOLT) द्वारा उत्पन्न स्टैक लेआउट, सभी ज्ञात syscall के स्टैक फ्रेम और
rt_mutex_waiterके बीच आर्किटेक्चरल गैर-ओवरलैप का कारण बनता है। यह कंपाइलर द्वारा निर्धारित एक वस्तुनिष्ठ तथ्य है, न कि शोषण तकनीक की समस्या।
सफल शोषण के सभी मामले 6.6/6.12 GKI पर हैं, क्योंकि इन नए कर्नेलों के कंपाइलर आउटपुट pselect fd_set और waiter के बीच पूर्ण ओवरलैप बनाते हैं (SP diff=-64)। 5.10 GKI में यह शर्त मौजूद नहीं है।
स्थापित बुनियादी ढांचा
- ✅ KASLR बाईपास प्रिमिटिव (perf_event_open साइड-चैनल)
- ✅ 103+ कर्नेल प्रतीक और ऑफसेट
- ✅ rt_mutex_waiter संरचना लेआउट
- ✅ UAF ट्रिगर क्षमता
- ✅ 17 स्टैक पुनर्प्राप्ति उम्मीदवारों का बहिष्करण मैट्रिक्स
九、संदर्भ रिपॉजिटरी सूचकांक
| रिपॉजिटरी | URL | मुख्य मूल्य |
|---|---|---|
| NebuSec/CyberMeowfia | https://github.com/NebuSec/CyberMeowfia | मूल शोषण फ्रेमवर्क, 97% सफलता दर |
| JoinChang/ghostlock-oneplus | https://github.com/JoinChang/ghostlock-oneplus | 6.12 GKI सफल अनुकूलन, 103 ऑफसेट निष्कर्षण पद्धति |
| p2p3p/GhostLock-for-OnePlus | https://github.com/p2p3p/GhostLock-for-OnePlus | 6.12 GKI पूर्ण शोषण श्रृंखला |
| YuKongA/ghostlock-oplus | https://github.com/YuKongA/ghostlock-oplus | 6.6 GKI OPPO अनुकूलन |
| pubglite55/oppo-ghostlock | https://github.com/pubglite55/oppo-ghostlock | SM8475 5.10.236 समान प्लेटफ़ॉर्म विफलता संदर्भ |
| harry1080/oppo-ghostlock | https://github.com/harry1080/oppo-ghostlock | SM8475 5.10.236 समान प्लेटफ़ॉर्म विफलता संदर्भ |
| NebuSec तकनीकी विश्लेषण | https://nebusec.ai/research/ionstack-part-2/ | GhostLock मूल श्रृंखला तकनीकी विवरण |
| अपस्ट्रीम फिक्स | commit 3bfdc63936dd | फिक्स कोड |