NestTech Solutions · Análisis ofensivo completo: Hardware → Firmware → Runtime → Wireless → Cloud API
| ID | Severidad | CVSS | Hallazgo | Fase | Estado |
|---|---|---|---|---|---|
| SNH-001 | CRITICO | 9.8 |
UART root shell sin autenticación (J3)
Reconocimiento Hardware → Runtime
|
Hardware | Sin corregir |
| SNH-002 | CRITICO | 9.1 |
Credenciales hardcoded en firmware (root:nestt3ch!)
Firmware Analysis → Autenticación
|
Firmware | Sin corregir |
| SNH-003 | CRITICO | 9.4 |
IDOR Cloud API — control total de dispositivos ajenos
Cloud API → Acceso no autorizado
|
Cloud API | Sin corregir |
| SNH-004 | ALTO | 8.6 |
CGI command injection (/goform/setWifi)
Firmware → Web Admin
|
Firmware | Sin corregir |
| SNH-005 | ALTO | 8.1 |
BLE GATT — escritura sin autenticación (control físico)
Wireless → BLE
|
Wireless | Sin corregir |
| SNH-006 | ALTO | 7.8 |
MQTT broker sin ACL — subscribe # permite exfiltrar todo
Protocolos → MQTT
|
Protocolos | Sin corregir |
| SNH-007 | ALTO | 7.3 |
Device claim por serial number — robo de dispositivos
Cloud API → Lógica de negocio
|
Cloud API | Sin corregir |
| SNH-008 | MEDIO | 5.9 |
OpenSSL 1.0.2k (EOL) — múltiples CVE conocidas
Firmware → Componentes vulnerables
|
Firmware | Sin corregir |
| SNH-009 | MEDIO | 5.5 |
CoAP relay sin autenticación (PUT /relay/0 → encendido)
Protocolos → CoAP
|
Protocolos | Sin corregir |
| SNH-010 | MEDIO | 5.3 |
Dropbear SSHv1 habilitado con cipher DES-CBC
Firmware → SSH
|
Firmware | Sin corregir |
| SNH-011 | BAJO | 3.1 |
Certificado TLS cloud autofirmado aceptado sin validación
App Companion
|
App | Sin corregir |
Descripción: El header J3 de 4 pines en la PCB expone una consola UART activa. Tras identificar el baud rate (115200) con un analizador lógico, se obtiene un root shell de Linux directamente sin credenciales ni ningún tipo de autenticación.
Remediación: Eliminar el header UART o protegerlo con chip bloqueador (UART authenticator IC). Configurar U-Boot con contraseña de entorno (CONFIG_AUTOBOOT_KEYED) y activar secure boot para rechazar kernels sin firma.
Descripción: Tras volcar la SPI NOR flash con un programador CH341A y extraer el rootfs con binwalk, se encontraron credenciales root en texto claro y una clave privada de MQTT embebida.
Descripción: La API cloud https://api.nesttechcloud.es/v2/ no valida que el dispositivo solicitado pertenezca al usuario autenticado. Cualquier cuenta puede leer y controlar dispositivos de otros usuarios simplemente incrementando el ID numérico.
Descripción: El binario CGI setWifi.cgi (GoAhead) concatena el parámetro ssid directamente en una llamada system() sin sanitización. Un atacante en la red local (o con las credenciales admin por defecto) puede ejecutar comandos como root.
Descripción: El módulo nRF52840 expone servicios GATT para el control de relés y configuración WiFi. Ninguna característica requiere emparejamiento autenticado: cualquier dispositivo BLE en rango (~10 m) puede leer y escribir sin credenciales.
El broker mqtt.nesttechcloud.es:8883 acepta la conexión con las credenciales extraídas del firmware. Sin ACL por tópico, cualquier cliente con credenciales de un solo dispositivo puede suscribirse a # y recibir mensajes de todos los dispositivos.
El endpoint CoAP local (UDP 5683) no implementa DTLS ni autenticación. Cualquier cliente en la LAN puede controlar los relés del dispositivo.
Escenario: Atacante con acceso físico momentáneo al hub (1 min, ej. habitación de hotel) + cuenta cloud gratuita.
Rellenar con epoxi los pads J3 en la línea de producción. Activar CONFIG_AUTOBOOT_KEYED con hash de contraseña en U-Boot. Implementar Secure Boot con firma de kernel (RSA-2048).
Implementar provisioning único por dispositivo: generación de credenciales durante el proceso de fabricación, almacenadas en secure element (ATECC608B o similar). Contraseñas root desactivadas en producción; acceso solo via clave pública SSH rotable remotamente.
En cada endpoint /v2/devices/{id}/* verificar que el device.owner_id == auth.user_id antes de procesar la petición. Implementar tests de autorización automatizados (OWASP API Security DAST) en el pipeline CI/CD.
Reemplazar system() por llamadas directas a las funciones de configuración WiFi del kernel (netlink). Validar y escapar todos los parámetros de entrada en los CGI de GoAhead con lista blanca de caracteres permitidos.
Configurar el stack BLE para requerir LE Secure Connections (LESC) con Passkey Entry o Numeric Comparison antes de permitir escritura en características de control. Separar características de diagnóstico (lectura) de actuación (escritura con auth).
Cada dispositivo solo puede publicar/suscribirse a nesttechcloud/{device_id}/#. Implementar autenticación mutua TLS (mTLS) con certificados únicos por dispositivo. Eliminar credenciales compartidas del firmware.
Actualizar OpenSSL a 3.3.x y Dropbear a la última versión estable. Deshabilitar SSHv1, DES-CBC y algoritmos obsoletos. Añadir proceso de actualización de firmware OTA firmado para facilitar parches futuros.