Aller au contenu

TOCTOU

TOCTOU (de l'anglais time of check to time of use, « du moment du contrôle au moment de l'usage ») : condition de concurrence où un programme vérifie une propriété (un fichier n'existe pas, il est inscriptible, ce n'est pas un lien symbolique), puis agit en s'y fiant ; entre les deux, un autre processus peut changer l'état, par exemple remplacer le fichier par un lien vers /etc/shadow. Le défaut est répertorié sous CWE-367.

La parade n'est pas de vérifier plus, mais de faire l'opération puis de tester son résultat, de façon atomique : créer un fichier temporaire avec mktemp plutôt que tester un nom puis l'ouvrir, prendre un verrou par flock plutôt que tester l'existence d'un fichier, travailler dans un répertoire que l'on est seul à pouvoir modifier. Dans un script, [[ -e $f ]] || touch "$f" ou [[ -w $f ]] && echo ... > "$f" sont des TOCTOU en miniature.

Dans les cours

Voir aussi