
Sin dongle, sin root – herramienta de evaluación de seguridad Bluetooth para auriculares inalámbricos afectados por la cadena de vulnerabilidades del SDK de Airoha (CVE-2025-20700/20701/20702)
Versión 1.0.0
Herramienta de evaluación de seguridad Bluetooth para auriculares inalámbricos afectados por la cadena de vulnerabilidades del SDK Airoha (CVE-2025-20700 / CVE-2025-20701 / CVE-2025-20702). Escanea dispositivos cercanos, identifica chipsets Airoha conocidos y vulnerables, y sondea el acceso GATT no autenticado y la accesibilidad del protocolo RACE, todo a través de la pila Bluetooth del sistema operativo (BlueZ) mediante bleak. No se requiere un dongle Bluetooth externo ni permisos de root. Los resultados se informan en lenguaje sencillo junto con el detalle técnico, para que puedas actuar sobre ellos sin conocimientos profundos de Bluetooth.
Esta herramienta está diseñada para evaluar dispositivos que posees o para los cuales tienes autorización explícita para probar. Las sondas GATT y RACE son operaciones activas: se conectan al dispositivo objetivo y le envían comandos. No ejecutes --gatt, --race, --firmware, --bd-address, --assess, --baseline, --check-drift, ni --memory-read contra un dispositivo que no sea tuyo o para el cual no tengas permiso para probar. --scan es pasivo y solo escucha anuncios que ya se están transmitiendo públicamente, por lo que es seguro ejecutarlo contra cualquier dispositivo dentro del alcance.
--memory-read va un paso más allá que las otras sondas activas: recupera una página real de solo lectura (256 bytes) del contenido flash del dispositivo, en una dirección fija, como confirmación definitiva de CVE-2025-20702 cuando la sonda de accesibilidad --race no obtiene respuesta. Es de solo lectura (las lecturas flash no conllevan riesgo de desgaste ni de bloqueo, a diferencia de los comandos de escritura/borrado/FOTA, que esta herramienta nunca envía), es opcional y requiere su propia confirmación separada, más allá del aviso estándar de propiedad, que describe exactamente lo que hace antes de ejecutar cualquier cosa.
Sondear un dispositivo cercano arbitrario no es solo una cuestión de política; puede tener efectos secundarios reales. --gatt intenta una lectura o suscripción a notificaciones en cada característica que encuentra, y algunos dispositivos de consumo exponen servicios de aprovisionamiento (por ejemplo, el servicio Fast Pair de Google) que reaccionan iniciando un handshake de emparejamiento real en el dispositivo objetivo, independientemente de lo que esta herramienta solicite explícitamente. Una característica que requiera cifrado puede desencadenar lo mismo incluso contra tu propio dispositivo, ya que BlueZ puede enrutar silenciosamente esa solicitud de autenticación al agente que tenga registrado tu escritorio (por ejemplo, el aviso de emparejamiento de KDE); por lo tanto, cada comando activo también registra su propio agente BlueZ temporal que rechaza automáticamente cualquier solicitud de este tipo durante la duración de la sonda, de modo que no pueda aparecer ningún aviso de emparejamiento. Cada comando activo también solicita confirmación de que la dirección objetivo es tuya antes de realizar cualquier acción en la radio; pasa --yes para omitir el aviso en uso mediante scripts una vez que hayas confirmado que es tu dispositivo:
buds_audit.py --assess --target AA:BB:CC:DD:EE:FF --yes
--watch es pasivo, como --scan: solo escucha anuncios que ya se están transmitiendo y nunca se conecta a nada, por lo que no solicita confirmación.
python3 -m venv venv
venv/bin/pip install -r requirements.txt
Requiere Python 3.10+ (desarrollado contra 3.14) y un sistema Linux que ejecute BlueZ con un adaptador Bluetooth encendido.
Solo Linux, y no necesariamente todos los sistemas Linux:
bleak en sí mismo tiene un backend para Windows, pero esta herramienta no depende solo de bleak: el descubrimiento Bluetooth Classic (core/scanner.py) y las comprobaciones de estado de vinculación (core/gatt.py) ejecutan directamente bluetoothctl, una herramienta CLI exclusiva de BlueZ que no existe en Windows. Esas rutas de código simplemente fallarían con "comando no encontrado".bluetoothctl en el PATH, no solo cualquier kernel de Linux. La mayoría de las distribuciones de escritorio lo incluyen; una imagen mínima o de servidor sin el paquete bluez instalado no lo tendrá de serie. Verificado sin root en BlueZ 5.86; otras versiones deberían funcionar de la misma manera ya que bleak se dirige a la API D-Bus estándar de BlueZ, pero eso no se ha verificado de forma independiente.usbipd-win, que solo reenvía adaptadores conectados por USB. El Bluetooth integrado de la mayoría de las computadoras portátiles está conectado a través de un bus no USB (SDIO/PCIe, junto con Wi-Fi), que usbipd-win generalmente no puede reenviar, por lo que esto depende completamente del hardware específico.No necesitas una máquina Linux propia; solo necesitas Linux con acceso real a una radio Bluetooth. Dos formas prácticas de obtenerlo:
De cualquier manera, la regla es la misma: la herramienta en sí no cambia; solo necesita Linux con un adaptador Bluetooth que BlueZ pueda alcanzar.
Muchos auriculares TWS dejan de anunciarse (y cierran cualquier conexión activa) después de un período de inactividad para ahorrar energía, y algunos se apagan por completo por sí solos. Si un escaneo no puede encontrar un dispositivo que encontró hace un minuto, o si una sonda falla a mitad de camino, generalmente se debe a que los auriculares entraron en reposo, no a un error; sácalos del estuche o presiona el botón de emparejamiento nuevamente y vuelve a intentarlo.