
Prueba de concepto remota para CVE-2022-0778 que inyecta un certificado manipulado en un handshake TLS para desencadenar la vulnerabilidad de denegación de servicio OpenSSL BN_mod_sqrt().
Un POC sencillo de activación remota para CVE-2022-0778
Mientras intentábamos validar si las implementaciones de servidor de nuestro lado eran/son vulnerables a CVE-2022-0778, resultó extremadamente engorroso hacerlo de forma remota. Las instrucciones para crear certificados maliciosamente diseñados para activar el error de análisis en BN_nod_sqrt() han estado disponibles desde hace un tiempo, pero el problema principal es que la mayoría de las implementaciones de clientes intentarían analizar el certificado del cliente para usarlo en el handshake TLS. Esto a su vez significaba que:
Lo que realmente se necesitaba era poder inyectar un mensaje en el handshake TLS para poder reemplazar el contenido del mensaje Certificate que el cliente envía al servidor en respuesta al mensaje CertificateRequest.
Esto depende de tlslite-ng y sobrescribe el método TLSConnection._clientKeyExchange para que durante un handshake TLS con un servidor posiblemente vulnerable:
El archivo crafted.crt se crea siguiendo las instrucciones en https://github.com/drago-96/CVE-2022-0778#using-asn1-templates, siéntase libre de recrearlo si lo desea.
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"