脆弱性
二重解放(Double Free)
別称: 二重解放脆弱性
定義
同じヒープチャンクを二度解放するメモリ安全性のバグ。アロケータのメタデータが破壊され、しばしば任意コード実行を可能にする。
二重解放は、同じポインタに対して free()/delete が複数回呼ばれることで発生します。アロケータのフリーリストや bin が不整合になり、攻撃者は以後の確保で攻撃者が影響を持つメモリや生存中オブジェクトと重複するメモリを返させることが可能になります。これは任意書き込みやコード実行へつながるプリミティブです。CWE-415 として分類され、UAF や double-fetch と共に現れることが多いです。防御策には RAII やスマートポインタによる単一所有モデル、解放後ポインタを NULL にする規律、glibc tcache や scudo など二重解放検知のあるアロケータ、AddressSanitizer での検査、メモリ安全言語の採用などがあります。
例
- CVE-2015-1322:glibc tcache の二重解放によりヒープが破壊。
- CVE-2019-19377:不正なイメージにより Linux btrfs で二重解放。
関連用語
解放後使用(Use-After-Free)
free 済みのメモリをプログラムが使い続けるメモリ安全性のバグ。攻撃者にオブジェクト状態の操作と制御フロー奪取を許すことが多い。
メモリ破壊
プログラムが意図したメモリ境界の外に書き込み、型安全性・制御フロー・データ整合性を損なうタイプの脆弱性を総称する用語。
ヒープオーバーフロー
動的に確保したメモリ上で発生するバッファオーバーフロー。アロケータのメタデータ、関数ポインタ、オブジェクトの vtable などが破壊されることが多い。
エクスプロイト
脆弱性を悪用して、コード実行・権限昇格・情報漏えいなど意図しない動作を引き起こすコード、データ、または手法。
Secure Coding
Secure Coding — definition coming soon.
脆弱性
システム、アプリケーション、または運用プロセスに存在する弱点で、攻撃者が機密性・完全性・可用性を侵害するために悪用できるもの。