Je vais essayer d'expliquer le principe du race condition.
D'un côté, le programme "nettoyeur" a pour mission de supprimer les dossiers et fichiers qui sont plus vieux que 1 mois en dessous de /var/spool/pad (par exemple). Les liens symboliques ne sont pas suivis mais sont supprimés. Ce programme tourne en root.
/var/spool/pad/ contient un répertoire par utilisateur, comme ceci :
D'un autre côté, les utilisateurs font un peu ce qu'il veulent dans leurs dossiers, mais ne peuvent en sortir.
Le nettoyeur va faire son scan de temps en temps et supprimer les vieux fichiers, en respectant la règle du mieux qu'il peut. Horreur, il a supprimé des fichiers en dehors de /var/spool/pad/alice !
Passons la scène au ralenti sur un IBM 8088 à 10MHz (1979) :
11h22 - Le nettoyeur scanne /var/spool/pad/alice et trouve un dossier caca et un fichier pipi (alice est un peu sénile) qui ont plus d'un mois. Il note dans son carnet qu'il faudra les effacer. Etc pour les autres dossiers.
11h23 - Alice supprime le dossier caca et le remplace par un lien vers /usr/bin/. (Elle n'est pas si sénile que ça semble-t-il).
11h24 - Confiant, le nettoyeur rentre dans le dossier caca et supprime son contenu, qui est en fait /usr/bin.
11h24 aussi - Fin du jeu :'( .
Le principe n'a rien de spécifique à Rust. C'est un bug, qui provoque un trou de sécurité.
[^] # Re: La description n'est pas claire je trouve.
Posté par cg . En réponse au journal Une CVE dans le compilateur rust. Évalué à 10. Dernière modification le 21 janvier 2022 à 21:46.
Je vais essayer d'expliquer le principe du race condition.
D'un côté, le programme "nettoyeur" a pour mission de supprimer les dossiers et fichiers qui sont plus vieux que 1 mois en dessous de
/var/spool/pad(par exemple). Les liens symboliques ne sont pas suivis mais sont supprimés. Ce programme tourne en root./var/spool/pad/contient un répertoire par utilisateur, comme ceci :D'un autre côté, les utilisateurs font un peu ce qu'il veulent dans leurs dossiers, mais ne peuvent en sortir.
Le nettoyeur va faire son scan de temps en temps et supprimer les vieux fichiers, en respectant la règle du mieux qu'il peut. Horreur, il a supprimé des fichiers en dehors de
/var/spool/pad/alice!Passons la scène au ralenti sur un IBM 8088 à 10MHz (1979) :
11h22 - Le nettoyeur scanne
/var/spool/pad/aliceet trouve un dossiercacaet un fichierpipi(alice est un peu sénile) qui ont plus d'un mois. Il note dans son carnet qu'il faudra les effacer. Etc pour les autres dossiers.11h23 - Alice supprime le dossier
cacaet le remplace par un lien vers/usr/bin/. (Elle n'est pas si sénile que ça semble-t-il).11h24 - Confiant, le nettoyeur rentre dans le dossier
cacaet supprime son contenu, qui est en fait/usr/bin.11h24 aussi - Fin du jeu :'( .
Le principe n'a rien de spécifique à Rust. C'est un bug, qui provoque un trou de sécurité.