
CVE-2026-43499 Google TV वाले Chromecast (sabrina) के लिए GhostLock रूट एक्सप्लॉइट
Chromecast with Google TV (sabrina) के लिए रूट एक्सप्लॉइट, जो Linux kernel के futex PI (priority inheritance) सबसिस्टम में use-after-free (CVE-2026-43499) के माध्यम से काम करता है।
Android 14 और kernel 5.15.170 (PGO+BOLT+LTO, clang 17) चलाने वाले लॉक्ड बूटलोडर डिवाइस पर रूट प्राप्त करता है।
GhostLock, rt_mutex_start_proxy_lock() में -EDEADLK रोलबैक पाथ से कॉल किए जाने वाले remove_waiter() में एक बग का फायदा उठाता है। यह फ़ंक्शन waiter टास्क के बजाय requeuer के current->pi_blocked_on (जो पहले से NULL है) को साफ़ करता है। waiter का pi_blocked_on कभी साफ़ नहीं होता, जिससे kernel स्टैक पर मुक्त किए गए rt_mutex_waiter के लिए एक dangling pointer बना रह जाता है।
इसके बाद का sched_setattr, rt_mutex_adjust_pi -> rt_mutex_adjust_prio_chain को ट्रिगर करता है, जो dangling pointer का अनुसरण करता है और reclaimed heap पेज पर attacker-नियंत्रित डेटा पर PI चेन को वॉक करता है -- जिससे rb_erase के माध्यम से एक arbitrary write primitive मिलता है।
ucounts = NULL है -- cap_capable पहले iteration पर मैच करता है और inc_rlimit_ucounts एक लूप के बाद समाप्त हो जाता है, जिससे &init_user_ns लीक करने की आवश्यकता समाप्त हो जाती हैPERF_SAMPLE_TID फ़िल्टर सुनिश्चित करते हैं कि केवल कॉलिंग थ्रेड के register snapshots गिने जाएँ, जिससे hot system services mode-vote पर हावी नहीं होते5.15.170-android14-11-gf4a1f03072af (aarch64, PGO+BOLT+LTO, clang 17.0.2)CONFIG_FUTEX_PI=y, CONFIG_IO_URING=y, perf_event_paranoid=-1, SELinux enforcing, panic_on_oops=1, कोई user namespaces नहींexport ANDROID_NDK_HOME=/path/to/android-ndk
make -j$(nproc)
Android NDK की आवश्यकता है (r27 के साथ परीक्षित)। एक statically linked aarch64 बाइनरी उत्पन्न करता है।
adb push ghostlock /data/local/tmp/
adb shell "cd /data/local/tmp && ./ghostlock --cred"
एक्सप्लॉइट में ~20 सेकंड लगते हैं (heap spray + KernelSnitch bruteforce)। सफल होने पर, प्रक्रिया uid=0 क्रेडेंशियल्स के साथ /system/bin/sh को exec करती है।
यह एक्सप्लॉइट Claude Opus 4.6 (Anthropic) द्वारा GLM-5.3 (Z.ai) के साथ kernel exploitation सलाहकार के रूप में पोर्ट और विकसित किया गया था।
kernel/futex/, kernel/locking/rtmutex.c, lib/rbtree.cयह एक्सप्लॉइट सुरक्षा अनुसंधान और शैक्षिक उद्देश्यों के लिए प्रकाशित किया गया है। यह शोधकर्ता के स्वामित्व वाले डिवाइस को लक्षित करता है। इसका उपयोग उन डिवाइसों पर न करें जो आपके स्वामित्व में नहीं हैं या बिना प्राधिकरण के।
MIT
| चरण | तकनीक |
|---|
| KASLR लीक | perf_event_open के साथ PERF_SAMPLE_IP (TID-गेटेड) |
| Task struct लीक | perf_event_open के साथ PERF_SAMPLE_REGS_INTR (TID-गेटेड, linear-map पतों का मोड) |
| mm_struct लीक | KernelSnitch -- futex hash collision timing side-channel |
| Heap spray | SLUB discard choreography (memfd-close, CPU-partial overflow) + io_uring_setup(256) order-2 page reclaim |
| Stack overlay | AF_UNIX SOCK_SEQPACKET sendmsg -- move_addr_to_kernel 128-बाइट sockaddr को kernel स्टैक पर कॉपी करता है, जो dangling waiter के task/lock/prio फ़ील्ड्स को ओवरले करता है |
| Walk ट्रिगर | monotonic nice ladder (7 -> 14 -> 19) के साथ sched_setattr PI चेन वॉक को फायर करता है |
| Write primitive | rb_erase Case 1a, child (fake_cred) को parent->rb_right = task->cred पर लिखता है |
| Cred swap | task->cred = fake_cred (uid=0, सभी caps, spray पेज पर self-contained fake user_namespace) |
| Root shell | execve("/system/bin/sh") -- exec पाथ में commit_creds fake_cred को एक साफ़ slab credential में कॉपी करता है |