
Безопасно определять, уязвим ли экземпляр FortiGate SSL VPN для CVE-2023-27997, на основе времени отклика
Безопасно определяет, уязвим ли экземпляр FortiGate SSL VPN для CVE-2023-27997, на основе времени отклика. Полное описание методологии, лежащей в основе этого инструмента, см. в статье в блоге Bishop Fox.
CVE-2023-27997 — это переполнение буфера в куче в компоненте SSL VPN FortiGate, которое, как было продемонстрировано, может быть использовано для RCE до аутентификации. Поскольку это ошибка повреждения памяти, мы должны иметь возможность обнаруживать уязвимые версии без сбоя процесса sslvpnd и отключения активных пользователей.
Этот инструмент отправляет 800 запросов на уязвимый путь URL. Половина запросов будет иметь неверную длину и поэтому будет отклонена более новыми версиями FortiGate; это создаёт измеримую разницу во времени (около 250 микросекунд на наших устройствах при тестировании) между запросами с правильной и неправильной длиной, которую мы можем обнаружить с помощью несложных вычислений.
Размер запроса и поля длины данных выбраны таким образом, чтобы на уязвимых устройствах повреждение памяти затрагивало только те области кучи, в которых нет используемых данных. Это гарантирует, что процесс SSL VPN не выйдет из строя.
$ git clone https://github.com/BishopFox/CVE-2023-27997-check
$ cd CVE-2023-27997-check
$ python3 -m venv venv
$ source venv/bin/activate
$ python3 -m pip install -r requirements.txt
Отсканируйте SSL VPN по адресу https://<IP>:<PORT>. Цель может вернуть статус Vulnerable, Patched или Unknown. Сканирование обычно завершается менее чем за 30 секунд, но из-за большого количества отправляемых запросов в некоторых случаях может занять до 5 минут.
$ python3 CVE-2023-27997-check.py <IP> <PORT>
В следующем примере example.com:10443 уязвим к CVE-2023-27997.
$ python3 CVE-2023-27997-check.py example.com 10443
Checking https://example.com:10443
Vulnerable
Обратите внимание, что этот инструмент полагается на информацию о времени, измеряемую через Интернет, которая подвержена шумам. Инструмент предупредит вас, если результаты могут быть неверными.
$ python3 CVE-2023-27997-check.py example.com 10443
Checking https://example.com:10443
WARNING: Low confidence results.
Patched
$ python3 CVE-2023-27997-check.py example.com 10443
Checking https://example.com:10443
WARNING: Low confidence results.
Unknown
Если вы видите WARNING: Low confidence results, попробуйте уменьшить интернет-шум, используя VPS, который находится как можно ближе географически к целевому серверу.
Использование этого инструмента для атак на цели без предварительного взаимного согласия незаконно. Конечный пользователь обязан соблюдать все применимые местные, государственные и федеральные законы. Разработчики не несут никакой ответственности за неправильное использование или ущерб, причинённый этой программой.