
Exploit root temporaneo specifico per firmware per Toshiba/Amazon Fire TV (hazel) che utilizza CVE-2026-43499. Implementa UAF futex-PI ARM32, leak di indirizzi del kernel, reclaim di mm_struct e patch delle credenziali per ottenere UID 0 tramite ADB.
Exploit di root temporaneo per la piattaforma Amazon hazel Fire TV, basato su
CVE-2026-43499. L'exploit è destinato al firmware ARM32
Linux 4.9 condiviso dai televisori Hazel di diversi produttori.
I profili attualmente coprono il firmware da PS7657.3645N a PS7716.5665N.
La configurazione attualmente testata su hardware è:
| Dispositivo | Toshiba Fire TV (hazel) |
| Build Fire OS | PS7716.5665N |
| Kernel | Linux 4.9.113 |
| Modello | AFTHA004 (C350) |
[!WARNING] Questo exploit rimane specifico per il firmware anche se supporta più release Hazel. Gli indirizzi del kernel, gli offset delle strutture e le impostazioni di reclaim sono caricati da profili rigorosi.
PS7716.5665Nè testato su hardware; i profili più vecchi inclusi si basano su analisi statica del firmware e necessitano ancora di segnalazioni da televisori corrispondenti.Non aggirare la corrispondenza dei profili né copiare manualmente gli indirizzi su un firmware non correlato. I profili generati staticamente richiedono comunque conferma su hardware corrispondente.
Un reclaim dell'heap fallito può causare un panic e riavviare il televisore. Il root è temporaneo e viene perso dopo il riavvio. Se il televisore si blocca, è sempre possibile spegnerlo e riaccenderlo.
L'exploit utilizza CVE-2026-43499 per ottenere temporaneamente UID 0 dall'ambiente shell ADB normale.
La catena di exploit include:
mm_structDopo un'esecuzione riuscita, l'exploit mantiene vivi gli oggetti del kernel richiesti dal percorso di root e avvia un demone locale per i comandi.
SELinux rimane Enforcing. I comandi eseguiti tramite il demone root mantengono il dominio SELinux shell e il capability bounding set disponibile su questo firmware.
hazel_root.c exploit principale, fase di lettura/scrittura del kernel, patching delle credenziali e client/server per comandi roothazel_reclaim.h leak di indirizzi del kernel e reclaim cross-cache di mm_structhazel_profile.c, hazel_profile.h parser rigoroso dei profili e matcher runtimeprofiles/ profili firmware revisionati e generatitools/profile_creator/ analizzatore firmware Python/uv e creatore di profili compatibilitools/device_scripts/ utilità opzionali per OTA, servizi Amazon e launcherGli esempi seguenti presuppongono Linux e che adb sia disponibile in $PATH.
Imposta NDK sulla directory del tuo Android NDK r27d:
export NDK=/path/to/android-ndk-r27d
Poi compila:
"$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/clang" \
--target=armv7a-linux-androideabi28 \
-O2 -g0 -Wall -Wextra -Wpedantic -fPIE -pie \
hazel_root.c hazel_profile.c -o hazel_root \
-pthread
Connettersi al televisore tramite ADB.
Se si utilizza ADB di rete:
adb connect <TV_IP>:5555
Invia l'exploit:
adb shell mkdir -p /data/local/tmp/profiles
adb push hazel_root /data/local/tmp/hazel_root
adb shell chmod 755 /data/local/tmp/hazel_root
adb push profiles/. /data/local/tmp/profiles/
Verifica la selezione del profilo senza attivare l'exploit:
adb shell 'cd /data/local/tmp && ./hazel_root --check-profile'
Il loader richiede corrispondenze esatte per ro.product.device, build fingerprint, versione incrementale, kernel release e architettura. Rifiuta profili malformati, campi sconosciuti, percorsi di exploit non supportati, corrispondenze mancanti e profili multipli corrispondenti. Un profilo esplicito può essere verificato con:
adb shell 'cd /data/local/tmp && ./hazel_root --check-profile --profile profiles/PROFILE.conf'
Avvia da un avvio pulito:
adb shell 'cd /data/local/tmp && ./hazel_root'
Un'esecuzione riuscita termina con un output simile a:
[root] uid=0 euid=0 gid=0
[ROOT] uid=0 daemon pid=... socket=@hazel_root
Il reclaim è probabilistico. Un tentativo non riuscito può fallire in modo pulito oppure andare in panic e riavviare la TV.
Se la TV si riavvia, lasciala avviare normalmente e riprova.
Una volta che l'exploit ha successo, non avviare un'altra copia. Puoi chiudere il processo in esecuzione e procedere con i comandi successivi.
Lo stesso binario funge da client per il daemon root:
adb shell 'cd /data/local/tmp && ./hazel_root --client id'
Ad esempio:
adb shell 'cd /data/local/tmp && ./hazel_root --client getenforce'
adb shell 'cd /data/local/tmp && ./hazel_root --client cat /proc/self/status'
adb shell 'cd /data/local/tmp && ./hazel_root --client "id; uname -a"'
Un comando root eseguito con successo dovrebbe riportare:
uid=0(root) gid=0(root) context=u:r:shell:s0
Nota che l'UID 0 non aggira SELinux. SELinux rimane in modalità Enforcing.
Inviare ed eseguire tools/device_scripts/disable_ota.sh tramite il demone root:
adb push tools/device_scripts/disable_ota.sh /data/local/tmp/disable_ota.sh
adb shell chmod 755 /data/local/tmp/disable_ota.sh
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/disable_ota.sh"'
Lo script disabilita entrambi i pacchetti OTA di Fire OS, cancella lo stato in sospeso dell'updater e verifica lo stato risultante del Package Manager. Non riavvia la TV.
tools/device_scripts/disable_amazon_services.sh disabilita il proxy di configurazione remota Arcus, il servizio di blocco delle applicazioni ADEP, l'Automatic Content Recognition (ACR) e i pacchetti dedicati alle metriche Amazon presenti sul firmware Hazel testato. ACR viene disabilitato e i suoi dati memorizzati vengono cancellati, ma il suo APK di sistema in sola lettura non viene eliminato, rendendo l'operazione reversibile. Lo script non disabilita CrashManager né i pacchetti di logging di basso livello, quindi i diagnostici per kernel panic e Dropbox rimangono disponibili durante lo sviluppo o la risoluzione dei problemi dell'exploit.
Inviare lo script e avviarlo tramite il daemon root:
adb push tools/device_scripts/disable_amazon_services.sh /data/local/tmp/disable_amazon_services.sh
adb shell chmod 755 /data/local/tmp/disable_amazon_services.sh
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/disable_amazon_services.sh"'
Mostra lo stato attuale senza modificare nulla:
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/disable_amazon_services.sh status"'
Ripristina i pacchetti in seguito se necessario:
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/disable_amazon_services.sh restore"'
Lo stato abilitato o disabilitato del pacchetto normalmente sopravvive a un riavvio. Il ripristino dei pacchetti non ripristina i dati del pacchetto cancellati durante la loro disabilitazione.
Gli script del launcher si trovano anch'essi in tools/device_scripts/. Per selezionare Projectivy: