Cybreach Consulting Prendre RDV
Retour aux articles
Vulnérabilités

Traversée de répertoire et indexation de répertoire

La traversée de répertoire (path traversal ou directory traversal) se produit quand une application construit un chemin de fichier en incluant des données contrôlées par l'utilisateur sans les valider. Les séquences ../ permettent de remonter dans l'arborescence des répertoires. Un attaquant qui contrôle une partie du chemin peut accéder à des fichiers en dehors du répertoire autorisé.

Exemple de traversée de répertoire

# Endpoint vulnérable : /api/files?name=report.pdf
GET /api/files?name=../../../etc/passwd

# L'application construit :
path = "/var/app/uploads/" + req.query.name
# = "/var/app/uploads/../../../etc/passwd"
# = "/etc/passwd"

# Le serveur retourne le contenu de /etc/passwd

Encodages et contournements

Les filtres naïfs qui cherchent ../ sont contournables via différents encodages. Quelques variantes : ..%2F (URL encoding de /), ..%5C (backslash sur Windows), ....// (double traversal si le filtre supprime une occurrence), %2e%2e%2f (double encoding). La canonisation du chemin avant validation est obligatoire pour couvrir ces cas.

Prévention : canonisation et validation du préfixe (Node.js)

const path = require('path');
const fs = require('fs');

const BASE_DIR = '/var/app/uploads';

function safeReadFile(userInput) {
  // Canoniser le chemin (résout ../)
  const fullPath = path.resolve(BASE_DIR, userInput);

  // Vérifier que le chemin résolu est bien dans le répertoire autorisé
  if (!fullPath.startsWith(BASE_DIR + path.sep)) {
    throw new Error('Accès refusé');
  }

  return fs.readFileSync(fullPath);
}

Indexation de répertoire

L'indexation de répertoire (directory listing) expose la liste des fichiers d'un répertoire quand aucun fichier index (index.html, index.php) n'est présent et que le serveur web est configuré pour générer automatiquement cette liste. Cela révèle la structure de l'application, les fichiers de sauvegarde, les fichiers de configuration et toute ressource qui n'était pas destinée à être accessible.

Désactivation de l'indexation de répertoire

# Apache (.htaccess ou httpd.conf)
Options -Indexes

# nginx
autoindex off;  # Déjà off par défaut, vérifier qu'il n'a pas été activé

# IIS : dans web.config
<configuration>
  <system.webServer>
    <directoryBrowse enabled="false" />
  </system.webServer>
</configuration>

Récapitulatif

  1. Canoniser les chemins avant validation : utiliser path.resolve() ou équivalent, puis vérifier que le résultat commence par le répertoire autorisé
  2. Ne jamais utiliser directement les noms de fichiers fournis : utiliser des identifiants opaques mappés côté serveur
  3. Désactiver l'indexation de répertoire : Options -Indexes (Apache), autoindex off (nginx)

Une question après la lecture ?

Votre application construit des chemins de fichiers à partir de données utilisateur ? Envoyez un message.

Ou réservez directement un cadrage de 30 minutes

Réserver un appel