
Amazon Fire 7 (Fire OS 7.3.3.1) पर Mali kbase JIT use-after-free CVE-2022-38181 के माध्यम से अस्थायी root प्राप्त करने वाला Kernel exploit शोध, जिसमें modprobe_path overwrite chain शामिल है।
AI-सहायित परियोजना। यह शोध, एक्सप्लॉइट विकास, और दस्तावेज़ीकरण AI सहायता से मॉडल GLM-5.3 और DeepSeek V4.1 Flash का उपयोग करके तैयार किए गए थे।
अंतिम फर्मवेयर पर Amazon Fire 7 9th gen (mustang, MT8163, Mali-T720) के लिए रूट एक्सप्लॉइट शोध — Fire OS 7.3.3.1, PS7331.4463N, kernel 4.9.117 (निर्मित 2025-05-03, SPL 2024-08-01)।
लक्ष्य: LineageOS। इस यूनिट पर बूटलोडर पथ समाप्त है (पैच किया गया bootrom — केवल preloader, CMD शॉर्ट के माध्यम से), इसलिए एकमात्र शेष मार्ग सॉफ़्टवेयर कर्नेल एक्सप्लॉइट है।
nix-shell -p android-tools --run './run.sh' # add -p zig too if no zig
सफलता पर:```
/data/metrics/su id # run a command as root
/data/metrics/su # interactive root shell
The reclaim लगभग 3 में से 1 boot जीतता है और हारने पर tablet panic/reboot हो जाता है;
run.sh बस reboot का इंतज़ार करता है और फिर से try करता है। SELinux को exploit के हिस्से के रूप में
जबरन Permissive किया जाता है, इसलिए root runtime-only है — reboot करने पर stock वापस आ जाता है और
आप run.sh फिर से चलाते हैं।
Prebuilt st3 और su (armv7 static) commit किए गए हैं, इसलिए चलाने के लिए किसी toolchain की ज़रूरत नहीं है।
./run.sh --build उन्हें poc/*.c से rebuild करता है अगर आपके पास zig है।
GhostLock (नीचे) parked है: MTK का BUG_ON rtmutex variant + shell से zero kernel-address disclosure = इस build पर architectural dead end (sessions 2-4)। kbase JIT UAF का फिर से निदान किया गया (destroy-worker "unconditional panic" वह JIT_FREE deref था, log adbd death mid-panic में खो गया) और stage 2 अब oracle-proven है — SESSION 5 section देखें।
rtmutex remove_waiter() futex-PI stack-UAF (NebuSec disclosure 2026-07, fix 3bfdc63936dd
2026-04 में landed)। Vulnerable range 2.6.39–7.1 → हमारा 4.9.117 (May 2025) affected है।
हमारे exact build पर verified:
CONFIG_FUTEX=y, rtmutex compiled in, bug verbatim मौजूद:
rtmutex.c:1108-1111 current->pi_lock/current->pi_blocked_on का उपयोग करता है (होना चाहिए
waiter->task); buggy call site rtmutex.c:1723 (rt_mutex_start_proxy_lock error path)WAIT_REQUEUE_PI/CMP_REQUEUE_PI), कोई device node नहीं,
कुछ भी SELinux-gated नहीं — kbase path की fatal obstacles यहाँ मौजूद नहीं हैंsched_setattr → __sched_setscheduler → rt_mutex_adjust_pi(p) at
sched/core.c:4706 — stale pi_blocked_on को deref करता है ✓futex.c:1975 this->rt_waiter pass करता है,
जो futex_wait_requeue_pi में futex.c:2880 पर declared है) → waiter arm32 select (nr 142) fd_sets
के ज़रिए अपना ही freed frame stamp करता हैDEBUG_RT_MUTEXES off
→ compact 48-byte rt_mutex_waiter (tree_entry@0, pi_tree_entry@0xc, task@0x18,
lock@0x1c, prio@0x20, deadline@0x28)modprobe_path @ 0xc111488c (string vmlinux में self-located;
KALLSYMS_ALL off इसलिए data symbols को यह trick चाहिए) → unknown-binfmt exec → root
script (setenforce 0, disable OTA, su)refs/ में references: NebuSec/CyberMeowfia (original), GhostLock-5.10 (Fire OS 8 port,
src/exp32/ में पूरा 32-bit ARM trigger), ghostlock-...-4.19-k40 (Qualcomm 4.19 Android port)exp32/main.c का portrt_waiter frame offset vs do_sys_select fd_set area — हमारे vmlinux को
disassemble करें (do_sys_select stack_fds vs futex_wait_requeue_pi frame), STAMP_NFDS/STAMP_WAITER_OFF को
tunables के रूप में expose करेंFailed critical init step 3/dev/mali0 world-RW + SELinux gpu_device, kbase r26p0-01rel0selroot 2-packet chain: selinux_state.enforcing को zero करें, fake entry को
commit_creds(&init_cred) में rewrite करें। uid=0, SELinux Permissive.mustang, Fire OS 7.3.3.1 PS7331.4463N/00315758630404.9.117-g08fe75b-dirty, built Sat May 3 01:25:15 UTC 2025 (Linaro GCC 6.3-2017.05)/dev/kb, /dev/dkb (Amazon kernel-backup partitions) root:drmrpc 0660 — lockedmali_kbase r26p0-01rel0 (Midgard, Mali-T720), NVD affected range r4p0–r31p0 के अंदरmali_kbase_mem.c:2721 kbase_jit_destroy_worker region free करता है, कभी kctx->jit_alloc[id] clear नहीं करताmali_kbase_softjobs.c:1270 kbase_jit_free_finish stale jit_alloc[ids[j]] को deref करता हैmali_kbase_mem.c:3138 kbase_jit_backing_lost → destroy path (reclaim के दौरान fire होता है)0xc0008000 VA / 0x40080000 PA पर)ARM_SW_DOMAIN_PAN → ret2usr viable; CONFIG_PANIC_ON_OOPS=y (failed attempts = reboot)SLAB_FREELIST_RANDOM/HARDENED, no CONFIG_USER_NS/USERFAULTFD/NF_TABLESCONFIG_MODULES=y, no STATIC_USERMODEHELPER → modprobe_path overwrite = root