Vulnerabilidad en controladores HID permite abrir puertas remotamente (y mediante un único paquete UDP)

Ricky “HeadlessZeke” Lawshae de Trend Micro ha descubierto un fallo en los sistemas de control de acceso de HID por el que un atacante podría enviar una petición UDP maliciosa para abrir una puerta y/o desactivar una alarma automáticamente y de manera no autorizada.

Las dos principales líneas de HID para sus controles de acceso son VertX y EDGE. Para que estos controladores se integren fácilmente en los sistemas de acceso existentes implementan el servicio discoveryd que responde a un paquete UDP en concreto.
Gracias a este servicio un sistema de administración remoto puede transmitir un broadcast de "descubrimiento" al puerto UDP 4070 y todos los controladores en la red responderán con información tal como su dirección MAC, el tipo de dispositivo, la versión del firmware e incluso su nombre personalizado (por ej. "Puerta Exterior Norte"). 


En principio es la única finalidad de este servicio pero, por alguna razón, discoveryd también contiene la funcionalidad para cambiar el patrón de parpadeo del LED de estado en el controlador. Esto se logra mediante el envío de un paquete al servicio discoveryd con el parámetro "command_blink_on" y el número de veces que queremos que el LED parpadee. Discoveryd a continuación, llama a system() para ejecutar /mnt/apps/bin/blink con el número pasado como argumento.

Desde hace años se conoce este funcionamiento, como podéis ver en el siguiente script de Brad Antoniewicz:
https://github.com/brad-anton/VertX/blob/master/VertX_Query.py

Y la petición de ejemplo sería la siguiente:
H( 42 ): 636f6d6d616e645f626c696e6b5f6f6e3b3034323b30312d32332d34352d36372d38392d61623b33303b    |      A: command_blink_on;042;01-23-45-67-89-ab;30;

El problema es que el argumento con el número de parpadeos no es saneado y en su lugar podemos enviar por ejemplo otro comando del sistema (por ej. `id`) y este se ejecutará en el shell de Linux, es decir, una vulnerabilidad de inyección de comandos con privilegios de root. Con ésto es posible hacer que cualquier controlador de un puerta ejecute un comando genérico de sistema mediante un único paquete UDP.

En definitiva, si usas controles de acceso HID en tu instalación, necesitarás urgentemente descargar la última versión de firmware disponible y actualizar.

Fuentes:
- Let Me Get That Door for You: Remote Root Vulnerability in HID Door Controllers
- Remotely unlock doors exploiting a flaw in HID Door Controllers 

Comentarios