## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ROBERTGUETZKOW-CVE-2021-37740
# Доказательство концепции для CVE-2021-37740
## Содержание
* Введение
* Уязвимость
* Выполнение PoC
* Устранение
* Координированное раскрытие уязвимости
* Лицензия
* Журнал изменений
## Введение
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.
## Координированное раскрытие уязвимости
* 2021-07-06 - Проблема сообщена в MDT
* 2021-07-07 - MDT начало исследование
* 2021-07-28 - MDT подтвердило ошибку и предоставило исправленную прошивку для тестирования
* 2021-08-01 - MDT получено подтверждение, что ошибка исправлена
* 2021-08-02 - MDT выпустило прошивку v3.0.4
* 2022-04-01 - Публичное раскрытие
## Лицензия
Доказательство концепции распространяется по лицензии MIT.
## Журнал изменений
### 1.0.0 - 2022-04-01
**Загрузка:**
* Исходный код
**Изменения:**
* Начальная версия