もう少し詳しく

解放後使用かいほうごしよう(Use-After-Free、略してUAF)とは、プログラムがコンピューターのメモリ上に確保していたデータ領域を、使い終えて「解放(不要になったと手放すこと)」したにもかかわらず、その領域を指し示す参照(ポインタ)を消し忘れ、あとから誤ってそのままアクセスしてしまう欠陥です。解放された領域は、別の処理のために再利用されることがあり、そこに攻撃者が仕込んだデータが入り込んでいると、プログラムが想定していない動作をしてしまう場合があります。ブラウザやOSなど、複雑で大規模なソフトウェアで繰り返し見つかる、代表的な欠陥の種類の一つです。

どこで使われるか

Webブラウザやオペレーティングシステム(OS)、各種アプリケーションなど、C言語やC++といったプログラミング言語で書かれた、メモリの管理を開発者自身が細かく制御するソフトウェアで見つかりやすい欠陥です。Google ChromeやApple Safari、Microsoft Windowsのセキュリティアップデートでは、ほぼ毎回のように解放後使用の脆弱性が修正項目に含まれています。

身近な例

図書館で本を返却した(メモリを解放した)のに、返却したことを忘れて棚にまだあるつもりで探しに行く場面を想像してください。実際には別の利用者がその棚に別の本を置いているかもしれず、探しに行った人は自分が思っていたのとは違う本を手に取ってしまいます。ソフトウェアの世界でも同じように、解放済みの領域を「まだ自分のデータがある」と思い込んで使い続けると、意図しないデータを読み書きしてしまう事態が起こります。

注意点

解放後使用の脆弱性は、悪用されると、ソフトウェアを異常終了させるだけでなく、攻撃者が用意した命令をブラウザやOSに実行させられる場合があり、深刻度が高く評価されやすい欠陥です。利用者の側でこの種の欠陥を直接見分ける方法はないため、ソフトウェアの開発元が公開する更新を早めに適用することが、実質的にとれる最も有効な対策になります。