TOCTOU【Time-Of-Check to Time-Of-Use】TOCTTOU
概要

この問題は、プログラムの処理が「確認」と「実行」の2段階に分かれていることに起因する。通常、プログラムは安全性を担保するために事前チェックを行う設計になっているが、確認を終えて実行に移るまでのわずかな時間的空白に、別のプロセスや攻撃者が対象の状態を変えてしまう可能性がある。確認した時点の状態が実行時まで維持されるという前提が崩れることで、誤作動が発生する。
例として、ファイルへの書き込み権限チェックが挙げられる。プログラムが「書き込み可能か」を確認した直後に、そのファイルの参照先が攻撃者によって別のファイルへのシンボリックリンクにすり替えられると、プログラムは権限チェックの結果を信じたまま処理を続け、本来アクセスできないはずのファイルを上書きしてしまう。情報漏洩や権限昇格といった深刻な被害につながる場合もある。
TOCTOUはレースコンディション(競合状態)の一形態である。複数のプロセスが並行動作するマルチタスク環境では、あるプロセスの処理と処理のわずかな間に別のプロセスが割り込む機会が常に存在する。処理速度が高速化した現代でも、並列処理が前提の環境である以上、この問題は原理的に生じうる。発見・再現ともに難しく、単独動作では正常に見えるコードが複数ユーザー環境で脆弱性として現れることもある。
対策の基本方針は、確認と実行の間に外部が介入できる余地をなくすことである。確認と実行をアトミック操作(原子的操作)としてひとまとまりに処理したり、オペレーティングシステム(OS)のロック機構で対象を保護したりする方法が用いられる。ファイル操作では、パス名を都度参照するのではなく、最初にファイルを開いて取得したファイル記述子を通じて以降の操作をすべて行う方法も有効で、確認した対象と操作する対象が一致し続けることを保証できる。