
Kit de herramientas de investigación que obtiene root en un televisor Samsung Tizen 9 mediante un RCE de Chromium WasmGC y acceso arbitrario a memoria física physmap de V4L2, con una carga útil persistente al arranque y un canal de shell root.
Investigación de seguridad no oficial sobre un Samsung Neo QLED de 2024 con Tizen 9. Sin sdb, sin modo desarrollador, sin flasheo de firmware: la TV se rootea desde su propio navegador, y el root se hace persistente mediante una app de servicio de arranque de serie.
| Unidad de prueba | Neo QLED 2024, serie QNX1D (plataforma QTV T09) |
| Firmware | T-PTMxxxx (01400) |
| Kernel | Linux 5.4.249, ARM32 (VMSPLIT_3G + HIGHMEM, sin LPAE), PAGE_OFFSET 0xC0000000, PHYS_OFFSET 0x20000000 |
| Navegador | Chromium 120.0.6099.5 (SamsungBrowser/7.0) |
| Root | uid=0, CapEff=0x3fffffffff |
| Payload persistente | repo v41 (md5/tamaño actuales en la fila de estado de AGENTS.md — regenerado a partir del artefacto); la unidad de prueba ejecuta la misma compilación (desplegada el 2026-10-27, los beacons llevan tok=); payload_backup.dll conserva la compilación anterior |
| Canal de root | TCP 31337 en la TV, protocolo de líneas, las respuestas terminan con __END__ |
pwsh -File .\root.ps1 -TvIp <tv-ip> # root the TV
pwsh -File .\uninstall.ps1 -TvIp <tv-ip> # restore stock
root.ps1 se ejecuta en el PC y controla todo: inicia el servidor en el puerto 80, rootea el stub del navegador, instala el payload de arranque y espera el canal de root tras el reinicio. Dos pasos permanecen en el mando a distancia del TV, y solicita ambos:
http://<pc-ip>/index.html impresa y esperar a RUNNING;Luego:
python tools\root_shell.py "id" <tv-ip> # talk to the TV's root channel
Todas las opciones, los prompts exactos, la salida esperada, la advertencia sobre la IP del host y el
método manual de respaldo: docs/USAGE.md.
/dev/video40/30/60) aceptan un
vm_pgoff elegido por el atacante en mmap() y lo pasan a remap_pfn_range()
sin validar: lectura/escritura arbitraria de memoria física desde un proceso
sin privilegios (uid 5001, grupo video).init_task en la memoria física, localizar nuestra
propia tarea a través del real_parent de un proceso hijo bifurcado, y poner a cero las credenciales.app_onboot de fábrica con
una carga útil .NET que repite el parche physmap/cred en cada arranque, cierra su
nodo y sirve un canal de comandos root en TCP 31337.Sin CVE de GPU, sin exploit del kernel, sin módulo firmado. El physmap es la parte
interesante; el análisis etapa por etapa con las constantes medidas está en
docs/EXPLOIT.md.
| Documento | Contenido |
|---|---|
docs/USAGE.md | cómo ejecutarlo: opciones, prompts, salida esperada, detalle de desinstalación, recuperación |
docs/EXPLOIT.md | la cadena etapa por etapa, con las constantes específicas del firmware |
docs/ROOT-METHODS.md | todos los métodos de root/persistencia evaluados y el que ganó |
docs/FAILED.md | lo que no funcionó y por qué — se lee como una lista de callejones sin salida, ahorra semanas |
docs/BOOT-REGRESSION-SMACK.md | el bug más sutil del proyecto: una etiqueta SMACK incorrecta hacía que la app muriera antes de Main |
docs/PORTABILITY.md | otro TV Tizen 9: las cuatro puertas, qué volver a medir, un port paso a paso |
docs/SERVER-HOSTING.md | el servidor del lado del PC: cómo debe ejecutarse, la trampa de la muerte silenciosa, firewall, logs |
docs/SCRIPT-REVIEW.md | auditoría de preparación para producción de los scripts |
docs/TESTING.md | las capas de pruebas, offline y en el TV, y qué detecta cada una |
docs/LOGGUIDE.md | cada baliza y error de la herramienta decodificado, con próximos pasos |
docs/REFERENCE-MATERIALS.md | dónde descargar firmware / fuentes GPL / herramientas de simulación para tu propio modelo |
docs/REVIEW-HISTORY.md | hallazgos de revisión cerrados y su evidencia (archivo) |
docs/OPEN-ISSUES.md | estado actual, trabajo pendiente y el historial de revisiones/pases cerrados |
AGENTS.md | traspaso: herramientas, procedimiento, verificación, trampas, recuperación |
CHANGELOG.md | historial fechado de lo que cambió y por qué |
SECURITY.md | el backdoor 31337 sin autenticación, alcance, reporte, legal |
NOTICE.md | atribución de terceros; qué archivos no se relicencian |
LICENSE | MIT para el trabajo original (archivos de terceros excluidos) |
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
Todo el toolkit está comprometido, por lo que un clon se ejecuta sin ningún otro árbol de trabajo.
server/payload.dll se incluye a propósito (idéntico byte a byte a la salida de compilación)
para que el toolkit funcione sin un SDK de .NET. Los registros de tiempo de ejecución, la salida de compilación y el
script de despliegue generado por host están ignorados por git y nunca se sirven por HTTP.