
Implementación en Rust de la prueba de concepto de inyección de teclado de Marc Newlin (CVE-2023-45866).
⚠️ *Descargo de responsabilidad: Solo para fines de investigación y educativos
Este proyecto es una Prueba de Concepto (PoC) que demuestra la inyección de pulsaciones de teclado por Bluetooth, reimplementada en Rust. Está destinado estrictamente a fines educativos y de investigación en seguridad.
Al descargar, clonar o utilizar este código, usted acepta usarlo de manera responsable y de conformidad con todas las leyes y regulaciones aplicables.
Bienvenido a Rusty Injector: una implementación en Rust inspirada en la PoC de inyección de pulsaciones de teclado por Bluetooth de Marc Newlin, vinculada a CVE-2023-45866, CVE-2024-21306 y CVE-2024-0230.
Actualmente, este repositorio solo implementa CVE-2023-45866, que explota vulnerabilidades de inyección de pulsaciones de teclado en BlueZ en el sistema operativo Linux.
A continuación se muestra una captura de pantalla de la descripción del NIST, incluida la puntuación CVSS :
Captura 1 : Descripción NIST de CVE-2023-45866.
Los otros CVEs, CVE-2024-21306 y CVE-2024-0230, no están planificados para ser implementados por mí, pero las contribuciones son bienvenidas.
Antes de entrar en detalles, te animo a ver la presentación de Marc Newlin en la conferencia NullCon 2024, ya que ofrece una explicación clara y exhaustiva de estas vulnerabilidades: Hola, mi nombre es teclado, por Marc Newlin..
También he puesto a disposición un video que divulga esta vulnerabilidad. Lo encontrarás aquí: Cómo un simple hack de Bluetooth puede secuestrar tu dispositivo - Hola, mi nombre es teclado.
📌 Si observas algún punto que falte, áreas que podrían simplificarse mejor o posibles errores en la explicación a continuación, no dudes en modificarlo y enviar una solicitud de fusión (merge request). Me encantará revisar tus contribuciones e incorporarlas al repositorio.
Como solo hemos cubierto la vulnerabilidad CVE-2023-45866, correspondiente a sistemas operativos Linux, solo explicaremos el proceso para lograr esta explotación específica dirigida a la librería BlueZ.
En primer lugar, debes entender que esta vulnerabilidad solo es explotable en Bluetooth BR/EDR porque ataca el perfil HID que se encuentra sobre esta tecnología. Quizás sepas que la implementación arquitectónica de Bluetooth está dividida en múltiples capas, como el modelo OSI para el protocolo Ethernet, y como puedes observar en nuestro esquema a continuación.
Diagrama 1 : Pila simplificada de Bluetooth BR/EDR (Basic Rate - Enhanced Data Rate). La capa más baja de la pila representa la capa física con una antena dedicada, y el nivel más alto corresponde al nivel de aplicación o lo que a veces podemos designar como sistema operativo. Cuando dos dispositivos quieren comunicarse entre sí, atraviesan estas diferentes capas: de arriba hacia abajo para los paquetes salientes y de abajo hacia arriba para los paquetes Bluetooth entrantes.
Después del proceso de descubrimiento (inquiry), una vez que los dispositivos determinan que quieren establecer una conexión, proceden al proceso de emparejamiento. Este proceso permite la autenticación mutua entre los dispositivos y el establecimiento de una clave de cifrado, que luego se utiliza para asegurar la comunicación.
La especificación Bluetooth ofrece diferentes niveles de autenticación y seguridad. Dependiendo del mecanismo utilizado para la autenticación, el nivel de seguridad de la comunicación puede variar. Los dispositivos pueden autenticarse según los periféricos de entrada y salida que posean, un concepto conocido como modelos de asociación. Probablemente te hayas encontrado con esto al emparejar dos dispositivos, como cuando se te pide introducir un PIN mostrado en el otro dispositivo.
Hay cuatro modelos de asociación de emparejamiento, determinados por las capacidades de E/S (Entrada/Salida) de los dispositivos:
A continuación se muestra una tabla que indica qué modelo de asociación se utiliza según las capacidades de nuestros dispositivos IoT.
Diagrama 2 : Tabla que ilustra los modelos de asociación de Bluetooth BR/EDR inspirada en la Bluetooth Core Specification v5.3 - 2.3.5.1 Selección del método de generación de claves, Tabla 2.8 : Mapeo de las capacidades de E/S al método de generación de claves (página 1573). Para obtener más información sobre los modos de seguridad y los modelos de asociación, consulta esta interesante publicación de blog de Thyrasec: Bluetooth Security : Classic & BLE !
Estoy seguro de que te intriga el método 'Just Works', que es precisamente donde reside nuestra vulnerabilidad. Este es el problema: este método establece el emparejamiento sin requerir confirmación ni interacción del usuario, sin dejar forma de verificar la autenticidad del dispositivo que se empareja. En los sistemas Linux, la pila BlueZ, por defecto, aceptaba solicitudes de emparejamiento entrantes de dispositivos clasificados como NoInputNoOutput (para permitir la compatibilidad hacia atrás). Una elección de diseño realmente "maravillosa", ¿no crees?
Captura 2 : Actualización de la configuración por defecto de blueZ para habilitar la seguridad de Bluetooth y parchear CVE-2023-45866.