
CVE-2026-43499 futex UAF के Honor YLP-W00 kernel 6.12.38 पर exploitation प्रयासों का दस्तावेजीकरण करने वाला शोध रिपॉज़िटरी, जिसमें PoC स्रोत, kernel offsets, और विफल privilege-escalation chains का विश्लेषण शामिल है।
अनुसंधान स्थिति: भेद्यता ट्रिगर होने की पुष्टि, PI walk सफल बिना क्रैश, लेकिन पूर्ण प्रिविलेज एस्केलेशन श्रृंखला लागू नहीं। अपस्ट्रीम अपडेट की प्रतीक्षा।
यह रिपॉजिटरी Honor YLP-W00 टैबलेट (कर्नेल 6.12.38, +pgo+bolt+lto+mlgo) पर CVE-2026-43499 का उपयोग करके अस्थायी प्रिविलेज एस्केलेशन की पूरी अनुसंधान प्रक्रिया दर्ज करती है।
भेद्यता ट्रिगर सफल (EDEADLK), PI chain walk सफल (sched_setattr=0, क्रैश नहीं), लेकिन PGO कंपाइलेशन के कारण do_futex इनलाइन हो गया, सभी स्टैक रिक्लेम कैरियर विफल; CyberMeowfiaNS का late_refs राइट प्रिमिटिव slab ज्यामिति बेमेल के कारण भी हिट नहीं कर सका।
| आइटम | मान |
|---|---|
| मॉडल | Honor YLP-W00 (टैबलेट) |
| सिस्टम | HONORYLP-W00/10DLDLD170SP3C00E144 |
| सिस्टम संस्करण | 10.0.0.170 (MagicOS 10.0) |
| कर्नेल | 6.12.38-android16-5-gfde7767f6ef6-abogki481467632-4k |
| कंपाइल | +pgo,+bolt,+lto,+mlgo (clang 19.0.1) |
| Kernel SHA-256 | 48b622a20a700cdde0b8f2f6e83959df00a7efedf52f347377cf542f7b58948e |
| Bootloader | लॉक |
| SELinux | Enforcing |
| kstack रैंडमाइज़ेशन | बंद |
| ashmem | Rust रीराइट |
| MTE | हार्डवेयर समर्थित लेकिन KASAN सक्षम नहीं |
CyberMeowfiaNS ऑडिट ने VULNERABLE_PATTERN_PRESENT की पुष्टि की। समान kernel SHA-256 पर दो सफल मामले (honor-mt6993, honor8e5) हैं, लेकिन उन्होंने late_refs राइट प्रिमिटिव का उपयोग किया, जो इस डिवाइस पर पुनरुत्पादित नहीं हो सकता (नीचे विवरण देखें)।
Honor 6.12.38 कर्नेल +pgo+bolt+lto+mlgo के साथ कंपाइल किया गया है, जिसके कारण __arm64_sys_futex सीधे futex_wait_requeue_pi को कॉल करता है, do_futex मध्य परत को छोड़ देता है। futex कॉल श्रृंखला मानक तीन परतों से दो परतों में बदल गई:
मानक GKI: __arm64_sys_futex -> do_futex -> futex_wait_requeue_pi
यह डिवाइस: __arm64_sys_futex -> futex_wait_requeue_pi (do_futex इनलाइन)
इसके कारण waiter अधिक उथले स्टैक स्थान पर है (गहराई 0x130 बजाय मानक 0x1b0+), सभी मानक स्टैक रिक्लेम कैरियर की कवरेज ज्यामिति बेमेल है।
| फ़ील्ड | ऑफ़सेट | आकार |
|---|---|---|
| tree_entry (rb_node) | +0x00 | 24B |
| pi_tree_entry (rb_node) | +0x18 | 24B |
| lock | +0x38 | 8B |
| prio | +0x44 | 4B |
| deadline | +0x48 | 8B |
| task | +0x50 | 8B |
| ww_ctx | +0x58 | 8B |
| कुल आकार | 0x70 | 112B |
| सिंबल | ऑफ़सेट |
|---|---|
| init_task | 0x023ecf00 |
| init_cred | 0x02402cb0 |
| root_task_group | 0x0261a740 |
| selinux_state.enforcing | 0x026663c8 |
| rb_erase | 0x00bce274 |
| rt_mutex_adjust_prio_chain | 0x115060c |
| commit_creds | 0x00b89c10 |
| worker_thread | 0x00adfef8 |
| remove_waiter | 0x0112b20 |
safe mode में UAF ट्रिगर और PI walk सफल की पुष्टि:
[futex] CMP_REQUEUE_PI ret=-1 errno=35 (EDEADLK) ← UAF ट्रिगर सफल
[futex] consumer sched_setattr ret=0 errno=0 ← PI walk सफल, क्रैश नहीं
डिवाइस ऑनलाइन रहा, boot_id अपरिवर्तित, SELinux अभी भी Enforcing। rb_erase ने वैध लेकिन अनुपयोगी पते पर लिखा।
प्रयास किए गए स्टैक रिक्लेम कैरियर:
| कैरियर | सिद्धांत | परिणाम |
|---|---|---|
| pselect | fd_set स्टैक कॉपी | shift=26 (PGO इनलाइन), fd_set क्षमता अपर्याप्त |
| MCAST_JOIN_SOURCE_GROUP | 0x108 बाइट स्टैक कॉपी | WAITER_OFF=0x308 >> 0x108, ओवरलैप नहीं |
| adjtimex | timex स्ट्रक्चर स्टैक कॉपी | buf depth 0x118 < waiter 0x130, ओवरलैप नहीं |
| io_submit | struct iocb स्टैक ओवरराइट | waiter[0x28..0x67] कवर, lock@0x58 रेंज में नहीं |
| PR_SET_MM_MAP | prctl स्टैक राइट | EPERM |
| सिग्नल डिलीवरी (do_signal) | pt_regs स्टैक सेव | फ्रेम waiter[0x00..0x28] कवर, task@0x50 और lock@0x58 अन्य फ्रेम द्वारा अमान्य मानों से ओवरराइट, क्रैश |
| rt_sigreturn | fpsimd vregs 512B | 6.12.38 पर ldtr से per-cpu क्षेत्र में लोड, कर्नेल स्टैक से नहीं गुजरता |
मुख्य बाधा: waiter गहराई 0x130 पर है, tree_entry(+0x00) और pi_tree_entry(+0x18) आंशिक कैरियर द्वारा कवर किए जा सकते हैं, लेकिन task(+0x50) और lock(+0x58) अधिक गहरे में हैं, कोई ज्ञात कैरियर वहाँ तक नहीं पहुँच सकता। tree_entry को कवर करने से rb_erase केवल खाली पथ (NULL राइट) पर जा सकता है, लक्ष्य पते तक निर्देशित नहीं कर सकता।
CyberMeowfiaNS पूरी तरह भिन्न विधि का उपयोग करता है, स्टैक रिक्लेम समस्या को बायपास करता है:
पूर्व श्रृंखला सभी सफल:
--info पास: कर्नेल पहचान सत्यापन सफल--check पास: carrier DSO (libdumpstateaidl.so) प्रीचेक पुष्टि
late_refs रेस विफल:
reclaim_hits=0विफलता का मूल कारण: slab ज्यामिति बेमेल।
ep_get_upwards_depth_proc फ़ंक्शन 6.12.38 पर मौजूद नहीं (6.12.58 संदर्भ कर्नेल विशिष्ट)। लेकिन ep_loop_check_proc वास्तव में eventpoll.gen (+0xa8) पर लिखता है, इसलिए यह प्रत्यक्ष कारण नहीं है।
eventpoll स्ट्रक्चर आकार 0xdc0 (3520 बाइट्स), kmalloc-4k से आवंटित (order=3, 32KB slab, 8 ऑब्जेक्ट)। कोड की धारणा eventpoll_size=0xd0 (208 बाइट्स) गलत है।
eventpoll_epi (epitem) 128 बाइट्स, order=0, 4KB पेज, 32 ऑब्जेक्ट प्रति पेज। late_refs प्रति राउंड केवल 1-2 epitem रिलीज़ करता है, पूरे 4KB पेज को खाली करने के लिए अपर्याप्त ताकि page allocator रिक्लेम कर सके।
late_refs को क्रॉस-कैश पेज रिक्लेम चाहिए: रिलीज़ किए गए epitem पेज → page allocator → SKB order-3 पेज। लेकिन इसके लिए समान पेज पर सभी 32 epitem रिलीज़ होने चाहिए, और कोड का epoll graph लेआउट इसकी गारंटी नहीं दे सकता।
6.12.58 संदर्भ कर्नेल में भिन्न SLUB कॉन्फ़िगरेशन या slab लेआउट हो सकता है, जिससे क्रॉस-कैश रिक्लेम अधिक आसानी से ट्रिगर होता है।
| फ़ाइल | विवरण | आकार |
|---|---|---|
firmware/boot_10.0.0.170.img | सिस्टम संस्करण 10.0.0.170 का boot.img | 96 MB |
firmware/honor_kernel_6.12.38.img | boot.img से निकाला गया कर्नेल ELF (सिंबल टेबल सहित) | 44 MB |
firmware/libdumpstateaidl_honor.so | Carrier DSO (डिवाइस से खींचा गया) | 52 KB |
boot.img से llvm-nm द्वारा कर्नेल सिंबल टेबल निकाली जा सकती है, llvm-objdump द्वारा डिसअसेम्बली विश्लेषण फ़ंक्शन लेआउट।
| फ़ाइल | विवरण |
|---|---|
src/test_safemode.c | safe mode futex ट्रिगर + PI walk सत्यापन (stamp नहीं) |
src/test_trigger.c | futex UAF ट्रिगर परीक्षण |
src/futex_trigger.c | futex ट्रिगर कोर कोड |
src/exploit_rtsig.c | rt_sigreturn सिग्नल फ्रेम stamp परीक्षण |
src/exploit_rtsig2.c | rt_sigreturn सिग्नल फ्रेम stamp (उन्नत संस्करण) |
src/exploit_regstamp.c | do_signal रजिस्टर stamp परीक्षण |
src/exploit_adjtimex.c | adjtimex primer परीक्षण |
src/exploit_iosubmit.c | io_submit AIO primer परीक्षण |
src/exploit_v3.c | KASLR + futex + adjtimex संयोजन |
src/kaslr_tracefs.c | tracefs बाइनरी ring buffer KASLR लीक |
src/kaslr_tracefs_v2.c | tracefs KASLR लीक (उन्नत संस्करण) |
src/dump_sigframe.c | सिग्नल फ्रेम केवल-पढ़ने योग्य निदान |
src/cmwns_*.c/h | CyberMeowfiaNS स्रोत कोड (अनुकूलित संस्करण) |
src/cve_2026_43499_audit.py | CyberMeowfiaNS CVE-2026-43499 ऑडिट स्क्रिप्ट |
| फ़ाइल | विवरण |
|---|---|
config/offsets.json | कर्नेल सिंबल ऑफ़सेट (BTF सत्यापित) |
config/target.h | Honor YLP-W00 लक्ष्य कॉन्फ़िगरेशन (ghostlock मार्ग) |
config/target_honor_ylp_w00.h | Honor YLP-W00 लक्ष्य कॉन्फ़िगरेशन (CyberMeowfiaNS मार्ग) |