
PoC para la vulnerabilidad DoS CVE-2021-37740 en el firmware v3.0.3 de SCN-IP100.03 y SCN-IP000.03 de MDT. El error se ha corregido en el firmware v3.0.4.
CVE-2021-37740 es una vulnerabilidad de denegación de servicio (DoS) que afecta al firmware v3.0.3 del router KNXnet/IP Secure SCN-IP100.03 y la interfaz SCN-IP000.03 de MDT. Un marco KNXnet/IP Secure especialmente manipulado provoca que el dispositivo no responda a más solicitudes, requiriendo un reinicio para restaurar el funcionamiento normal. Este repositorio contiene una prueba de concepto que demuestra cómo se puede desencadenar el error, desarrollada originalmente para la divulgación coordinada de vulnerabilidades.
Un adversario puede explotar la vulnerabilidad estableciendo una conexión TCP con el dispositivo objetivo, seguido del envío de un marco SESSION_REQUEST con un campo de longitud total modificado, que contenga un valor de 0x0259 o superior.
Los dispositivos afectados por la vulnerabilidad dejarán de responder a los marcos KNXnet/IP Secure en cualquier conexión. El SESSION_REQUEST es el primer marco enviado durante el handshake del protocolo unicast KNXnet/IP Secure, según lo especificado por ISO 22510:2019.
Se supone que tiene una longitud fija de 46 bytes. El estándar requiere que los marcos con una longitud diferente sean descartados.
Se requiere Python 3 para los scripts proporcionados en este repositorio. El healthcheck.py se utiliza para probar si el dispositivo sigue respondiendo.
Establece una conexión TCP con el dispositivo objetivo e intenta iniciar el handshake unicast KNXnet/IP Secure.
Si el dispositivo envía una respuesta, se imprimirá como hexadecimal en stdout.
El poc.py intenta desencadenar la vulnerabilidad DoS enviando el marco SESSION_REQUEST inválido. Si un dispositivo es vulnerable, las ejecuciones posteriores de healthcheck.py no producirán una respuesta, a menos que el dispositivo objetivo sea reiniciado.
Los scripts se pueden ejecutar con los siguientes comandos, donde <insert IP address> debe ser reemplazado por la dirección IP real (por ejemplo, 192.168.2.137).
python3 healthcheck.py -t <insert IP address>
python3 poc.py -t <insert IP address>
En Windows, el alias de Python puede tener que cambiarse de python3 a python. Si el dispositivo objetivo implementa el endpoint de control en un puerto distinto de 3671, entonces el puerto en el script debe ajustarse en consecuencia.
La vulnerabilidad fue corregida en el firmware v3.0.4, según lo documentado por el registro de cambios para el firmware de MDT. Instalar el firmware más reciente soluciona el problema. Las instrucciones para la actualización del firmware y el archivo .hex se proporcionan en el sitio web de MDT.
La prueba de concepto se distribuye bajo la licencia MIT.
Descarga:
Cambios: