Skip to content

TOCTOU

TOCTOUとは、Time-of-check to time-of-useの頭文字を繋げたもので、検査のタイミングと実際に使われるときのタイミングでずれている場合に、途中で細工されてしまって攻撃対象となる事象のことをあらわす。

例えば

n = readlink(file, buf, sizeof buf);
buf[n] = '\0';
if(strstr(buf, ".."))
sysfatal("bad path")
fd = open(file, O_RDONLY);
// ここからfdを参照するコードが続く

この以下の疑似コードでは、readlink から戻ってきたあとから open するまでの間にシンボリックリンクが作り替えられてしまって ../ を含むような細工をされる可能性がある。Goのos: safer file open functionsでは、openatRESOLVE_NO_SYMLINKS による対策を紹介していた。

もっとシンプルな例ではファイルの存在確認をした直後に、同名のファイルを作られてしまう等もある。