La vulnérabilité « Time Of Check Time Of Use » (TOCTOU) se produit lorsqu’un programme vérifie l’état d’un objet avant de l’utiliser, mais l’état de l’objet a changé entre la vérification et l’utilisation. Cela peut entraîner des comportements inattendus ou indésirables du programme.
Exemple
Imaginez que vous écrivez un programme qui vérifie si un fichier est présent sur le disque dur avant de l’ouvrir. Cependant, entre la vérification de l’existence du fichier et l’ouverture du fichier, quelqu’un peut supprimer le fichier. Si cela se produit, votre programme essaiera d’ouvrir un fichier qui n’existe pas, ce qui entraînera une erreur.
# Programme # Attacker
-------------------------------- + --------------------------------
if (file_exist("text.txt")){ | // Le fichier existe
... | // Suppression du fichier
open("text.txt") //error | // Le fichier n existe plus
... |
}
FIX #1
Malgré sa simplicité conceptuelle, les conditions de TOCTOU sont difficiles à éviter et à éliminer. Une approche consiste à utiliser la gestion des erreurs au lieu de la pré-vérification. « Il est plus facile de demander pardon que la permission ». Le programme peut également mettre en place des mécanismes pour s’assurer la possession exclusive de la ressource.