
Marco de explotación BLE para robots Unitree: la inyección de comandos mediante claves AES codificadas de forma fija permite la toma de control remota, la inyección de payloads y la propagación de tipo gusano.

Autor: Bin4ry aka Andreas Makris [[email protected]]
Coautor: h0stile aka Kevin Finisterre
Colaborador: legion1581 aka Konstantin Severov de theroboverse ayudó a corregir el payload para la inyección y lo demostró con un PoC totalmente funcional 🙂 ¡gracias tío, fue una contribución crítica, muy apreciada!
Fecha: 20 de septiembre de 2025
CVE-2025-35027
CVE-2025-60017
CVE-2025-60250
CVE-2025-60251
La investigación de este repositorio se incorpora a un artículo que presenta una evaluación sistemática de la seguridad del Unitree G1. Sin embargo, el impacto de la investigación NO se limita solo al G1, sino a toda la línea de productos Unitree a partir de la serie Go2. El código de los robots Unitree más nuevos parece ser un fork del código base de Go2, lo que hace que específicamente el linaje Go1 y otros robots Unitree anteriores a Go2 no sean vulnerables. No obstante, todas las variantes modernas se ven afectadas en este momento. Unitree aún no ha publicado un aviso que aclare el impacto exacto en toda la línea de productos.
Enlace al artículo: https://arxiv.org/abs/2509.14139
Título: Cybersecurity AI: Humanoid Robots as Attack Vectors
Autores: 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},
}
Tabla de contenidos
=================
* [Análisis de inyección de comandos en el servicio BLE del robot Unitree](#unitree-robot-ble-service-command-injection-analysis)
* [Descripción general](#overview)
* [Descubrimiento de servicios BLE](#ble-service-discovery)
* [Ingeniería inversa del protocolo](#reverse-engineering-the-protocol)
* [Instrucción 1: El protocolo de enlace "seguro"](#instruction-1-the-secure-handshake)
* [Instrucción 2: Obtener el número de serie](#instruction-2-get-serial-number)
* [Instrucción 3: Inicializar el modo WiFi](#instruction-3-initialize-wifi-mode)
* [Instrucción 4: Establecer SSID](#instruction-4-set-ssid)
* [Instrucción 5: Establecer contraseña](#instruction-5-set-password)
* [Instrucción 6: Establecer el código de país (¡El desencadenante!)](#instruction-6-set-country-code-the-trigger)
* [El hilo de configuración WiFi](#the-wifi-setting-thread)
* [La función vulnerable: inyección de comandos](#the-vulnerable-function-command-injection)
* [Resumen del flujo de ataque](#attack-flow-summary)
* [La amenaza de tipo gusano](#the-wormable-threat)
* [Prueba de concepto](#proof-of-concept)
* [Despliegue en el mundo real & impacto](#real-world-deployment--impact)
* [Despliegues actuales](#current-deployments)
* [Evaluación de impacto](#impact-assessment)
* [Impacto en fuerzas de seguridad & militares](#law-enforcement--military-impact)
* [Entornos corporativos](#corporate-environments)
* [Impacto en consumidores](#consumer-impact)
* [Propagación tipo gusano](#wormable-propagation)
* [Detalles técnicos](#technical-details)
* [Arquitectura del servicio BLE](#ble-service-architecture)
* [Parámetros criptográficos](#cryptographic-parameters)
* [Estructura de paquetes](#packet-structure)
* [Lecciones aprendidas](#lessons-learned)
* [Cronología de la divulgación](#disclosure-timeline)
* [Primer y último intento de informar sobre otro problema de seguridad en sus robots insignia G1, Go2 y otros robots](#first-and-last-attempt-to-report-another-security-issue-in-your-flagship-g1-and-go2-and-other-bots)
* [Descargo de responsabilidad](#disclaimer)
* [Un patrón de problemas de seguridad](#a-pattern-of-security-issues)
* [Conclusión](#conclusion)
* [Aviso legal](#legal-notice)
* [Contribuciones](#contributing)
* [Licencia y acceso a estos archivos](#licensing-and-access-to-these-files)
---
## Descripción general
Durante nuestra investigación de seguridad en las plataformas robóticas de Unitree, descubrimos una vulnerabilidad crítica en la interfaz de configuración Wi-Fi de Bluetooth Low Energy (BLE). Esta vulnerabilidad afecta a múltiples modelos de robots Unitree, incluidas las series Go2, G1, H1 y B2, hasta el firmware más reciente de hoy [20 de septiembre de 2025].
**🎯 ¡Esto representa el primer exploit divulgado públicamente dirigido a robots humanoides!**
La vulnerabilidad combina múltiples problemas de seguridad: claves criptográficas embebidas, omisión trivial de autenticación e inyección de comandos sin saneamiento. Lo que hace que esto sea particularmente preocupante es que es completamente **propagable como gusano** - los robots infectados pueden comprometer automáticamente a otros robots dentro del alcance de BLE. Esta vulnerabilidad permite al atacante tomar el control total del dispositivo.
Publicamos las claves criptográficas en julio [Enlace al tweet](https://x.com/Bin4ryDigit/status/1950566849072005304), pero a Unitree no le importó.
Vamos a profundizar en los detalles técnicos de cómo descubrimos y explotamos esta vulnerabilidad.
## Descubrimiento de servicios BLE
El primer paso fue identificar los servicios BLE expuestos por los robots. Todos los modelos Unitree afectados exponen un servicio BLE personalizado para la configuración Wi-Fi:```
Service UUID: 0000ffe0-0000-1000-8000-00805f9b34fb
Write Characteristic: 0000ffe2-0000-1000-8000-00805f9b34fb
Notify Characteristic: 0000ffe1-0000-1000-8000-00805f9b34fb
Mediante ingeniería inversa, descubrimos que el robot implementa un gestor de recepción que procesa paquetes BLE cifrados. Esto es lo que encontramos:

El gestor de recepción primero descifra los paquetes entrantes usando parámetros AES fijos en el código:```python AES_KEY = "df98b715d5c6ed2b25817b6f2554124a" AES_IV = "2841ae97419c2973296a0d4bdfe19a4f" Mode: AES-CFB128

Tras el descifrado, los paquetes se procesan según los códigos de instrucción en una estructura switch-case. Examinemos cada instrucción:
## Instrucción 1: El handshake "seguro"

La "autenticación" del handshake es ridículamente simple:


Básicamente, el robot comprueba si el paquete descifrado incluye la cadena `"unitree"` como secreto del handshake y, a continuación, establece el indicador `valid_incoming_user` a 1. ¡Ese es todo el mecanismo de "autenticación"!
## Instrucción 2: Obtener el número de serie