Share
## https://sploitus.com/exploit?id=77A6A786-B69C-5B31-99E8-3316A707BB85
## TV Exploitation Framework

  Tudo começou com uma TV nova. Não aquela empolgação de "olha que resolução linda", mas sim "será que isso aqui roda Doom?". Comprei uma KTC 4K (MediaTek, Android 12, Chromecast Built-in) e em vez de conectar no HDMI, conectei no cabo de rede e comecei a fazer port scan. O primeiro `nmap` revelou 18 portas abertas. O segundo revelou que o setup não exigia autenticação. O terceiro já tava controlando o volume da TV pelo terminal. E aí não teve mais volta.



  A primeira descoberta foi o `/setup/eureka_info` — uma API REST na porta 8008 que despeja informação demais sem pedir senha: chave pública, firmware, uptime, IP, hotspot BSSID, configs. Tudo limpo, tudo exposto. Depois veio o UPnP na porta 43345: `SetVolume`, `SetMute`, `SUBSCRIBE` — tudo funcionando sem emparelhamento. Zero auth, zero restrição. Foi assustadoramente fácil. Comecei a documentar cada achado no `pentest_results.txt` e o framework foi nascendo naturalmente: um módulo pra cada vulnerabilidade, um CLI unificado, e uma TUI interativa porque digitar comando toda hora é chato.



  A implementação dos módulos foi uma jornada. O `scanner.py` descobria dispositivos via mDNS (`_googlecast._tcp.local`) e SSDP. O `info.py` coletava dados do Cast API, SSDP e UPnP. O `upnp.py` fazia controle total do MediaRenderer e incluía teste de crash com campos longos (NT, CALLBACK, HOST) que derrubavam o worker UPnP — potencial RCE, mas o processo pai reinicia automático, então não consegui explorar além do crash. O `cast.py` foi o mais trabalhoso: precisei entender o protocolo Chromecast por baixo dos panos (protobuf, TLS na 8009, mensagens CastChannel) pra fazer SSRF, descoberta de apps, e deface funcionarem sem depender 100% do pychromecast.



  Falando em deface, o `deface.py` foi o mais divertido de fazer. O módulo gera uma imagem com Pillow (ou baixa uma URL), sobe um servidor HTTP local, e manda a TV castear aquela imagem. O `--text` gera um PNG com a mensagem na hora, com cor e fundo customizáveis. Testei mandar "Oi TV" em vermelho com fundo preto e funcionou de primeira. A TV exibiu sem reclamar, sem pedir confirmação, sem nada. Depois descobri que o `streamer.py` consegue transmitir vídeo com áudio via ffmpeg + Chromecast, e o `mirror.py` espelha a tela inteira. Basicamente qualquer pixel que eu quiser na TV dos outros.



  O SSRF foi outra surpresa. O `ssrf.py` explora o media player da TV pra fazer ela baixar URLs arbitrárias — internas ou externas. Consegui fazer a TV acessar serviços internos da rede que eu não tinha acesso direto. Útil pra pivotamento. O `dial.py` expôs o Netflix na porta 9080 com websocket, e o `api.py` encontrou uma API REST na porta 44642 com CORS habilitado e autorização via `bind-token`. Não achei endpoints válidos, mas a superfície existe.



  No final, o framework tem 13 módulos, ~3700 linhas de Python, um entry point com CLI + TUI, e um relatório de pentest completo. Tudo funciona em stealth — nenhum comando modifica arquivos ou configurações persistentes na TV. Volume é volátil (reseta ao desligar), Cast é descartado ao parar, crash reinicia automático. Perfeito para testes de segurança sem deixar rastro. Ou para fazer cosplay de Mr. Robot na sala de casa.



> obs: sim, testei na minha própria TV. não, não recomendo fazer isso na TV do vizinho. a não ser que ele mereça.



### Como rodar

```sh
pip install pychromecast Pillow
sudo apt install ffmpeg    # opcional (mirror, streamer)

# TUI interativa (recomendado)
python3 tv_exploit.py interactive

# CLI
python3 tv_exploit.py scan
python3 tv_exploit.py info --target 192.168.1.42
python3 tv_exploit.py upnp --volume 50
```

---

### Estrutura

```
tv-exploit/
├── tv_exploit.py         ← Entry point (CLI + TUI)
├── pentest_results.txt   ← Relatório completo do pentest
├── modules/
│   ├── scanner.py        Descoberta de dispositivos (mDNS + SSDP)
│   ├── info.py           Coleta de informações (Eureka + UPnP + DIAL)
│   ├── upnp.py           Controle UPnP + teste de crash/buffer overflow
│   ├── cast.py           Operações Chromecast (discover, info, ssrf)
│   ├── dial.py           Protocolo DIAL (Netflix, apps)
│   ├── deface.py         Exibir imagem/texto na TV
│   ├── ssrf.py           SSRF via Cast media player
│   ├── api.py            Enumeração de API interna (porta 44642)
│   ├── ssdp.py           SSDP discovery + inscrição de eventos
│   ├── mirror.py         Screen mirroring via ffmpeg
│   ├── streamer.py       Stream de vídeo + áudio via ffmpeg
│   ├── ambient.py        Captura de áudio do microfone (requer ADB)
│   ├── reverse.py        Reverse shell listener
│   └── botnet.py         Servidor C2 para múltiplas TVs
└── utils/
    └── common.py         Helpers: cores, logging, get_local_ip
```

---

### Vulnerabilidades confirmadas

| # | Vuln | Impacto | Status |
|---|------|---------|--------|
| 1 | **Information Disclosure** — `/setup/eureka_info` sem auth | HIGH | ✅ Confirmado |
| 2 | **UPnP sem auth** — SetVolume/SetMute/SUBSCRIBE | HIGH | ✅ Confirmado |
| 3 | **SSRF via Cast** — TV baixa URLs internas/externas | MEDIUM | ✅ Confirmado |
| 4 | **DIAL Protocol** — Netflix exposto, app launch via POST | MEDIUM | ✅ Confirmado |
| 5 | **API oculta** — Porta 44642 com CORS, `bind-token` auth | MEDIUM | ✅ Confirmado |
| 6 | **Buffer Overflow** — UPnP crasha com campos longos | HIGH (potencial RCE) | ⚠️ Parcial |

---

### Exemplos de uso

```sh
# Descoberta de dispositivos
python3 tv_exploit.py scan

# Informações completas do dispositivo
python3 tv_exploit.py info --target 192.168.1.42

# Controle de volume (stealth)
python3 tv_exploit.py upnp --get
python3 tv_exploit.py upnp --volume 30

# Exibir mensagem na TV
python3 tv_exploit.py deface --text "Oi TV" --color red --bg black

# SSRF — fazer a TV acessar um serviço interno
python3 tv_exploit.py ssrf cast --target 192.168.1.42

# Screen mirroring
python3 tv_exploit.py mirror

# Teste de crash UPnP
python3 tv_exploit.py crash field --field nt --length 5000

# Botnet C2
python3 tv_exploit.py botnet --port 9999
```

---

### Referências

https://github.com/home-assistant-libs/pychromecast

https://developers.google.com/cast/docs/reference

https://openconnectivity.org/upnp-specs/UPnP-arch-DeviceArchitecture-v2.0-20200417.pdf

https://www.rfc-editor.org/rfc/rfc7976 (DIAL Protocol)

https://stackoverflow.com/questions/48014598/chromecast-ssrf-internal-network-access