
Exploit de root temporário específico de firmware para Toshiba/Amazon Fire TV (hazel) usando CVE-2026-43499. Implementa UAF de futex-PI em ARM32, vazamento de endereço do kernel, reclaim de mm_struct e correção de credenciais para obter UID 0 via ADB.
Exploit de root temporário para a plataforma Fire TV Toshiba/Amazon hazel, baseado em CVE-2026-43499.
O exploit atual foi testado em:
| Dispositivo | Toshiba Fire TV (hazel) |
| Build do Fire OS | PS7716.5665N |
| Kernel | Linux 4.9.113 |
| Modelo do produto | AFTHA004 (C350) |
[!WARNING] Este exploit é específico do firmware. Endereços de kernel, offsets de estruturas e partes da cadeia de reclaim são calibrados para
PS7716.5665N.Não execute o build atual em um firmware ou dispositivo diferente sem antes fazer a portabilidade/recalibração.
Uma falha no reclaim de heap pode causar pânico e reiniciar a TV. O root é temporário e é perdido após a reinicialização. Se a sua TV travar, você sempre pode fazer um ciclo de energia.
O exploit usa a CVE-2026-43499 para obter UID 0 temporário a partir do ambiente normal do shell ADB.
A cadeia do exploit inclui:
mm_structApós uma execução bem-sucedida, o exploit mantém vivos os objetos do kernel necessários para o caminho de root e inicia um daemon de comandos local.
O SELinux permanece Enforcing. Os comandos executados através do daemon de root mantêm o domínio SELinux shell e o conjunto de capacidades (capability bounding set) disponível neste firmware.
hazel_root.c exploit principal, estágio de leitura/escrita do kernel, correção de credenciais e cliente/servidor de comandos roothazel_reclaim.h vazamento de endereço do kernel e reclaim cross-cache de mm_structOs exemplos abaixo assumem Linux e que adb está disponível em $PATH.
Defina NDK para o seu diretório do Android NDK r27d:
export NDK=/path/to/android-ndk-r27d
Em seguida, compile:
"$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/clang" \
--target=armv7a-linux-androideabi28 \
-O2 -g0 -Wall -Wextra -Wpedantic -fPIE -pie \
hazel_root.c -o hazel_root \
-pthread
Conecte-se à TV usando ADB.
Se estiver usando ADB de rede:
adb connect <TV_IP>:5555
Envie o exploit:
adb push hazel_root /data/local/tmp/hazel_root
adb shell chmod 755 /data/local/tmp/hazel_root
Comece a partir de uma inicialização limpa:
adb shell 'cd /data/local/tmp && ./hazel_root'
Uma execução bem-sucedida termina com uma saída semelhante a:
[root] uid=0 euid=0 gid=0
[ROOT] uid=0 daemon pid=... socket=@hazel_root
O reclaim é probabilístico. Uma tentativa sem sucesso pode falhar de forma limpa ou causar pânico e reiniciar a TV.
Se a TV reiniciar, deixe-a inicializar normalmente e tente novamente.
Assim que o exploit for bem-sucedido, não execute outra cópia. Deixe os processos do exploit em execução, pois eles mantêm os objetos do kernel usados pelo caminho de root temporário.
O mesmo binário atua como cliente para o daemon de root:
adb shell 'cd /data/local/tmp && ./hazel_root --client id'
Por exemplo:
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"'
Um comando root bem-sucedido deve informar:
uid=0(root) gid=0(root) context=u:r:shell:s0
Observe que o UID 0 não contorna o SELinux. O SELinux permanece Enforcing.
Envie e execute disable_ota.sh através do daemon de root:
adb push 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"'
O script desativa ambos os pacotes OTA do Fire OS, limpa o estado pendente do atualizador e verifica o estado resultante do Package Manager. Ele não reinicia a TV.
disable_amazon_services.sh desativa o proxy de configuração remota Arcus,
o serviço de bloqueio de aplicativos ADEP, o Reconhecimento Automático de Conteúdo (ACR) e
os pacotes dedicados de métricas da Amazon presentes no firmware Hazel testado. O ACR
é desativado e seus dados armazenados são limpos, mas seu APK de sistema somente leitura não é
excluído, tornando a operação reversível. O script não desativa
o CrashManager nem os pacotes de registro de baixo nível, portanto, o pânico do kernel e os diagnósticos
do Dropbox permanecem disponíveis durante o desenvolvimento ou a solução de problemas do exploit.
Envie o script e execute-o através do daemon de root:
adb push 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"'
Mostre o estado atual sem alterar nada:
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/disable_amazon_services.sh status"'
Restaure os pacotes posteriormente, se necessário:
adb shell 'cd /data/local/tmp && ./hazel_root --client "sh /data/local/tmp/disable_amazon_services.sh restore"'
O estado habilitado ou desabilitado dos pacotes normalmente sobrevive a uma reinicialização. Restaurar os pacotes não restaura os dados dos pacotes que foram limpos durante a desativação.
Reinicie a TV:
adb reboot
O exploit apenas modifica o estado temporário do kernel, portanto, o root é perdido após a reinicialização.
Alterações feitas deliberadamente em configurações ou dados persistentes do Android enquanto o root estava ativo não são, obviamente, necessariamente revertidas pela reinicialização.
O único alvo atualmente confirmado é:
hazel
PS7716.5665N
Linux 4.9.113
ARM32
Outras TVs também parecem usar o nome de dispositivo hazel, mas compartilhar o codinome não significa que elas compartilham o mesmo build do kernel, placa ou layout de estruturas.
Não assuma compatibilidade com outro dispositivo hazel.
Se você estiver interessado em fazer a portabilidade do exploit, informações úteis do alvo incluem:
adb shell getprop ro.product.model
adb shell getprop ro.product.device
adb shell getprop ro.product.board
adb shell getprop ro.build.version.incremental
adb shell uname -a
Os endereços de kernel e offsets de estruturas codificados no código-fonte atual devem ser verificados para cada firmware alvo.
Esta é uma adaptação específica de firmware da cadeia de exploração da CVE-2026-43499 para o kernel ARM32 Linux 4.9 do fornecedor usado neste build do Fire OS.
O trabalho específico do Hazel inclui:
mm_structPortanto, o exploit atual não deve ser tratado como um PoC genérico da CVE-2026-43499 nem como um exploit plug-and-play para qualquer firmware Fire TV.
Esta portabilidade foi desenvolvida estudando e adaptando ideias das seguintes implementações públicas de exploits da CVE-2026-43499:
gitchw/ghostlock-cve-2026-43499 Referência de UAF futex-PI ARM32 e cadeia waiter/owner/consumer.
NebuSec/CyberMeowfia Exploit IonStack, incluindo o design mais amplo de fops forjados, leitura/escrita do kernel e correção de credenciais.
F-19-F/IonStackQuest3
Referência de stack-stamping e sincronização ARM32 setsockopt(MCAST_JOIN_SOURCE_GROUP).
R0rt1z2/GhostLock-5.10 Layouts ARM32 adicionais e técnicas de exploração usadas na verificação cruzada da portabilidade Hazel.
Um agente de codificação de IA foi usado durante o desenvolvimento, particularmente para ajudar a analisar dados de crash e desmontagem, localizar e verificar cruzadamente endereços de kernel e offsets de estruturas específicos do alvo, e auxiliar na depuração e limpeza do código.
O exploit em si foi testado no dispositivo alvo PS7716.5665N, e os valores específicos do alvo usados pelo build lançado foram validados contra esse firmware. A saída da IA foi tratada como um auxílio de pesquisa, e não como fonte de verdade.