Javaの標準ライブラリには、信頼されていないXSLTプログラムを処理するためのJITコンパイラが隠れています。この脆弱性、CVE-2022-34169は、JITコンパイラの整数切り捨てバグが原因です。この脆弱性により、JavaベースのWebアプリケーションと、SAMLシングルサインオンをサポートするアイデンティティプロバイダーで、任意のコードの実行が可能です。
SAMLでは、XMLシグネチャが広く使用されています。SAMLは、Webアプリケーションとアイデンティティプロバイダー(IdP)間でXMLドキュメントを交換することを含みます。XMLシグネチャはこれらのドキュメントの整合性を確保します。
XMLシグネチャを検証するには、アプリケーションが攻撃者が制御する入力に対して攻撃者が制御する変換を実行する必要があります。XSLTは、XMLプログラミング言語であり、一般的に使用される変換の1つです。
JavaのXSLT実装は、XSLTプログラムを実行するためにJITコンパイラを使用します。ただし、このJITコンパイラには、整数切り捨てバグがあり、任意のコードの実行を可能にすることができました。
この脆弱性は、2022年7月にOpenJDKで、2022年9月にApache BCELで修正されました。ただし、研究者は、XMLシグネチャの検証プロセスの複雑さのために、SAMLで類似の脆弱性が存在することを予想しています。
この脆弱性は、CやC++コードベースのメモリー安全性の問題と比べると、メモリー安全性の問題が少ない言語の脆弱性の存在を示しています。
XMLシグネチャの検証プロセスは、2つのステップで構成されています。参照検証とシグネチャ検証です。Javaでは、シグネチャ検証が参照検証よりも前に行われます。これにより、攻撃者がシグネチャ検証の要件をバイパスすることができます。
XSLT変換は、XMLシグネチャに埋め込むことができます。これにより、検証者が参照されたXMLデータに対してXSLTプログラムを実行する必要があります。これが、外部攻撃者に対する潜在的な攻撃面を生み出します。
JavaのXSLT検証は、脆弱なJITコンパイラが含まれるApache BCELライブラリを呼び出します。この脆弱性は、SAMLを認証に使用するJavaアプリケーションで悪用することができました。
googleprojectzero.blogspot.com
Gregor Samsa: Exploiting Java's XML Signature Verification
Create attached notes ...
