Race Condition — Conditions de course (TOCTOU)
★★★★★
Principe
Une race condition survient quand le résultat dépend de l'ordre/timing d'exécution de plusieurs threads/processus. Le cas classique TOCTOU (Time-Of-Check to Time-Of-Use) exploite l'écart entre la vérification d'une ressource et son utilisation.
Exemple TOCTOU
// VULNÉRABLE : vérif puis usage non atomiques
if (access("/tmp/file", W_OK) == 0) { // check (droits réels)
// <-- fenêtre de course : remplacer le fichier par un lien
fd = open("/tmp/file", O_WRONLY); // use
}
// Exploit : symlink /tmp/file -> /etc/passwd entre les deux Exploitation & défense
On gagne la course en répétant l'opération en parallèle (souvent des milliers de tentatives). Défenses : opérations atomiques (open avec O_NOFOLLOW, openat), verrous, ne pas se fier au nom de fichier entre check et use, et descripteurs plutôt que chemins.