
Kernel-Exploit-Forschung, die temporären Root auf dem Amazon Fire 7 (Fire OS 7.3.3.1) über den Mali kbase JIT Use-after-free CVE-2022-38181 erreicht, mit einer modprobe_path-Überschreibungskette.
KI-gestütztes Projekt. Diese Recherche, Exploit-Entwicklung und Dokumentation wurden mit KI-Unterstützung unter Verwendung der Modelle GLM-5.3 und DeepSeek V4.1 Flash erstellt.
Root-Exploit-Recherche für das Amazon Fire 7 9. Gen (mustang, MT8163, Mali-T720) auf der finalen Firmware — Fire OS 7.3.3.1, PS7331.4463N, Kernel 4.9.117 (gebaut 2025-05-03, SPL 2024-08-01).
Ziel: LineageOS. Der Bootloader-Pfad ist auf diesem Gerät tot (gepatchtes Bootrom — nur Preloader via CMD-Kurzschluss), daher ist der einzige verbleibende Weg ein Software-Kernel-Exploit.
nix-shell -p android-tools --run './run.sh' # add -p zig too if no zig
Bei Erfolg:```
/data/metrics/su id # run a command as root
/data/metrics/su # interactive root shell
Der Reclaim gewinnt ungefähr 1 Boot von 3 und ein Verlust führt zu einer Panik/Neustart des Tablets;
run.sh wartet einfach auf den Neustart und versucht es erneut. SELinux wird als
Teil des Exploits auf Permissive gezwungen, daher ist root nur zur Laufzeit — ein Neustart stellt den Auslieferungszustand wieder her und
du führst run.sh erneut aus.
Vorkompiliertes st3 und su (armv7 static) sind eingecheckt, daher wird keine Toolchain zum
Ausführen benötigt. ./run.sh --build baut sie aus poc/*.c neu, wenn du zig hast.
GhostLock (unten) ist geparkt: MTKs BUG_ON-rtmutex-Variante + keine Kernel-Adress-Offenlegung aus der Shell = architektonische Sackgasse in diesem Build (Sessions 2-4). Der kbase JIT UAF wurde neu diagnostiziert (die Destroy-Worker-„bedingungslose Panik" war die JIT_FREE-Dereferenzierung, Log verloren durch adbd-Tod mitten in der Panik) und Stufe 2 ist nun orakel-bewiesen — siehe SESSION 5 Abschnitt.
rtmutex remove_waiter() futex-PI Stack-UAF (NebuSec-Offenlegung 2026-07, Fix 3bfdc63936dd
gelandet 2026-04). Verwundbarer Bereich 2.6.39–7.1 → unser 4.9.117 (Mai 2025) ist betroffen.
Verifiziert auf unserem exakten Build:
CONFIG_FUTEX=y, rtmutex einkompiliert, Bug wörtlich vorhanden:
rtmutex.c:1108-1111 verwendet current->pi_lock/current->pi_blocked_on (sollte
waiter->task sein); fehlerhafte Aufrufstelle rtmutex.c:1723 (rt_mutex_start_proxy_lock Fehlerpfad)WAIT_REQUEUE_PI/CMP_REQUEUE_PI), kein Device-Node,
nichts SELinux-geschützt — die fatalen Hindernisse des kbase-Pfads existieren hier nichtsched_setattr → __sched_setscheduler → rt_mutex_adjust_pi(p) bei
sched/core.c:4706 — dereferenziert veraltetes pi_blocked_on ✓futex.c:1975 übergibt this->rt_waiter,
deklariert in futex_wait_requeue_pi bei futex.c:2880) → Waiter stempelt seinen eigenen freigegebenen Frame
via arm32 select (nr 142) fd_setsDEBUG_RT_MUTEXES aus
→ kompakter 48-Byte rt_mutex_waiter (tree_entry@0, pi_tree_entry@0xc, task@0x18,
lock@0x1c, prio@0x20, deadline@0x28)modprobe_path @ 0xc111488c (String selbst-lokalisiert in
vmlinux; KALLSYMS_ALL aus, daher brauchen Datensymbole diesen Trick) → unknown-binfmt exec → root
script (setenforce 0, OTA deaktivieren, su)refs/: NebuSec/CyberMeowfia (Original), GhostLock-5.10 (Fire OS 8 Port,
vollständiger 32-Bit-ARM-Trigger in src/exp32/), ghostlock-...-4.19-k40 (Qualcomm 4.19 Android Port)exp32/main.crt_waiter Frame-Offset vs do_sys_select fd_set-Bereich — unser vmlinux
disassemblieren (do_sys_select stack_fds vs futex_wait_requeue_pi Frame), STAMP_NFDS/STAMP_WAITER_OFF
als Tunables offenlegenFailed critical init step 3/dev/mali0 world-RW + SELinux gpu_device, kbase r26p0-01rel0selroot 2-Paket-Kette: selinux_state.enforcing nullen, Fake-Eintrag
auf commit_creds(&init_cred) umschreiben. uid=0, SELinux Permissive.mustang, Fire OS 7.3.3.1 PS7331.4463N/00315758630404.9.117-g08fe75b-dirty, gebaut Sat May 3 01:25:15 UTC 2025 (Linaro GCC 6.3-2017.05)/dev/kb, /dev/dkb (Amazon Kernel-Backup-Partitionen) root:drmrpc 0660 — gesperrtmali_kbase r26p0-01rel0 (Midgard, Mali-T720), innerhalb des NVD-betroffenen Bereichs r4p0–r31p0mali_kbase_mem.c:2721 kbase_jit_destroy_worker gibt Region frei, löscht nie kctx->jit_alloc[id]mali_kbase_softjobs.c:1270 kbase_jit_free_finish dereferenziert das veraltete jit_alloc[ids[j]]mali_kbase_mem.c:3138 kbase_jit_backing_lost → Destroy-Pfad (feuert während Reclaim)0xc0008000 VA / 0x40080000 PA)ARM_SW_DOMAIN_PAN → ret2usr gangbar; CONFIG_PANIC_ON_OOPS=y (fehlgeschlagene Versuche = Neustart)SLAB_FREELIST_RANDOM/HARDENED, kein CONFIG_USER_NS/USERFAULTFD/NF_TABLESCONFIG_MODULES=y, kein STATIC_USERMODEHELPER → modprobe_path-Überschreiben = root