La traversée de répertoire fait également partie des grands classiques du poutrage de site. Dans son principe, il s’agit d’accéder à un répertoire normalement inaccessible. Comme souvent, une validation insuffisante des entrées en est souvent la cause.
Entrée ratée
Prenons une URL qui nous permettrait d’accéder à un fichier stocké par notre site web favori. Cela pourrait être :
https://monsitefavori.com/fichier?id=555
Si dans notre joli code Python on écrit simplement :
...
filename = request.GET.get("id", None)
file = open(os.path.join("/files/", filename))
Que se passera-t-il si on tripatouille un peu le paramètre id
? Déjà on peut ouvrir un autre fichier, si les droits ne sont pas vérifiés correctement : l’utilisateur courant pourrait lire un fichier normalement destiné à un autre.
Si en plus on bidouille un paramètre du type id=../../../../etc/passwd
et que le serveur web a le droit en lecture sur ce fichier, voilà-t-y pas qu’on pourrait se retrouver à afficher ce fichier si intéressant pour un attaquant ! On peut évidemment multiplier les exemples.
Contre-mesures
La meilleure des solutions est… le filtrage des paramètres. Souvenons-nous qu’il ne faut jamais faire confiance à une saisie utilisateur. On peut aussi corriger le chemin d’accès en le contrôlant lors de la saisie et avant l’ouverture du fichier, paramétrer le serveur web pour limiter les accès au répertoires courants, etc. Plus que les saisies, ce sont bien toutes les entrées qu’il faut surveiller, car une requête POST peut tout aussi bien être interceptée et modifiée, voire recréée de toute pièce !