
Preuve de concept à distance pour CVE-2022-0778 qui injecte un certificat fabriqué dans un handshake TLS pour déclencher la vulnérabilité de déni de service OpenSSL BN_mod_sqrt().
Un POC de déclenchement à distance simple pour CVE-2022-0778
En essayant de valider si les implémentations serveur de notre côté étaient/sont vulnérables à CVE-2022-0778, cela
s'est avéré extrêmement fastidieux à faire à distance. Les instructions pour créer des certificats malveillants afin de déclencher
le bogue d'analyse dans BN_nod_sqrt() existent depuis un moment mais
le principal problème est que la plupart des implémentations client tentent d'analyser le certificat client pour l'utiliser
dans la poignée de main TLS. Cela signifiait donc que :
Ce qui était réellement nécessaire était de pouvoir injecter un message dans la poignée de main TLS afin de remplacer le contenu du message Certificate que le client envoie au serveur en réponse au message CertificateRequest.
Cela dépend de tlslite-ng et remplace la méthode TLSConnection._clientKeyExchange
afin que lors d'une poignée de main TLS avec un serveur potentiellement vulnérable :
Le fichier crafted.crt est créé selon les instructions dans https://github.com/drago-96/CVE-2022-0778#using-asn1-templates,
n'hésitez pas à le recréer si vous le souhaitez.
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"