
PoC para vulnerabilidade de DoS CVE-2021-37740 no firmware v3.0.3 do SCN-IP100.03 e SCN-IP000.03 da MDT. A falha foi corrigida no firmware v3.0.4.
O CVE-2021-37740 é uma vulnerabilidade de negação de serviço (DoS) que afeta o firmware v3.0.3 do roteador KNXnet/IP Secure SCN-IP100.03 e da interface SCN-IP000.03 da MDT. Um quadro KNXnet/IP Secure especialmente criado resulta num dispositivo que não responde a mais requisições, exigindo uma reinicialização para restaurar o funcionamento normal. Este repositório contém uma prova de conceito que demonstra como o bug pode ser desencadeado, desenvolvida originalmente para a divulgação coordenada da vulnerabilidade.
Um adversário pode explorar a vulnerabilidade estabelecendo uma conexão TCP com o dispositivo alvo, seguida do envio de um quadro SESSION_REQUEST com um campo de comprimento total modificado, contendo um valor de 0x0259 ou superior.
Dispositivos afetados pela vulnerabilidade não responderão mais a quadros KNXnet/IP Secure em qualquer conexão. O SESSION_REQUEST é o primeiro quadro enviado durante o handshake do protocolo unicast KNXnet/IP Secure, conforme especificado pela ISO 22510:2019.
Ele deve ter um comprimento fixo de 46 bytes. O padrão exige que quadros com comprimento divergente sejam descartados.
O Python 3 é necessário para os scripts fornecidos neste repositório. O healthcheck.py é para testar se o dispositivo ainda está responsivo.
Ele estabelece uma conexão TCP com o dispositivo alvo e tenta iniciar o handshake unicast KNXnet/IP Secure.
Se o dispositivo enviar uma resposta, ela será exibida como hexadecimal no stdout.
O poc.py tenta desencadear a vulnerabilidade DoS enviando o quadro SESSION_REQUEST inválido. Se um dispositivo for vulnerável, execuções subsequentes do healthcheck.py não produzirão resposta, a menos que o dispositivo alvo seja reinicializado.
Os scripts podem ser executados com os seguintes comandos, onde <inserir endereço IP> deve ser substituído pelo endereço IP real (ex.: 192.168.2.137).
python3 healthcheck.py -t <inserir endereço IP>
python3 poc.py -t <inserir endereço IP>
No Windows, o alias para Python pode ter que ser alterado de python3 para python. Se o dispositivo alvo implementar o endpoint de controle numa porta diferente de 3671, então a porta no script deve ser ajustada adequadamente.
A vulnerabilidade foi corrigida no firmware v3.0.4, conforme documentado pelo histórico de alterações do firmware da MDT. A instalação do firmware mais recente resolve o problema. As instruções para a atualização do firmware e o arquivo .hex são fornecidas no site da MDT.
A prova de conceito é distribuída sob a licença MIT.
Download:
Alterações: