
Pesquisa de exploit de kernel que obtém root temporário no Amazon Fire 7 (Fire OS 7.3.3.1) através do use-after-free do JIT do Mali kbase CVE-2022-38181, com uma cadeia de sobrescrita de modprobe_path.
Projeto assistido por IA. Esta pesquisa, desenvolvimento de exploit e documentação foram produzidos com assistência de IA usando os modelos GLM-5.3 e DeepSeek V4.1 Flash.
Pesquisa de exploit de root para o Amazon Fire 7 9ª geração (mustang, MT8163, Mali-T720) no firmware final — Fire OS 7.3.3.1, PS7331.4463N, kernel 4.9.117 (compilado em 2025-05-03, SPL 2024-08-01).
Objetivo: LineageOS. O caminho do bootloader está morto nesta unidade (bootrom corrigida — apenas preloader via curto de CMD), então a única rota restante é um exploit de kernel por software.
nix-shell -p android-tools --run './run.sh' # add -p zig too if no zig
Em caso de sucesso:```
/data/metrics/su id # run a command as root
/data/metrics/su # interactive root shell
O reclaim ganha aproximadamente 1 boot em 3 e uma perda entra em pânico/reinicia o tablet;
run.sh apenas aguarda o reboot e tenta novamente. O SELinux é forçado para Permissive como
parte do exploit, então o root é apenas em tempo de execução — um reboot restaura o estado
original e você executa run.sh novamente.
Os binários pré-compilados st3 e su (armv7 estático) estão commitados, então nenhum toolchain é
necessário para executar. ./run.sh --build os recompila a partir de poc/*.c se você tiver zig.
O GhostLock (abaixo) está arquivado: a variante BUG_ON rtmutex da MTK + nenhuma divulgação de endereço de kernel a partir do shell = beco sem saída arquitetural nesta build (sessões 2-4). O UAF do JIT do kbase foi rediagnosticado (o "pânico incondicional" do destroy-worker era o deref do JIT_FREE, log perdido pela morte do adbd no meio do pânico) e o estágio 2 agora está provado por oráculo — veja a seção SESSÃO 5.
UAF de pilha do futex-PI em remove_waiter() do rtmutex (divulgação NebuSec 2026-07, correção 3bfdc63936dd
aplicada em 2026-04). Faixa vulnerável 2.6.39–7.1 → nosso 4.9.117 (maio de 2025) é afetado.
Verificado na nossa build exata:
CONFIG_FUTEX=y, rtmutex compilado, bug presente literalmente:
rtmutex.c:1108-1111 usa current->pi_lock/current->pi_blocked_on (deveria ser
waiter->task); local de chamada com bug rtmutex.c:1723 (caminho de erro de rt_mutex_start_proxy_lock)WAIT_REQUEUE_PI/CMP_REQUEUE_PI), sem nó de dispositivo,
nada controlado pelo SELinux — os obstáculos fatais do caminho kbase não existem aquisched_setattr → __sched_setscheduler → rt_mutex_adjust_pi(p) em
sched/core.c:4706 — desreferencia pi_blocked_on obsoleto ✓futex.c:1975 passa this->rt_waiter,
declarado em futex_wait_requeue_pi em futex.c:2880) → o waiter marca seu próprio frame liberado
via select do arm32 (nr 142) fd_setsDEBUG_RT_MUTEXES desligado
→ 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 (string auto-localizada em
vmlinux; KALLSYMS_ALL desligado, então símbolos de dados precisam deste truque) → exec de binfmt desconhecido → script
root (setenforce 0, desabilitar OTA, su)refs/: NebuSec/CyberMeowfia (original), GhostLock-5.10 (porta para Fire OS 8,
trigger ARM 32-bit completo em src/exp32/), ghostlock-...-4.19-k40 (porta Android Qualcomm 4.19)exp32/main.crt_waiter vs área fd_set de do_sys_select — desmontar
nosso vmlinux (do_sys_select stack_fds vs frame de futex_wait_requeue_pi), expor
STAMP_NFDS/STAMP_WAITER_OFF como ajustáveisFailed critical init step 3/dev/mali0 world-RW + SELinux gpu_device, kbase r26p0-01rel0selroot: zerar selinux_state.enforcing, reescrever
entrada falsa para commit_creds(&init_cred). uid=0, SELinux Permissive.mustang, Fire OS 7.3.3.1 PS7331.4463N/00315758630404.9.117-g08fe75b-dirty, compilado em Sat May 3 01:25:15 UTC 2025 (Linaro GCC 6.3-2017.05)/dev/kb, /dev/dkb (partições de backup de kernel da Amazon) root:drmrpc 0660 — bloqueadosmali_kbase r26p0-01rel0 (Midgard, Mali-T720), dentro da faixa afetada do NVD r4p0–r31p0mali_kbase_mem.c:2721 kbase_jit_destroy_worker libera a região, nunca limpa kctx->jit_alloc[id]mali_kbase_softjobs.c:1270 kbase_jit_free_finish desreferencia o jit_alloc[ids[j]] obsoletomali_kbase_mem.c:3138 kbase_jit_backing_lost → caminho de destroy (dispara durante o reclaim)0xc0008000 / PA 0x40080000)ARM_SW_DOMAIN_PAN → ret2usr viável; CONFIG_PANIC_ON_OOPS=y (tentativas falhas = reboot)SLAB_FREELIST_RANDOM/HARDENED, sem CONFIG_USER_NS/USERFAULTFD/NF_TABLESCONFIG_MODULES=y, sem STATIC_USERMODEHELPER → sobrescrita de modprobe_path = root