2022年11月1日(現地時間)、オープンソースの暗号化ライブラリである「OpenSSL」に2つの脆弱性「CVE-2022-3602」と「CVE-2022-3786」が報告された。それぞれ深刻度が「緊急(Critical)」および「高(High)」と高く業界に衝撃を与えたが、後に悪用の可能性は低いと判断され、深刻度が引き下げられている。
Check Point Software Technologiesが12月7日、公式ブログ「OpenSSL punycode - with hindsight」において、この2つの脆弱性が報告された前後の状況を振り返りながら、これが一体どのようなものであったのかを解説している。
CVE-2022-3062は、ossl_punycode_decodeという関数に発見されたバッファオーバーフローの脆弱性である。Punycodeとは、ASCIIコードのサブセットを使用してUnicode文字セットを表現する文字符号化方式で、国際化ドメイン名などでも利用されている。このPunycodeを処理する際のメモリサイズのチェックにおいて境界条件の設定を誤ったことがCVE-2022-3062の原因だ。悪用すると領域外のバッファに対してunsigned int(4バイト)のデータを書き込むことが可能で、クラッシュや任意のコード実行が行われる危険性があるという。
この脆弱性は当初は深刻度「緊急」として公開されたが、詳細な分析の結果、「高」にダウングレードされた。書き換えられるのはたった4バイトのみであり、さらにその4バイトの領域は通常の処理ですぐに別の値に書き換えられることから、攻撃に悪用するのは極めて難しいと判断されたからだ。
一方、CVE-2022-3786は、ossl_a2ulabelと呼ばれる関数に発見されたバッファオーバーフローの脆弱性になる。この関数はX.509証明書が有効であることを確認する処理の一環として用意されているものと説明されている。
この脆弱性を悪用すると、オーバーフローを利用して任意の数の「.」をバッファに書き込めるという。ただし、書き込める内容は「.」のみであり、他のデータを書き込むことはできない。攻撃者は、この脆弱性を悪用して任意の数の「.」でスタックをオーバーフローさせて、プログラムをクラッシュさせることができる可能性がある。ユーザーが何らかの方法で悪意のあるサーバに接続した場合に、この脆弱性の影響にさらされる危険性があるものの、セキュリティ専門家は最新のセキュリティメカニズムを考慮すると実用的な攻撃は困難だと結論づけている。
この2つの脆弱性は、修正がリリースされるよりも前に明らかにされ、その深刻度が広まったことで大きな騒動となった。多くの人は、2014年に発覚したOpenSSLの極めて深刻な脆弱性「Heartbeat」のようなものを想像したが、詳細が明らかになると、状況はそれほど深刻ではないことが分かった。
ただし、ダウングレードされたとはいっても脆弱性の深刻度としてはいずれも「高」に指定されているため、対処を怠るのは懸命ではないだろう。CVE-2022-3062とCVE-2022-3786は、いずれもOpenSSL 3.0.7以降のバージョンにアップデートすることで影響を回避することができる。