
Recherche d'exploit noyau permettant d'obtenir un root temporaire sur Amazon Fire 7 (Fire OS 7.3.3.1) via la faille use-after-free du JIT Mali kbase CVE-2022-38181, avec une chaîne de réécriture de modprobe_path.
Projet assisté par IA. Cette recherche, le développement de l'exploit et la documentation ont été produits avec l'assistance de l'IA en utilisant les modèles GLM-5.3 et DeepSeek V4.1 Flash.
Recherche d'exploit root pour l'Amazon Fire 7 9e gén (mustang, MT8163, Mali-T720) sur le firmware final — Fire OS 7.3.3.1, PS7331.4463N, kernel 4.9.117 (compilé le 2025-05-03, SPL 2024-08-01).
Objectif : LineageOS. La voie du bootloader est morte sur cette unité (bootrom patchée — preloader uniquement via court-circuit CMD), donc la seule route restante est un exploit logiciel du kernel.
nix-shell -p android-tools --run './run.sh' # add -p zig too if no zig
En cas de succès :```
/data/metrics/su id # run a command as root
/data/metrics/su # interactive root shell
Le reclaim réussit environ 1 démarrage sur 3 et un échec provoque un panic/redémarrage de la tablette ;
run.sh attend simplement le redémarrage et réessaie. SELinux est forcé en Permissive dans
le cadre de l'exploit, donc root est uniquement à l'exécution — un redémarrage restaure l'état d'origine et
vous relancez run.sh.
Les binaires précompilés st3 et su (armv7 statique) sont inclus, donc aucune chaîne d'outils n'est nécessaire
pour exécuter. ./run.sh --build les reconstruit à partir de poc/*.c si vous avez zig.
GhostLock (ci-dessous) est en pause : la variante BUG_ON rtmutex de MTK + aucune divulgation d'adresse kernel depuis le shell = impasse architecturale sur cette build (sessions 2-4). L'UAF JIT de kbase a été re-diagnostiqué (le « panic inconditionnel » du destroy-worker était le déréférencement JIT_FREE, log perdu à cause de la mort d'adbd en plein panic) et l'étape 2 est désormais prouvée par oracle — voir la section SESSION 5.
UAF de pile futex-PI dans remove_waiter() de rtmutex (divulgation NebuSec 2026-07, correctif 3bfdc63936dd
intégré 2026-04). Plage vulnérable 2.6.39–7.1 → notre 4.9.117 (mai 2025) est affecté.
Vérifié sur notre build exacte :
CONFIG_FUTEX=y, rtmutex compilé en dur, bug présent mot pour mot :
rtmutex.c:1108-1111 utilise current->pi_lock/current->pi_blocked_on (devrait être
waiter->task) ; site d'appel bogué rtmutex.c:1723 (chemin d'erreur de rt_mutex_start_proxy_lock)WAIT_REQUEUE_PI/CMP_REQUEUE_PI), aucun nœud de périphérique,
rien de contrôlé par SELinux — les obstacles fatals du chemin kbase n'existent pas icisched_setattr → __sched_setscheduler → rt_mutex_adjust_pi(p) à
sched/core.c:4706 — déréférence un pi_blocked_on obsolète ✓futex.c:1975 passe this->rt_waiter,
déclaré dans futex_wait_requeue_pi à futex.c:2880) → le waiter marque sa propre frame libérée
via les fd_sets de select (nr 142) arm32DEBUG_RT_MUTEXES désactivé
→ rt_mutex_waiter compact de 48 octets (tree_entry@0, pi_tree_entry@0xc, task@0x18,
lock@0x1c, prio@0x20, deadline@0x28)modprobe_path @ 0xc111488c (chaîne auto-localisée dans
vmlinux ; KALLSYMS_ALL désactivé donc les symboles de données nécessitent cette astuce) → exec binfmt inconnu → script
root (setenforce 0, désactiver OTA, su)refs/ : NebuSec/CyberMeowfia (original), GhostLock-5.10 (port Fire OS 8,
déclencheur ARM 32 bits complet dans src/exp32/), ghostlock-...-4.19-k40 (port Android Qualcomm 4.19)exp32/main.crt_waiter vs zone fd_set de do_sys_select — désassembler
notre vmlinux (do_sys_select stack_fds vs frame futex_wait_requeue_pi), exposer
STAMP_NFDS/STAMP_WAITER_OFF comme paramètres ajustablesFailed critical init step 3/dev/mali0 world-RW + SELinux gpu_device, kbase r26p0-01rel0selroot à 2 paquets : mise à zéro de selinux_state.enforcing, réécriture
de l'entrée fake vers commit_creds(&init_cred). uid=0, SELinux Permissive.mustang, Fire OS 7.3.3.1 PS7331.4463N/00315758630404.9.117-g08fe75b-dirty, compilé le sam. 3 mai 01:25:15 UTC 2025 (Linaro GCC 6.3-2017.05)/dev/kb, /dev/dkb (partitions de sauvegarde kernel Amazon) root:drmrpc 0660 — verrouillésmali_kbase r26p0-01rel0 (Midgard, Mali-T720), dans la plage affectée NVD r4p0–r31p0mali_kbase_mem.c:2721 kbase_jit_destroy_worker libère la région, n'efface jamais kctx->jit_alloc[id]mali_kbase_softjobs.c:1270 kbase_jit_free_finish déréférence le jit_alloc[ids[j]] obsolètemali_kbase_mem.c:3138 kbase_jit_backing_lost → chemin de destruction (se déclenche pendant le reclaim)