MicrosoftがCVE-2020-0601——NSAからの非公開の通報を受けて2020年1月14日にMicrosoftが修正したWindows CryptoAPIの重大な脆弱性——を公表してから24時間も経たないうちに、研究者のSaleem Rashidは、GitHub.comとNSA.gov上でHTTPS経由でRick Astleyの「Never Gonna Give You Up」が再生される画像をツイートした。このリックロールが実演そのものだった。彼のエクスプロイトは、EdgeとChromeに偽装サイトを真正に検証済みのものとして扱わせたのであり、Brave、その他のChrome派生ブラウザ、Internet Explorerも影響を受けた可能性が高い。Firefoxは影響を受けた兆候を示さなかった。

この脆弱性は、Windows 10(Windows Server 2016および2019を含む)におけるウェブサイト、ソフトウェア更新、VPN、その他のセキュリティ上重要な用途の証明書検証を完全に破壊した。その仕組みは次のとおりである。CryptoAPIは、標準で定義された曲線を要求するのではなく、各証明書に含まれる楕円曲線パラメータを信頼していたため、攻撃者は独自の生成元パラメータを提供でき、それによってWindowsは攻撃者が選んだ公開鍵に「合意」してしまい、偽造証明書が本物として通ってしまった。

Rashidは、このエクスプロイトは約100行のコードを使ったと述べ、さらに「いくつかの有用なトリック」を削れば10行に圧縮できるとも述べた。この実演の速さ——公開の技術的説明なしに公表された脆弱性に対して、1日以内——は、根本原因がメモリバグではなく設計上の誤りである場合に、「修正済みの脆弱性」と「武器化されたエクスプロイト」の間に残される隔たりがいかに小さいかを示した。

この公表の由来がこの話に皮肉をもたらした。NSAがこのバグを非公開で報告しており、その実際の影響にはNSA自身のウェブサイトのなりすましが含まれていたのである。リックロール——重大なセキュリティ上の欠陥を示す際の定番のユーモラスな実演——によって、そのなりすましは専門家でない人々にも即座に可視化された。

攻撃者の楕円曲線パラメータを受け入れる暗号ライブラリでは、攻撃者が数学的に合意される鍵を選べてしまい、検証は形だけのものになる。

根本原因は実装上の不注意ではなく設計原則にある。呼び出し側が提供する暗号パラメータを受け入れることは、柔軟性を万能の偽造に変えてしまう。

影響範囲はTLSが保護するすべて——ウェブサイト、ソフトウェア更新、VPN——に及び、すべてのWindows 10およびServer 2016/2019マシンに及んだ。

動作する偽装は公表から1日以内に約100行で成立し、ほとんどの防御者がパッチを適用する前に実現した。

実演の標的はバグの報告者自身であり、この失敗モードを理論上のものとして片付けることを不可能にした。

暗号の柔軟性は攻撃面である。検証側が信頼できない側から受け入れるあらゆるパラメータは、攻撃者が回せるつまみである。定数はハードコードし、任意のものは一切検証しないこと。

Microsoftの2020年1月14日のパッチはWindows 10および影響を受けたサーバーバージョンのCryptoAPI検証の欠陥を修正した。情報源は、Rashidの実演以外に実際の悪用があったとは報告していない。

出典をたどる

出典

  1. Critical Windows 10 vulnerability used to Rickroll the NSA and Github Ars Technica · arstechnica.com ·