Entry № 391
二重解放(Double Free)
二重解放(Double Free) とは何ですか?
二重解放(Double Free)同じヒープチャンクを二度解放するメモリ安全性のバグ。アロケータのメタデータが破壊され、しばしば任意コード実行を可能にする。
二重解放は、同じポインタに対して free()/delete が複数回呼ばれることで発生します。アロケータのフリーリストや bin が不整合になり、攻撃者は以後の確保で攻撃者が影響を持つメモリや生存中オブジェクトと重複するメモリを返させることが可能になります。これは任意書き込みやコード実行へつながるプリミティブです。CWE-415 として分類され、UAF や double-fetch と共に現れることが多いです。防御策には RAII やスマートポインタによる単一所有モデル、解放後ポインタを NULL にする規律、glibc tcache や scudo など二重解放検知のあるアロケータ、AddressSanitizer での検査、メモリ安全言語の採用などがあります。
● 例
- 01
CVE-2015-1322:glibc tcache の二重解放によりヒープが破壊。
- 02
CVE-2019-19377:不正なイメージにより Linux btrfs で二重解放。
● よくある質問
二重解放(Double Free) とは何ですか?
同じヒープチャンクを二度解放するメモリ安全性のバグ。アロケータのメタデータが破壊され、しばしば任意コード実行を可能にする。 サイバーセキュリティの 脆弱性 カテゴリに属します。
二重解放(Double Free) とはどういう意味ですか?
同じヒープチャンクを二度解放するメモリ安全性のバグ。アロケータのメタデータが破壊され、しばしば任意コード実行を可能にする。
二重解放(Double Free) からどのように防御しますか?
二重解放(Double Free) に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
二重解放(Double Free) の別名は何ですか?
一般的な別名: 二重解放脆弱性。