CyberGlossary

脆弱性

二重解放(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 で二重解放。

関連用語