レースコンディション / TOCTOU
プログラムが何かを「検査」してから「使用」するまでの間に状態が変わってしまう脆弱性(Time-Of-Check to Time-Of-Use)。攻撃者はその一瞬の隙を突く。
古典的な例はこうだ。プログラムが「このユーザーはファイルXを読めるか」を検査し、その後でXを開く。この二つの間に攻撃者がXを機密ファイルへのシンボリックリンクに差し替えると、検査は無害なファイルに対して行われたのに、実際に開かれるのは機密ファイルになる。より一般に、アトミックでない「確認してから実行」の手順は、間に状態を変えられる限り攻撃の余地がある。ほかにも、残高の確認と引き落としを並列に二回走らせる二重引き出しや、認証処理での競合などがある。
対策は操作をアトミックにすること(パスではなく、開いたハンドルを検査する)、ロックやトランザクションを使うこと、手順の間で状態が変わらないと仮定しないことである。地味だが深刻なバグの一類型である。