
Investigación de exploit del kernel que logra root temporal en Amazon Fire 7 (Fire OS 7.3.3.1) mediante el use-after-free del JIT de Mali kbase CVE-2022-38181, con una cadena de sobrescritura de modprobe_path.
Proyecto asistido por IA. Esta investigación, el desarrollo del exploit y la documentación fueron producidos con asistencia de IA utilizando los modelos GLM-5.3 y DeepSeek V4.1 Flash.
Investigación de exploit de root para el Amazon Fire 7 9.ª gen (mustang, MT8163, Mali-T720) en el firmware final — Fire OS 7.3.3.1, PS7331.4463N, kernel 4.9.117 (compilado 2025-05-03, SPL 2024-08-01).
Objetivo: LineageOS. La ruta del bootloader está muerta en esta unidad (bootrom parcheada — solo preloader vía cortocircuito CMD), por lo que la única ruta restante es un exploit de kernel por software.
nix-shell -p android-tools --run './run.sh' # add -p zig too if no zig
Si tiene éxito:```
/data/metrics/su id # run a command as root
/data/metrics/su # interactive root shell
El reclaim gana aproximadamente 1 arranque de cada 3 y una pérdida provoca un panic/reinicio de la tablet;
run.sh simplemente espera al reinicio y reintenta. SELinux se fuerza a Permissive como
parte del exploit, por lo que root es solo en tiempo de ejecución — un reinicio restaura el estado original y
vuelves a ejecutar run.sh.
Los binarios precompilados st3 y su (armv7 estáticos) están incluidos, así que no se necesita toolchain
para ejecutar. ./run.sh --build los recompila desde poc/*.c si tienes zig.
GhostLock (abajo) está aparcado: la variante BUG_ON rtmutex de MTK + la ausencia de divulgación de direcciones del kernel desde el shell = callejón sin salida arquitectónico en esta compilación (sesiones 2-4). El UAF del JIT de kbase fue re-diagnosticado (el "panic incondicional" del destroy-worker era la desreferencia de JIT_FREE, registro perdido por la muerte de adbd a mitad del panic) y la etapa 2 ahora está probada por oráculo — ver la sección SESIÓN 5.
UAF de pila futex-PI en remove_waiter() de rtmutex (divulgación de NebuSec 2026-07, corrección 3bfdc63936dd
aplicada 2026-04). Rango vulnerable 2.6.39–7.1 → nuestro 4.9.117 (mayo 2025) está afectado.
Verificado en nuestra compilación exacta:
CONFIG_FUTEX=y, rtmutex compilado, bug presente textualmente:
rtmutex.c:1108-1111 usa current->pi_lock/current->pi_blocked_on (debería ser
waiter->task); sitio de llamada con bug rtmutex.c:1723 (ruta de error de rt_mutex_start_proxy_lock)WAIT_REQUEUE_PI/CMP_REQUEUE_PI), sin nodo de dispositivo,
nada restringido por SELinux — los obstáculos fatales de la ruta kbase no existen aquísched_setattr → __sched_setscheduler → rt_mutex_adjust_pi(p) en
sched/core.c:4706 — desreferencia pi_blocked_on obsoleto ✓futex.c:1975 pasa this->rt_waiter,
declarado en futex_wait_requeue_pi en futex.c:2880) → el waiter marca su propio frame liberado
mediante select de arm32 (nr 142) fd_setsDEBUG_RT_MUTEXES desactivado
→ rt_mutex_waiter compacto de 48 bytes (tree_entry@0, pi_tree_entry@0xc, task@0x18,
lock@0x1c, prio@0x20, deadline@0x28)modprobe_path @ 0xc111488c (cadena auto-localizada en
vmlinux; KALLSYMS_ALL desactivado, así que los símbolos de datos necesitan este truco) → exec de binfmt desconocido → script
root (setenforce 0, desactivar OTA, su)refs/: NebuSec/CyberMeowfia (original), GhostLock-5.10 (port a Fire OS 8,
trigger completo de ARM de 32 bits en src/exp32/), ghostlock-...-4.19-k40 (port a Android Qualcomm 4.19)exp32/main.crt_waiter vs área fd_set de do_sys_select — desensamblar
nuestro vmlinux (do_sys_select stack_fds vs frame de futex_wait_requeue_pi), exponer
STAMP_NFDS/STAMP_WAITER_OFF como parámetros ajustablesFailed critical init step 3/dev/mali0 world-RW + SELinux gpu_device, kbase r26p0-01rel0selroot: poner a cero selinux_state.enforcing, reescribir
la entrada falsa a commit_creds(&init_cred). uid=0, SELinux Permissive.mustang, Fire OS 7.3.3.1 PS7331.4463N/00315758630404.9.117-g08fe75b-dirty, compilado Sat May 3 01:25:15 UTC 2025 (Linaro GCC 6.3-2017.05)/dev/kb, /dev/dkb (particiones de respaldo del kernel de Amazon) root:drmrpc 0660 — bloqueadasmali_kbase r26p0-01rel0 (Midgard, Mali-T720), dentro del rango afectado de NVD r4p0–r31p0mali_kbase_mem.c:2721 kbase_jit_destroy_worker libera la región, nunca limpia kctx->jit_alloc[id]mali_kbase_softjobs.c:1270 kbase_jit_free_finish desreferencia el jit_alloc[ids[j]] obsoletomali_kbase_mem.c:3138 kbase_jit_backing_lost → ruta de destrucción (se dispara durante el reclaim)