Rédacteur : Heurs
Date de création : 08/07/2006
Section : Sécurité > Failles applicatives
Imprimer cet article : en noir et blanc ou en couleurs
C'est une faille encore peu exploitée mais redoutable. En effet, elle permet à n'importe quel utilisateur, sous Unix, de s'élever les droits sur un fichier. Une sécurisation a été trouvée mais comme vous le verrez elle est insufisante. A l'heure actuelle aucune protection logicielle (à ma connaissance) n'est efficace contre ce genre d'attaque.
Comme pour beaucoup de failles applicatives il nous faut un programme pour la présenter. Ce premier va juste ouvrir un fichier, si ce fichier n'existe pas il va le créer. Aprés cela, il lui arttibura des droits de lecture et écriture pour tous les utilisateurs :
Executons le programme :
Nous voyons bien que grace au chmod("fichier.txt", 0666);[/c] tous les utilisateurs peuvent écrire dans fichier.txt .
Je vais maintenant me logger en challenger et nous allons essayer d'obtenir les droits d'écriture sur valid.txt
Récapitulons. En fait, ce qu'il faudrait c'est pouvoir rediriger les actions qui sont faites sur fichier.txt vers valid.txt. Une chance pour nous : cette solution est possible, cela s'appelle des fichiers à lien symbolique. Ils se créent grace à la commande ln[/c], son utilisation est la suivante :
Le fichier "fichier.txt" pointe maintennent sur valid.txt, c'est a dire renvoie toute les actions de lecture, écritre et execution qui seront effectuées seront redirigées vers valid.txt . Donc quand ./race1 voudra attribuer des droits à fichier.txt, ils seront en fait attribués à valid.txt ;)
Et voila le tour est joué ! Nous avons maintennent les droits d'ecriture sur valid.txt :)
Face à ce problème plutot conséquent la seule solution trouvée (à ma connaissence) est de vérifier si le fichier existe bien avant de le créer. Si il existe, il n'y aura donc pas besoin de lui attribuer les droits. En revanche si il n'existe pas, on le créra et on lui attriburas ses droits. Ansi, si un lien symbolique à été fait, le fichier existera et donc aucun droit suplémentaire ne lui seras attribué. Voici un petit programme ayant se fonctionnement :
Testons maintenant ceci :
La sécurité à l'air de bien marcher, si un fichier est trouvé on ne fait rien du tout.
Et oui, remettons nous a la place du pirate, nous allons déja débuger ./verif_file avant de l'attaquer :
Je vous ai mis en rouge les deux fonctions importantes, a savoir le test du fichier et sa création. Disons qu'entre ces deux syscall nous créons un lien symbolique... l'execution du programme ressemblera à ca :
J'ai donc codé un ptit programme qui tournera en boucle pour suprimer fichier.txt et en créer un lien symbolique juste derrière :
On va maintenant laisser tourner en boucle les deux programmes pour tenter de faire se chevaucher les deux instructions... Pour cela on ouvre plusieurs fenètres, la 1ère :
Et le 2ème :
Au bout de quelques minutes (2 ou 3) nous stoppons tout et admirons le résultat :
Si les attribus n'ont pas changés relancez les deux commandes.
A ma connaissance il n'y a donc pas de protection efficace contre les races conditions, le meilleur moyen de s'en protéger reste de limiter un maximum d'utilisation de chmod. Coté hacker cette faille offre de bonnes perspectives d'attaques car elle est encore relativement présente.