BluedIoT Cómo hackear 360Fly Action Cameras usando BlueTooth Low Energy CVE 2017 8403
Todo empez� con la ilusi�n de montar un canal de YouTube compartido con mi amigo David Caro. La idea era hacerlo con algo especial, alg�n tipo de hardware mol�n con un toque de tecnolog�a novedosa. Supimos de la existencia de c�maras que grababan en 360 grados al ver que se ofrec�a la posibilidad de adaptar contenido de ese tipo tanto en Facebook como en YouTube, entonces empezamos a revisar las especificaciones de varias en b�squeda de una �finalista�, y la candidata final fue la 360fly 4k.
No os la voy a �vender� ni c�mo la mejor, ni c�mo la peor, simplemente se ce��a a nuestras necesidades. El producto nos satisfac�a y cumpl�a con lo que le�mos, pero alg�n ��ngulo muerto� se ocultaba en ella.
El misterio de la password de la c�mara
Un d�a, despu�s de terminar una sesi�n de grabaci�n, mi amigo David me pidi� la c�mara para pasar-se los v�deos directamente por USB en lugar de transferir-los por la red, ya que al grabar en 360 y resoluci�n 4K, hace que aumente considerablemente el peso de los clips. Cuando la tuve de nuevo en mis manos, algo raro vi que me descuadr�. Un pop-up en la app me dec�a que la �password� era incorrecta, y yo no la hab�a cambiado.
Le pregunt� a mi amigo David si la hab�a cambiado �l, a lo que me dijo que no, que intent� con la app mediante conexi�n Wi-Fi, Bluetooth, pero nada, y que fue el cable USB el que logr� hacer las �paces� con los datos, y la transferencia prosigui�. �Qu� hace uno cuando el m�todo tradicional no funciona antes de hacer un reset? Pues probar y ver que otros recursos ten�a, a lo que me dije, voy a ver si puedo cambiarla (mediante la app oficial para Android), seguro que me dir� que no� �ah� va!
Se la trag� con patatas, insert� una nueva y como si nada. A� fue cuando pens� que o me quedo con la intriga o investigo, y como me conozco opt� por resolver el enigma que me ten�a absorto. Durante el �shock� y la incomprensi�n, me vino un flash sobre un proyecto que se mantuvo un tiempo �top secret� de Chema Alonso y su equipo de ElevenPaths, el ya popular DirtyTooh Hack, que me inspir� para seguir con esto.
Un punto clave era la conexi�n Bluetooth, ya que cuando la password fue cambiada no se hizo por Wi-Fi, sino por Bluetooth, as� que, teniendo eso en cuenta, lo primero era empezar por esta tecnolog�a y el rol que ejerce en este modelo de c�mara.
Aprendiendo del enemigo por BlueTooth
A nivel de usuario entend�a lo justo, pero ten�a cero experiencia en analizar nada con Bluetooth. Me tocaba hacer de �dentista� y sacar �la caries azulada�. Indagando, en busca de alg�n tipo de sniffer, me top� con Ubertooth One. Esa no era mi parada ya que me estaba pasando de largo. no digo que sea una mala herramienta pero no era la adecuada para lo que necesitaba yo con mi experiencia en el tema. Buscando m�s, vi que ten�a el sniffer m�s cerca de lo que pensaba. Resulta que el propio sistema operativo Android, a partir de la versi�n 4.4 ya incorpora un sniffer de tipo activo (es decir, en una conexi�n controlada/vinculada o pareada).
Se activa en las opciones del desarrollador, y se genera un fichero con nombre btsnoop_hci.log (que en mi caso lo guardaba en la ra�z de la memoria del terminal). Tras activarlo me puse a cambiar otra vez la password para luego dar una ojeada en Wireshark, y hacer una b�squeda por la palabra que hab�a puesto como nueva contrase�a.
En la imagen se puede ver la password en claro a ASCII. �BINGO! Lo tenemos. ��Y ahora qu�!?�C�mo interact�o y con qu�? Esos paquetes capturados se trataban de una versi�n de BlueTooth m�s moderna, por as� decirlo, se trata del Bluetooth Low Energy. Esta variante de Bluetooth, empieza a partir de la versi�n 4.0. Dise�ado para reducir el consumo de energ�a en comparaci�n con la versi�n antigua y nacido para adaptarse en el mundo del IoT. Funciona algo distinto al Bluetooth �cl�sico�. Se basa en una estructura de GATT: Generic Attribute Profile para la transferencia de datos.
Su organizaci�n se estipula en: perfiles, servicios y caracter�sticas.
Otro valor valioso es el handle, de 16 bits y usado para ser distinguido en el servidor GATT (en la c�mara) y va asociado con un UUID en cada una de las caracter�sticas, como si se tratase de un alias cortito para facilitar su uso. Los servicios tienen un rango de handles, este rango se asocia s�lo a un UUID (un servicio conlleva un rango e identificado por un UUID) as� pues, podremos saber a qu� servicio pertenece dicha caracter�stica handle. Vamos a clarificarlo en la pr�ctica de manera visual junto a la siguiente figura.
En los servicios (= primary) tenemos un handle, que empieza por 0x0001 y acaba en 0x0005. Este servicio, llamado �Generic Attribute�, tiene el UUID 1801. El UUID de la caracter�stica con nombre �Service Changed� es 2a05 con handle 0x0003, este handle est� comprendido en el rango que va desde 0x0001 a 0x0005. En definitiva, la caracter�stica �Service Changed� forma parte del servicio �Generic Attribute�. M�s claro as�, �verdad?
PoC en acci�n
Ya va siendo hora de ponerse manos a la obra, viendo por donde van �los tiros�. Veamos c�mo manejarlo bajo Kali Linux. Se puede hacer por la propia app c�mo m�todo m�s f�cil para el PoC, pero desde escritorio aporta otras cosas. El resumen de lo que haremos es:
Fase 1: Cambiando la Password
Ponemos en pie la pila Bluetooth con: systemctl enable bluetooth.service y systemctl start bluetooth.service.
Verificamos que todo est� correcto como puede verse en la figura siguiente con hciconfig
Escaneo en busca de la c�mara con hcitool lescan.
Convertir la password en formato hexadecimal (que usaremos m�s tarde) con: echo StrongPassword | xxd �p
Conectar con la c�mara mediante gatttool a modo interactivo: gatttool �I y connect [mac c�mara]. Como veis, no requiere de password, el m�todo de conexi�n es �Just Works�. �Qu� f�cil!, �no? Eso mismo pens� yo.
![]() |
| Figura 1: BluedIoT: C�mo hackear 360Fly Action Cameras usando BlueTooth Low Energy [CVE-2017-8403] |
No os la voy a �vender� ni c�mo la mejor, ni c�mo la peor, simplemente se ce��a a nuestras necesidades. El producto nos satisfac�a y cumpl�a con lo que le�mos, pero alg�n ��ngulo muerto� se ocultaba en ella.
El misterio de la password de la c�mara
Un d�a, despu�s de terminar una sesi�n de grabaci�n, mi amigo David me pidi� la c�mara para pasar-se los v�deos directamente por USB en lugar de transferir-los por la red, ya que al grabar en 360 y resoluci�n 4K, hace que aumente considerablemente el peso de los clips. Cuando la tuve de nuevo en mis manos, algo raro vi que me descuadr�. Un pop-up en la app me dec�a que la �password� era incorrecta, y yo no la hab�a cambiado.
![]() |
| Figura 2: Alerta de contrase�a erronea |
Le pregunt� a mi amigo David si la hab�a cambiado �l, a lo que me dijo que no, que intent� con la app mediante conexi�n Wi-Fi, Bluetooth, pero nada, y que fue el cable USB el que logr� hacer las �paces� con los datos, y la transferencia prosigui�. �Qu� hace uno cuando el m�todo tradicional no funciona antes de hacer un reset? Pues probar y ver que otros recursos ten�a, a lo que me dije, voy a ver si puedo cambiarla (mediante la app oficial para Android), seguro que me dir� que no� �ah� va!
![]() |
| Figura 3: Cambiando la contrase�a desde la app oficial de Android |
Se la trag� con patatas, insert� una nueva y como si nada. A� fue cuando pens� que o me quedo con la intriga o investigo, y como me conozco opt� por resolver el enigma que me ten�a absorto. Durante el �shock� y la incomprensi�n, me vino un flash sobre un proyecto que se mantuvo un tiempo �top secret� de Chema Alonso y su equipo de ElevenPaths, el ya popular DirtyTooh Hack, que me inspir� para seguir con esto.
Un punto clave era la conexi�n Bluetooth, ya que cuando la password fue cambiada no se hizo por Wi-Fi, sino por Bluetooth, as� que, teniendo eso en cuenta, lo primero era empezar por esta tecnolog�a y el rol que ejerce en este modelo de c�mara.
Aprendiendo del enemigo por BlueTooth
A nivel de usuario entend�a lo justo, pero ten�a cero experiencia en analizar nada con Bluetooth. Me tocaba hacer de �dentista� y sacar �la caries azulada�. Indagando, en busca de alg�n tipo de sniffer, me top� con Ubertooth One. Esa no era mi parada ya que me estaba pasando de largo. no digo que sea una mala herramienta pero no era la adecuada para lo que necesitaba yo con mi experiencia en el tema. Buscando m�s, vi que ten�a el sniffer m�s cerca de lo que pensaba. Resulta que el propio sistema operativo Android, a partir de la versi�n 4.4 ya incorpora un sniffer de tipo activo (es decir, en una conexi�n controlada/vinculada o pareada).
![]() |
| Figura 4: Activando el log de conexi�n BlueTooth en Android |
Se activa en las opciones del desarrollador, y se genera un fichero con nombre btsnoop_hci.log (que en mi caso lo guardaba en la ra�z de la memoria del terminal). Tras activarlo me puse a cambiar otra vez la password para luego dar una ojeada en Wireshark, y hacer una b�squeda por la palabra que hab�a puesto como nueva contrase�a.
![]() |
| Figura 5: Paquete BlueTooth con la password enviada en texto claro |
En la imagen se puede ver la password en claro a ASCII. �BINGO! Lo tenemos. ��Y ahora qu�!?�C�mo interact�o y con qu�? Esos paquetes capturados se trataban de una versi�n de BlueTooth m�s moderna, por as� decirlo, se trata del Bluetooth Low Energy. Esta variante de Bluetooth, empieza a partir de la versi�n 4.0. Dise�ado para reducir el consumo de energ�a en comparaci�n con la versi�n antigua y nacido para adaptarse en el mundo del IoT. Funciona algo distinto al Bluetooth �cl�sico�. Se basa en una estructura de GATT: Generic Attribute Profile para la transferencia de datos.
![]() |
| Figura 6: Estructura GATT |
Su organizaci�n se estipula en: perfiles, servicios y caracter�sticas.
1.-Perfil: Describe el tipo de dispositivo basado en sus servicios.
2.-Servicio: Define funci�n/es del dispositivo, un servicio tiene una colecci�n de caracter�sticas.
3.- Caracter�stica: Contiene un valor y se utiliza para el transporte de los datos. Contiene tambi�n propiedades para controlar el comportamiento de la caracter�stica (lectura, escritura, notificaci�n) para designar los permisos adecuados, y los descriptores para describir en m�s detalle mediante l�nea/s de texto tipo string.Los servicios y las caracter�sticas tienen un UUID para ser identificados. Bluetooth SIG (Special Interest Group) usa 16 bits del UUID para la especificaci�n de sus nombres como normativa. 128 bits son personalizados, destinados para el fabricante. 360Fly tiene su distintivo como miembro aprobado, usando 16 bits de su UUID como servicio.
Otro valor valioso es el handle, de 16 bits y usado para ser distinguido en el servidor GATT (en la c�mara) y va asociado con un UUID en cada una de las caracter�sticas, como si se tratase de un alias cortito para facilitar su uso. Los servicios tienen un rango de handles, este rango se asocia s�lo a un UUID (un servicio conlleva un rango e identificado por un UUID) as� pues, podremos saber a qu� servicio pertenece dicha caracter�stica handle. Vamos a clarificarlo en la pr�ctica de manera visual junto a la siguiente figura.
![]() |
| Figura 7: Estructura con la herramienta gatttool |
En los servicios (= primary) tenemos un handle, que empieza por 0x0001 y acaba en 0x0005. Este servicio, llamado �Generic Attribute�, tiene el UUID 1801. El UUID de la caracter�stica con nombre �Service Changed� es 2a05 con handle 0x0003, este handle est� comprendido en el rango que va desde 0x0001 a 0x0005. En definitiva, la caracter�stica �Service Changed� forma parte del servicio �Generic Attribute�. M�s claro as�, �verdad?
PoC en acci�n
Ya va siendo hora de ponerse manos a la obra, viendo por donde van �los tiros�. Veamos c�mo manejarlo bajo Kali Linux. Se puede hacer por la propia app c�mo m�todo m�s f�cil para el PoC, pero desde escritorio aporta otras cosas. El resumen de lo que haremos es:
1. Cambiar la password de la Wi-Fi mediante Bluetooth Low Energy.
2. Tomar una foto y guardarla (para el recuerdo ;) ).
3. �Borrarlo todo! (simulando que no se deja huella).(Nota: Importante tener en cuenta de que se use Bluetooth m�nimo versi�n 4.0 Low Energy para que funcione, si no se est� seguro, revisad con el comando hciconfig �a [interfaz]
Fase 1: Cambiando la Password
Ponemos en pie la pila Bluetooth con: systemctl enable bluetooth.service y systemctl start bluetooth.service.
![]() |
| Figura 8: Activando BlueTooth con Kali Linux |
Verificamos que todo est� correcto como puede verse en la figura siguiente con hciconfig
![]() |
| Figura 9: Revisando el estado del hardware BlueTooth |
Escaneo en busca de la c�mara con hcitool lescan.
![]() |
| Figura 10: Buscando la c�mara 360 con BlueTooth LE |
Convertir la password en formato hexadecimal (que usaremos m�s tarde) con: echo StrongPassword | xxd �p
| Figura 11: ASCII a HEX de la password |
Conectar con la c�mara mediante gatttool a modo interactivo: gatttool �I y connect [mac c�mara]. Como veis, no requiere de password, el m�todo de conexi�n es �Just Works�. �Qu� f�cil!, �no? Eso mismo pens� yo.
![]() |
| Figura 12: Conectando a la c�mara con gatttool |
Ahora toca cambiar el password con el handle que ya sabemos porque �snifamos� dicho paquete anteriormente: char-write-cmd 0x0048 [password en hexadecimal]
![]() |
| Figura 13: Cambio de password mediante ghatttool |
Fase 2. Tomando foto y guard�ndola
Ahora nos conectamos a la Wi-Fi sin m�s con la password que sabemos, en este caso hemos puesto StrongPassword. Ahora que estamos dentro de la red de la c�mara toca seguir jugando. Accederemos al Web Server de la c�mara que le gusta usar la direcci�n IP 192.168.2.1. Accedemos mediante navegador, Mozilla Firefox que ya viene de serie en Kali Linux.
![]() |
| Figura 14: Navegando por el Web Server de la c�mara |
Usaremos la herramienta curl como cliente ReST para jugar con las opciones de la c�mara. �Que te preguntas que c�mo lo hemos sabido? Nos podemos poner a hacer un man in the middle como el jueves, interceptando el tr�fico, o bien basta con leer documentaci�n y hacer una visita a la ReST API, de la c�mara que es p�blica. Tomemos una captura y a sonre�r :D : curl �X POST --insecure https://192.168.2.1/360fly/camera/photo
![]() |
| Figura 15: Tomando la foto con cliente ReST. |
En este caso se utiliza:
-X: para indicarle el tipo de m�todo de solicitud POST en este caso.Para saber si ha ido bien, verificaremos refrescando el navegador, aparecer� un nuevo .JPG con prefijo �FLY� y pulsando encima, podremos ver nuestro retrato:
--insecure: lo mismo que �k para saltar la verificaci�n de certificado que no tenemos en el almac�n de confianza.
Podemos a�adir de manera opcional �i o --include para obtener la informaci�n de las cabeceras.
![]() |
| Figura 16: Mostrando la foto |
Para guardarla, hag�moslo f�cil, simplemente bot�n derecho y guardar en el lugar que m�s os guste (�ojo!, si est�is con Kali Linux en modo live, aseguraros de guardarla en partici�n no temporal de memoria).
Con solo una l�nea, eliminaremos todo el contenido que hay en la c�mara, lo que puede ser un verdadero problema si alguien est� haciendo, por ejemplo, el reportaje de nuestra vida: curl �X DELETE --insecure https://192.168.2.1/360fly/media/file
![]() |
| Figura 17: Eliminando el contenido de la c�mara |
Y si fue bien, al refrescar la Web, veremos el t�pico Error 404 Not Found :S �Y eso era todo amigos, pero... a�n hay m�s!
En la siguiente imagen tienes en una tabla otros comandos interesantes para el PoC - no todos los disponibles - para usar ambos: Bluetooth Low Energy y Wi-Fi.
![]() |
| Figura 18: Algunas de las funciones bajo BlueTooth y Wi-Fi de la c�mara |
Si solo usamos BLE (Bluetooth Low Energy), atacar a otras funciones es posible sin ser requisito la funci�n de cambio de password Wi-Fi (cosas como poder hacer grabaci�n, activar GPS, etc�tera) ya que GATT nos permite enviar los valores correspondientes. Eso s�, tendremos derecho de descarga si adem�s accedemos al Wi-Fi como hemos visto en la PoC. Y podr�a seguir enroll�ndome como persiana en bucle, por eso, si quer�is profundizar m�s en detalle, aqu� ten�is un art�culo que hice exponiendo lo investigado.
Figura 19: BluedIoT: When a mature and immature technology mixes, becomes an �idiot� situation
Lo llam� BluedIoT, (haciendo juego con IoT) c�mo una situaci�n idiota por el hecho de juntar BLE con Wi-FI, en este caso porque de nada te sirve poner un super mega password con WPA2 si el Bluetooth lo cambia cuando le da la gana. A la vulnerabilidad se le atribuy� el CVE ID: CVE-2017-8403
![]() |
| Figura 20: CVE-2017-8403 del bug de360fly 4K |
Y aqu� un v�deo que tambi�n realic�, con lo que hemos expuesto en este art�culo, con un aire un tanto cin�filo para darle un poco de entusiasmo.
Figura 21: V�deo de la PoC del Hack de la 360Fly 4k
A�n suelo escuchar aquellos que dicen �Pero qui�n va a querer entrar si no tengo nada que esconder? S�, quiz� tengan raz�n, la probabilidad puede ser muy baja. En Espa�a esta c�mara puede que no la tenga mucha gente, pero yo la tengo, y quiero un producto con unos m�nimos de calidad a nivel de seguridad ya que, est� en juego la confidencialidad del contenido multimedia y de otras muchas cosas que pueden dar lugar a ciertos negocios m�s oscuros. Pueden hacerte da�o moralmente borr�ndose as� tus memorias, tus mejores instantes.
Uno tambi�n puede pensar que la c�mara esta defectuosa si se ha sido v�ctima de ello, enfureciendo al usuario final y culpando al fabricante. Como veis, todos perdemos, s�lo gana el ciberdelincuente, una persona muy mala. Sed buenos� �Sed hackers!
Autor: Gerard Fuguet
download file now


















