脆弱性まとめ:HPX v1.11.0 の逆シリアライズにおける型混乱(Type Confusion) 脆弱性概要 HPX v1.11.0 およびそれ以前のバージョンにおいて、不安全な逆シリアライズ脆弱性が発見されました。異なる型の共有ポインタ(shared pointer)を逆シリアライズする際、十分な型チェックが行われないことで、型混乱(Type Confusion) が発生する可能性があります。 この脆弱性の根本原因は、 関数にあります。既存のポインタ ID が検出された場合、コードは浅いコピー(Shallow Copy)を実行しますが、現在逆シリアライズされているオブジェクトの型が元の型と一致しているかどうかを検証していません。 影響範囲 情報漏洩:攻撃者は型混乱を利用して任意のメモリアドレスを読み取ることで、ASLR(アドレス空間配置のランダム化)をバイパスできます。 制御フローのハイジャック:仮想関数テーブルポインタ(v-pointer)を改ざんすることで、攻撃者はプログラムの実行フローを乗っ取ることができます。 任意のコード実行:上記の2点を組み合わせることで、リモートコード実行(RCE)を実現できます。 権限昇格:ローカル権限の昇格につながる可能性があります。 修正方法 関数において、タイプハッシュ(Type Hash)チェックメカニズムを導入することを推奨します: 1. オブジェクトを初めてロードする際、そのタイプハッシュを計算して保存します。 2. 後続の処理で同じ ID を検出し、浅いコピーを実行する際、現在のオブジェクトのタイプハッシュが保存されたハッシュと一致するか検証します。 3. 一致しない場合はエラーをスローし、型混乱を防ぎます。 POC コード抜粋 1. アドレス漏洩例 (example_addr_leak.cpp) 2. メモリ読み取り例 (example_mem_read.cpp) 3. 制御フローハイジャック例 (example_vtable_hijack.cpp) 4. 根本原因となる脆弱性コードフラグメント (Root Cause) 5. 推奨される修正コード