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 डिवाइस वास्तविक परीक्षण
二、आदर्श शोषण श्रृंखला बनाम 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 प्रत्येक चरण की वास्तविक प्रगति
三、स्टैक पुनर्प्राप्ति प्रिमिटिव संपूर्ण परीक्षण परिणाम (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 स्टैक लेखन विधियाँ
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_MAP auxv को कर्नेल स्टैक में कॉपी करता है
- सफलता दर: 97%, लगभग 5 सेकंड [root shell]
- PD2229 अनुकूलता: ❌
PR_SET_MM_MAP Android पर 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 पूर्ण शोषण
YuKongA/ghostlock-oplus — OPPO Find N5/X8
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 संदर्भ रिपॉजिटरी तुलना सारांश तालिका
五、मुख्य कर्नेल प्रतीक और ऑफसेट (PD2229 vmlinux वास्तविक परीक्षण)
स्थिर आधार पता 0xffffffc008000000, रनटाइम पर KASLR slide जोड़ना आवश्यक।
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 स्टैक पुनर्प्राप्ति उम्मीदवारों का बहिष्करण मैट्रिक्स
九、संदर्भ रिपॉजिटरी सूचकांक