
Kit de ferramentas de pesquisa que obtém root numa TV Samsung Tizen 9 através de um RCE do Chromium WasmGC e de acesso arbitrário à memória física via physmap V4L2, com payload persistente no arranque e canal de shell root.
Pesquisa de segurança não oficial em uma Samsung Neo QLED de 2024 executando Tizen 9. Sem sdb, sem modo de desenvolvedor, sem gravação de firmware: a TV é rooteada a partir do seu próprio navegador, e o root é tornado persistente por meio de um aplicativo de serviço de inicialização padrão.
| Unidade de teste | Neo QLED 2024, série QNX1D (plataforma QTV T09) |
| Firmware | T-PTMxxxx (01400) |
| Kernel | Linux 5.4.249, ARM32 (VMSPLIT_3G + HIGHMEM, sem LPAE), PAGE_OFFSET 0xC0000000, PHYS_OFFSET 0x20000000 |
| Navegador | Chromium 120.0.6099.5 (SamsungBrowser/7.0) |
| Root | uid=0, CapEff=0x3fffffffff |
| Payload persistente | repositório v41 (md5/tamanho atual na linha de estado do AGENTS.md — regenerado a partir do artefato); a unidade de teste executa a mesma build (implantada em 2026-10-27, os beacons carregam tok=); payload_backup.dll mantém a build anterior |
| Canal de root | TCP 31337 na TV, protocolo de linha, respostas terminam com __END__ |
pwsh -File .\root.ps1 -TvIp <tv-ip> # root the TV
pwsh -File .\uninstall.ps1 -TvIp <tv-ip> # restore stock
root.ps1 é executado no PC e controla tudo: inicia o servidor na porta 80,
faz o root do stub do navegador, instala o payload de boot e aguarda o canal de root
após a reinicialização. Duas etapas permanecem no controle remoto da TV, e ele solicita ambas:
http://<pc-ip>/index.html impresso e aguarde RUNNING;Em seguida:
python tools\root_shell.py "id" <tv-ip> # talk to the TV's root channel
Todas as opções, os prompts exatos, a saída esperada, a ressalva sobre o IP do host e o
fallback manual: docs/USAGE.md.
/dev/video40/30/60) aceitam um
vm_pgoff escolhido pelo atacante em mmap() e o repassam para remap_pfn_range()
sem validação: leitura/escrita arbitrária de memória física a partir de um processo
sem privilégios (uid 5001, grupo video).init_task na memória física, encontra nossa
própria task através do real_parent de um processo filho criado por fork, e zera as credenciais.app_onboot de fábrica por
um payload .NET que repete o patch de physmap/credenciais a cada boot, fecha seu
nó e serve um canal de comandos root na TCP 31337.Sem CVE de GPU, sem exploit de kernel, sem módulo assinado. O physmap é a parte
interessante; o relato etapa por etapa com as constantes medidas está em
docs/EXPLOIT.md.
| Documento | Conteúdo |
|---|---|
docs/USAGE.md | como executar: opções, prompts, saída esperada, detalhes da desinstalação, recuperação |
docs/EXPLOIT.md | a cadeia etapa por etapa, com as constantes específicas do firmware |
docs/ROOT-METHODS.md | todos os métodos de root/persistência avaliados e o que venceu |
docs/FAILED.md | o que não funcionou e por quê — parece uma lista de becos sem saída, economiza semanas |
docs/BOOT-REGRESSION-SMACK.md | o bug mais sutil do projeto: um rótulo SMACK errado fazia o app morrer antes de Main |
docs/PORTABILITY.md | outra TV Tizen 9: os quatro portões, o que remedir, uma portabilidade passo a passo |
docs/SERVER-HOSTING.md | o servidor do lado do PC: como ele deve rodar, a armadilha da morte silenciosa, firewall, logs |
docs/SCRIPT-REVIEW.md | auditoria de prontidão para produção dos scripts |
docs/TESTING.md | as camadas de teste, offline e na TV, e o que cada uma detecta |
docs/LOGGUIDE.md | cada beacon e erro de ferramenta decodificado, com próximos passos |
docs/REFERENCE-MATERIALS.md | onde baixar firmware / fontes GPL / ferramentas de simulação para o seu próprio modelo |
docs/REVIEW-HISTORY.md | achados de revisão encerrados e suas evidências (arquivo) |
docs/OPEN-ISSUES.md | estado atual, trabalho pendente e o histórico de revisões/passes encerrados |
AGENTS.md | hand-off: ferramentas, procedimento, verificação, armadilhas, recuperação |
CHANGELOG.md | histórico datado do que mudou e por quê |
SECURITY.md | o backdoor 31337 sem autenticação, escopo, reporte, aspectos legais |
NOTICE.md | atribuição de terceiros; quais arquivos não são relicenciados |
LICENSE | MIT para o trabalho original (arquivos de terceiros excluídos) |
root.ps1, uninstall.ps1 PC entry points (PowerShell)
payload/ boot payload source (.NET 6, Program.cs)
server/ port-80 server, exploit page, TV-side deploy scripts
tools/ physmap client, kernel helpers, build scripts
docs/ the documents above
AGENTS.md hand-off notes
LICENSE, NOTICE.md license + third-party attribution
SECURITY.md backdoor/scope/reporting
O toolkit inteiro está commitado, então um clone funciona sem qualquer outra árvore de trabalho.
server/payload.dll está incluído de propósito (byte a byte idêntico à saída do build)
para que o toolkit funcione sem um .NET SDK. Logs de runtime, saída de build e o
script de deploy gerado por host são ignorados pelo git e nunca servidos via HTTP.