BOF en NetUSB o como un pequeño componente de software vulnerable puede afectar a millones de dispositivos en el mundo

NetUSB es una tecnología propietaria desarrollada por la empresa taiwanesa KCodes para proveer la funcionalidad "USB sobre IP". A grandes rasgos cualquier dispositivo USB como una impresora, un disco portátil, etc. conectado a un sistema Linux embebido como un router, un punto de acceso o una caja dedicada, estará disponible en red mediante un driver de kernel Linux que ejecuta un servidor en el puerto TCP 20005. Luego el cliente instalará un software (disponible para Windows y OS X), conectará al servidor y será como si el dispositivo USB estuviera conectado en local.

Para la conexión cliente-servidor es necesario pasar primero una autenticación que se realiza mediante claves AES estáticas en ambos extremos. Durante el inicio de la conexión el cliente envía el nombre de equipo y puede especificar la longitud de dicho nombre. Si se especifica con más de 64 caracteres se producirá un desbordamiento de buffer en el stack del kernel del servidor que podría permitir la ejecución de código en el sistema afectado.

int computername_len;
char computername_buf[64];
// connection initiation, handshake
len = ks_recv(sock, &computername_len, 4, 0);
// ...
len = ks_recv(sock, computername_buf, computername_len, 0); // boom!
Ya hay un script para la prueba de concepto "netusb_bof.py" que causa un DoS/reinicio del dispositivo:

./netusb_bof.py 192.168.1.1 20005 500

Este script todavía no ha sido publicado ni se publicará hasta que todos o la mayoría de vendedores parcheen la vulnerabilidad. El gran problema es que este driver de Kernel se encuentra activado por defecto en miles de dispositivos: TP-Link, Netgear, D-Link, TrendNet, Zyxel, ...


Fuentes:
- KCodes NetUSB: How a Small Taiwanese Software Company Can Impact the Security of Millions of Devices Worldwide 
- SEC Consult Vulnerability Lab Security Advisory 20150519-0   
- NetUSB Driver Flaw Exposes Millions of Routers to Hacking

Comentarios