脆弱性
ヒープオーバーフロー
別称: ヒープバッファオーバーフロー
定義
動的に確保したメモリ上で発生するバッファオーバーフロー。アロケータのメタデータ、関数ポインタ、オブジェクトの vtable などが破壊されることが多い。
ヒープオーバーフローは、ヒープ上に確保されたバッファの末尾を越えて書き込み、隣接チャンクや malloc/free・jemalloc・mimalloc などのアロケータのメタデータを破壊します。ヒープ配置は非決定的なため、悪用では "heap grooming" や "feng shui" によって、関数ポインタ、vtable、スマートポインタの制御ブロック、重要な状態などの有用な標的を脆弱なバッファの隣に配置します。最新のアロケータはメタデータを強化し、チャンクを分離し、ガードページを挿入します。ASLR、CFI、サンドボックス、メモリ安全言語が影響をさらに抑えます。ブラウザ・カーネル・文書パーサの悪用で中心的な役割を担い、Pwn2Own 入賞例にも多く登場します。
例
- CVE-2018-4407:XNU カーネルの TCP ヒープオーバーフロー。
- Pwn2Own で繰り返し悪用された Chrome の JavaScript エンジンのヒープオーバーフロー。
関連用語
バッファオーバーフロー
メモリ安全性の欠陥で、確保済みバッファの末尾を超えて書き込みが行われ、隣接メモリが破壊されてしばしばコード実行を可能にする。
スタックオーバーフロー脆弱性
プログラムのスタック上で発生するバッファオーバーフロー。多くの場合、保存された戻りアドレスや関数ポインタを上書きして実行を奪う。
メモリ破壊
プログラムが意図したメモリ境界の外に書き込み、型安全性・制御フロー・データ整合性を損なうタイプの脆弱性を総称する用語。
解放後使用(Use-After-Free)
free 済みのメモリをプログラムが使い続けるメモリ安全性のバグ。攻撃者にオブジェクト状態の操作と制御フロー奪取を許すことが多い。
二重解放(Double Free)
同じヒープチャンクを二度解放するメモリ安全性のバグ。アロケータのメタデータが破壊され、しばしば任意コード実行を可能にする。
エクスプロイト
脆弱性を悪用して、コード実行・権限昇格・情報漏えいなど意図しない動作を引き起こすコード、データ、または手法。