
PoC for DoS vulnerability CVE-2021-37740 in firmware v3.0.3 of SCN-IP100.03 and SCN-IP000.03 by MDT. The bug has been fixed in firmware v3.0.4.
CVE-2021-37740 — это уязвимость типа «отказ в обслуживании» (DoS), затрагивающая прошивку v3.0.3 маршрутизатора KNXnet/IP Secure SCN-IP100.03 и интерфейса SCN-IP000.03 от MDT. Специально сформированный кадр KNXnet/IP Secure приводит к тому, что устройство перестаёт отвечать на последующие запросы, для восстановления нормальной работы требуется перезагрузка. Данный репозиторий содержит доказательство концепции, демонстрирующее, как можно вызвать ошибку; изначально оно было разработано для координированного раскрытия уязвимости.
Злоумышленник может воспользоваться уязвимостью, установив TCP-соединение с целевым устройством, после чего отправить кадр SESSION_REQUEST с изменённым полем общей длины, содержащим значение 0x0259 или выше.
Устройства, подверженные уязвимости, перестанут отвечать на кадры KNXnet/IP Secure в любом соединении. SESSION_REQUEST — это первый кадр, отправляемый при рукопожатии протокола KNXnet/IP Secure unicast, как указано в ISO 22510:2019.
Он должен иметь фиксированную длину 46 байт. Стандарт требует, чтобы кадры с отклоняющейся длиной отбрасывались.
Для скриптов, представленных в этом репозитории, требуется Python 3. healthcheck.py предназначен для проверки, отвечает ли устройство.
Он устанавливает TCP-соединение с целевым устройством и пытается начать рукопожатие KNXnet/IP Secure unicast.
Если устройство отправляет ответ, он выводится в шестнадцатеричном виде в stdout.
poc.py пытается вызвать DoS-уязвимость, отправляя недопустимый кадр SESSION_REQUEST. Если устройство уязвимо, последующие выполнения healthcheck.py не приведут к ответу, пока целевое устройство не будет перезагружено.
Скрипты можно выполнить следующими командами, где <insert IP address> необходимо заменить на фактический IP-адрес (например, 192.168.2.137).
python3 healthcheck.py -t <insert IP address>
python3 poc.py -t <insert IP address>
В Windows псевдоним для Python, возможно, придётся изменить с python3 на python. Если целевое устройство использует порт управления, отличный от 3671, то порт в скрипте необходимо соответствующим образом изменить.
Уязвимость была исправлена в прошивке v3.0.4, о чём свидетельствует журнал изменений прошивки MDT. Установка последней версии прошивки устраняет проблему. Инструкции по обновлению прошивки и файл .hex предоставлены на веб-сайте MDT.
Доказательство концепции распространяется по лицензии MIT.
Загрузка:
Изменения: