
Prova de conceito remota para CVE-2022-0778 que injeta um certificado malicioso em um handshake TLS para acionar a vulnerabilidade de negação de serviço BN_mod_sqrt() do OpenSSL.
Um POC simples de disparo remoto para CVE-2022-0778
Ao tentar validar se as implementações de servidor do nosso lado estavam/são vulneráveis ao CVE-2022-0778, mostrou-se
extremamente trabalhoso fazê-lo remotamente. As instruções para criar certificados maliciosamente forjados para acionar
o bug de parsing em BN_nod_sqrt() já existem há algum tempo,
mas o principal problema é que a maioria das implementações de cliente tentaria analisar o certificado do cliente para usá-lo
no handshake TLS. Isso, por sua vez, significava que:
O que realmente era necessário era poder injetar uma mensagem no handshake TLS para que pudéssemos substituir o conteúdo da mensagem Certificate que o cliente envia ao servidor em resposta à mensagem CertificateRequest.
Isto depende de tlslite-ng e sobrescreve o método TLSConnection._clientKeyExchange
para que, durante um handshake TLS com um servidor possivelmente vulnerável:
O crafted.crt é criado com base nas instruções em https://github.com/drago-96/CVE-2022-0778#using-asn1-templates,
sinta-se à vontade para recriá-lo, se desejar.
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"