Race Condition — Conditions de course (TOCTOU)

Concepts Exploit

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.