Oracleは2022年4月のクリティカルパッチアップデート(CPU)の一部として、Javaの開発および実行環境の実装であるOracle Java SEのアップデートをリリースした。このアップデートには、署名検証をバイパスすることが可能な脆弱性「CVE-2022-21449」に対する修正が含まれている。この脆弱性について、発見者のNeil Madden氏が自身のブログ上で詳細な解説を行っている。
Neil Madden氏によれば、このCVE-2022-21449はデジタル文書の署名において一般的に利用されているECDSA署名の検証に関するもので、攻撃者はこれを悪用して無条件で有効とされる署名を作成することができるという。同氏の記事には、実際に署名検証をパスできるコードの例が掲載されている。
注意しなければならないのは、CVE-2022-21449は、Oracle Java SEだけでなく、OpenJDKをベースとした他のJava実装にも影響するという点である。現在、Javaの実装はOracleだけでなくRed HatやIBM、Azul Systems、Amazon、Microsoftなどの各社からリリースされているが、それらはいずれもオープンソースのOpenJDKをベースとしている。CVE-2022-21449はOpenJDKのECDSA署名の実装において発見されたものであるため、これらOpenJDKベースのすべてのJava実装に影響する。OpenJDKプロジェクトからも、この脆弱性の情報を含む次のセキュリティアドバイザリが公開されている。
アドバイザリによれば、次のバージョンのJavaがCVE-2022-21449の影響を受けることが確認されているという。
- Java 15
- Java 16
- Java 17
- Java 18
Oracleは当初、Java 7や8、11などの古いバージョンもこの脆弱性の影響を受ける可能性があると発表していたが、これについては後日訂正された。ただし、OpenJDKのアドバイザリにも記載されているように、これらの古いJavaにはセキュリティ機能の別の脆弱性も含まれているため、早急にいずれもしてもアップデートすることが推奨される。なお、Java 15および16はすでにサポートが終了しているため、CVE-2022-21449の修正が提供されるのJava 17と18のみとなる。
Javaでは古くからECDSA署名をサポートしてきたが、OpenJDK 15でその実装が従来のC++によるものからJavaを使用したものに置き換えられた。CVE-2022-21449はその再実装において混入したものだという。
CVE-2022-21449のCVSS v3ベーススコアは7.5で、深刻度「high(高)」に分類されている。Oracleをはじめとする各社から提供される最新バージョンにJDKをアップデートすることで脆弱性の影響を回避することができる。悪用が容易で影響範囲が広い脆弱性なため、早急な対処が推奨される。