Path traversal¶
La traversée de répertoires (path traversal, ou directory traversal) permet à un attaquant de lire — et parfois d'écrire — des fichiers situés hors du répertoire prévu par l'application. La faille apparaît lorsqu'une application construit un chemin de fichier à partir d'une entrée utilisateur sans la valider correctement. En insérant des séquences de remontée d'arborescence (../), on s'échappe du dossier autorisé pour atteindre des fichiers sensibles : code source, fichiers de configuration, ou fichiers système comme /etc/passwd.
Le principe de base consiste à fournir une suite de ../ suffisante pour remonter jusqu'à la racine, puis à descendre vers le fichier visé. La plupart des applications mettent toutefois en place des défenses — filtrage des séquences, validation de l'extension — qu'il faut savoir contourner.
Contournements courants¶
Quand une application filtre la séquence ../, plusieurs variantes permettent souvent de passer.
Filtrage non récursif. Si l'application retire les occurrences de ../ une seule fois, sans répéter l'opération, une séquence imbriquée laisse un ../ valide après le passage du filtre :
une fois le ../ central retiré, il reste ../.
Encodages. Le caractère de remontée admet de nombreuses représentations encodées, utiles quand le filtre ne reconnaît que la forme littérale. Selon l'étape où la valeur est décodée, l'une de ces formes franchit la validation :
Le double encodage (%252e) est particulièrement efficace lorsque la validation et l'utilisation du chemin ne décodent pas l'entrée au même moment.
Octet nul. L'octet nul (%00) marque, dans certaines fonctions de bas niveau, la fin d'une chaîne. Si la sécurité repose sur la vérification de l'extension du fichier, on place l'octet nul juste avant l'extension attendue : la validation voit l'extension légitime, mais la lecture du fichier s'arrête avant elle :
Aide-mémoire¶
| Défense rencontrée | Contournement |
|---|---|
Filtrage simple de ../ |
Séquence imbriquée ....// (non récursif) |
| Filtrage de la forme littérale | Encodage simple ou double (%2e%2e%2f, %252e...) |
| Filtrage agressif | Encodages multi-octets (..%c0%af) |
| Validation de l'extension | Octet nul %00 avant l'extension attendue |
Ces techniques se combinent volontiers : face à une défense robuste, mêler une remontée imbriquée et un double encodage est souvent ce qui finit par passer.