一个针对 CVE-2022-0778 的简单远程触发 POC
在尝试验证我们这边的服务器实现是否受到 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"