Este repositorio contiene la implementación de una prueba de concepto llamada BlueSpy para grabar audio desde un dispositivo Bluetooth sin el conocimiento del usuario legítimo.
El PoC se demostró durante la charla BSAM: Seguridad en Bluetooth en RootedCON 2024 en Madrid. Está diseñado para crear conciencia sobre el uso inseguro de dispositivos Bluetooth y la necesidad de una metodología consistente para las evaluaciones de seguridad.
Ese es el propósito de BSAM, la Metodología de Evaluación de Seguridad de Bluetooth , publicada por Tarlogic y disponible aquí.
Esta prueba de concepto explota el incumplimiento del control BSAM-PA-05 dentro de la metodología BSAM. En consecuencia, el dispositivo permite el procedimiento de emparejamiento sin requerir interacción del usuario y expone su funcionalidad a cualquier agente dentro del rango de la señal.
Requisitos
El código está escrito en Python y ha sido probado con Python 3.11.8, pero utiliza principalmente herramientas ampliamente disponibles en sistemas Linux.
El PoC utiliza las siguientes herramientas:
bluetoothctl
btmgmt
pactl
parecord
paplay
En las distribuciones Arch Linux, bluetoothctl
y btmgmt
se puede instalar con el paquete bluez-utils
, mientras pactl
, parecord
y paplay
están disponibles en el paquete libpulse
.
Para que el PoC funcione, es necesario tener una instalación funcional de la pila Bluetooth BlueZ, disponible en el bluez
Paquete para distribuciones Arch Linux. También se requiere una instalación funcional de un servidor de audio compatible con PulseAudio, como PipeWire, para grabar y reproducir audio.
Configuración
Asegúrate de que tu dispositivo sea capaz de funcionar como fuente de audio, es decir, que tenga un micrófono y que sea reconocible y conectable a través de Bluetooth.
Por ejemplo, para que sean reconocibles y conectables, los auriculares utilizados durante la conversación deben estar fuera de su estuche de carga. Por defecto, sólo activan el micrófono cuando se coloca en los oídos del usuario, aunque esta configuración se puede ajustar en la app de configuración.
Además, asegúrate de que el dispositivo no esté ya conectado o, alternativamente, que admita múltiples conexiones.
Ejecución
En primer lugar, se debe descubrir la dirección del dispositivo utilizando una herramienta como bluetoothctl
:

$ bluetoothctl
[bluetooth]# scan on
Una vez que se descubre la dirección del dispositivo, el script puede encargarse del resto:
Nota: La secuencia de comandos puede solicitar permisos de superusuario para modificar la
$ python BlueSpy.py -a <address>
configuración de su instancia BlueZ y vincularla con el dispositivo remoto.