
CVE-2022-0778에 대한 원격 개념 증명(PoC)으로, 조작된 인증서를 TLS 핸드셰이크에 주입하여 OpenSSL BN_mod_sqrt()의 서비스 거부 취약점을 트리거합니다.
자체 서버 구현이 CVE-2022-0778에 취약한지 확인하려고 할 때, 원격으로 확인하는 것은 매우 번거로웠습니다. BN_nod_sqrt()의 파싱 버그를 트리거하기 위해 악의적으로 조작된 인증서를 만드는 방법은 이미 알려져 있지만, 주요 문제는 대부분의 클라이언트 구현이 TLS 핸드셰이크에서 사용하기 위해 클라이언트 인증서를 파싱하려고 한다는 점입니다. 이는 결과적으로 다음과 같습니다.
실제로 필요한 것은 TLS 핸드셰이크에 메시지를 주입하여 클라이언트가 CertificateRequest 메시지에 응답하여 서버로 보내는 Certificate 메시지의 내용을 대체할 수 있도록 하는 것이었습니다.
이 도구는 tlslite-ng에 의존하며, TLSConnection._clientKeyExchange 메서드를 재정의하여 잠재적으로 취약한 서버와 TLS 핸드셰이크를 수행하는 동안 다음을 수행합니다:
crafted.crt는 https://github.com/drago-96/CVE-2022-0778#using-asn1-templates 의 지침에 따라 생성되었으며, 원한다면 자유롭게 다시 생성하십시오.
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"