
CVE-2022-0778 のリモート概念実証で、細工された証明書を TLS ハンドシェイクに注入して OpenSSL の BN_mod_sqrt() サービス拒否脆弱性を引き起こします。
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"