
Remote Proof-of-Concept für CVE-2022-0778, der ein manipuliertes Zertifikat in einen TLS-Handshake einschleust, um die OpenSSL-BN_mod_sqrt()-Denial-of-Service-Schwachstelle auszulösen.
Ein einfacher Remote-Trigger-POC für CVE-2022-0778
Während wir versuchten zu überprüfen, ob Serverimplementierungen auf unserer Seite gegenüber CVE-2022-0778 anfällig waren/sind,
erwies es sich als äußerst mühsam, dies remote zu tun. Anleitungen zum Erstellen manipulierter Zertifikate, die
den Parsing-Fehler in BN_nod_sqrt() auslösen, gibt es schon seit einiger Zeit,
aber das Hauptproblem ist, dass die meisten Client-Implementierungen versuchen würden, das Client-Zertifikat zu parsen, um es
im TLS-Handshake zu verwenden. Das wiederum bedeutete:
Was eigentlich benötigt wurde, war die Möglichkeit, eine Nachricht in den TLS-Handshake einzuschleusen, um den Inhalt der Certificate-Nachricht zu ersetzen, die der Client als Antwort auf die CertificateRequest-Nachricht an den Server sendet.
Dies hängt von tlslite-ng ab und überschreibt die TLSConnection._clientKeyExchange-Methode,
sodass während eines TLS-Handshakes mit einem möglicherweise anfälligen Server:
Die crafted.crt wird anhand der Anweisungen unter https://github.com/drago-96/CVE-2022-0778#using-asn1-templates erstellt,
du kannst sie bei Bedarf gerne neu erstellen.
usage: main.py [-h] [--server SERVER] [--port PORT]
Parameters
optional arguments:
-h, --help show this help message and exit
--server SERVER Name of the server to connect for the TLS handshake,
defaults to "localhost"
--port PORT Port where server listens for TLS connections, defaults to
"443"