
Удаленный proof-of-concept для CVE-2022-0778, который внедряет специально созданный сертификат в рукопожатие TLS, чтобы вызвать уязвимость типа отказ в обслуживании OpenSSL BN_mod_sqrt().
При попытке проверить, уязвимы ли серверные реализации на нашей стороне для CVE-2022-0778, удалённое выполнение этой проверки оказалось крайне обременительным.
Инструкции по созданию вредоносных сертификатов для запуска ошибки парсинга в BN_nod_sqrt() уже давно доступны, но основная проблема в том, что большинство клиентских реализаций пытаются разобрать клиентский сертификат, чтобы использовать его в TLS-рукопожатии. Это, в свою очередь, означало, что
На самом деле нужно было иметь возможность внедрить сообщение в TLS-рукопожатие, чтобы заменить содержимое сообщения Certificate, которое клиент отправляет серверу в ответ на сообщение CertificateRequest.
Это зависит от tlslite-ng и переопределяет метод TLSConnection._clientKeyExchange, чтобы во время TLS-рукопожатия с возможно уязвимым сервером:
Файл crafted.crt создаётся на основе инструкций по адресу https://github.com/drago-96/CVE-2022-0778#using-asn1-templates, не стесняйтесь воссоздать его, если хотите.
usage: main.py [-h] [--server SERVER] [--port PORT]
Parameters
optional arguments:
-h, --help show this help message and exit
--server SERVER Name of the server to connect for the TLS handshake,
defaults to "localhost"
--port PORT Port where server listens for TLS connections, defaults to
"443"