Windows CryptoAPI の脆弱性 CVE-2022-34689:PoC エクスプロイトが公開

Researchers release PoC exploit for critical Windows CryptoAPI bug (CVE-2022-34689)

2023/01/26 HelpnetSecurity — Akamai の研究者たちが、公開キー証明書を検証する Windows CryptoAPI に存在する、深刻な脆弱性 CVE-2022-34689 に対する PoC エクスプロイトを公表した。この Windows/Windows Server に影響する脆弱性は、2022年10月に修正プログラムが公開されている。その際に Microsoft は、「攻撃者は既存の公開証明書 x.509 を操作して身元を偽り、認証/コード署名などのアクションを、本物の証明書を持っているかのように実行できる」と説明していた。

この脆弱性に対して、実際にパッチが適用されたのは 2022年8月のことだったが、その2ヶ月後に状況が明らかされた。背景には、セキュリティ更新プログラムが広く実施される前に、攻撃者に知られることを避けるという配慮があったと思われる。

CVE-2022-34689 について

Akamai の研究者である Tomer Peled と Yoni Rozenshein は、「この脆弱性の根本的な原因は、MD5 ベースの証明書キャッシュのインデックス・キーが、無衝突であることだと推測される。2009年以降には、MD5 の耐衝突性能が低下していることが知られている。攻撃の流れは2つある。第一段階は、正規の証明書を取得/修正し、修正版を被害者に提供する必要がある。第二段階では、MD5 が修正された正規の証明書と衝突する新しい証明書を作成し、その新しい証明書を使って元の証明書のサブジェクトの身元を偽装する」と説明している。

しかし、この脆弱性 CVE-2022-34689 は、CVE-2020-0601 (別名 CurveBall) ほど広く悪用されることはないだろう。CVE-2020-0601 は、CVE-2022-34689 と同様に、Windows CryptoAPI に存在する成りすましの脆弱性であり、中国の国家支援ハッカーに利用され、2020年に最も悪用された脆弱性 Top-10 に入る時期もあった。

CVE-2022-34689 の悪用

CVE-2022-34689 の悪用で必要となるのは、選択された接頭辞の衝突攻撃を容易にする方法で生成され、正しく署名/検証された最初の証明書を、CryptoAPI でキャッシュすることである。それにより、Microsoft によるキャッシュされた証明書の再確認が行われないため、 前の証明書と同じ MD5 サムプリントを持つ、2番目の証明書が直ちに信頼されるようになる。

研究者たちは、「CryptoAPI のキャッシュ・メカニズムは、デフォルトで無効になっている。それを、アプリケーション開発者が有効化するには、最終的に脆弱なコードにつながる Windows API 関数 CertGetCertificateChain に対して、特定のパラメータを渡す必要がある」と述べている。

そのような方法で CryptoAPI を使用する、いくつかのアプリ (Chrome v48 以下/Chromium ベースのアプリ) が発見されているが、他にもあると、研究者たちは確信している。

幸いなことに、CVE-2022-34689 の悪用を成功させるためには、前提条件が2つある。マシンが Windows を実行していて、Microsoft のパッチが未適用であること、そして、CryptoAPI キャッシュ機構を使用するアプリを実行していることだ。

研究者たちは、管理者に対して、Windows Server とエンドポイント向けに Microsoft  がリリースした、最新のセキュリティ・パッチを適用するよう推奨している。また、開発者に対しては、証明書を使用する前に他の WinAPI を用いて、その有効性をチェックするよう促している。

彼らは、現時点でも使用されている、サポートが終了している Windows のバージョンも、パッチを受けるべきだと指摘している。しかし、現在の限定的な悪用範囲を考えると、Microsoft がパッチをリリースすることはないと思われる。

暗号の話は、勉強が足りなく、難しいです。ただ、この脆弱性は、CryptoAPI キャッシュの仕組みの問題ということなので、それ自体の理解は容易です。このブログ内を encrypt で検索してみたら、以下の記事が見つかりました。

2023/01/06:Amazon S3 上で AES-256 暗号化がデフォルト適用
2022/11/29:Let’s Encrypt:2022 年の発行件数が 30億件に到達
2021/10/13:Vaultree が提供する Encryption-as-a-Service