Qu’est-ce que la traversée de répertoire ?

La traversée de répertoire ( traversée de chemin ) est une vulnérabilité Web qui permet à un pirate malveillant d’accéder et d’afficher des fichiers situés dans le système de fichiers du serveur Web, mais en dehors du dossier racine des documents de l’application Web.


Gravité: sévérité moyenne
Prévalence:découvert rarement
Portée: n’apparaît que dans les logiciels liés au Web
Impact technique : accès aux informations sensibles
Conséquences dans le pire des cas : suivi d’autres attaques
Solution rapide: ne pas utiliser les noms de fichiers de l’entrée de l’utilisateur

Comment fonctionne la traversée de répertoire ?

Les fichiers de code source qui composent un site Web ou une application Web sont situés sur un système de fichiers de serveur Web à un emplacement appelé racine du document Web (dossier racine Web). La racine principale du document contient généralement des sous-répertoires pour chaque site Web et application Web. Par exemple, sur un serveur Linux/UNIX avec le logiciel de serveur Web Apache, le dossier racine par défaut est /var/www/ et sur un serveur Microsoft Windows avec IIS, la racine du document par défaut est C:\inetpub\wwwroot .

Les développeurs ont parfois besoin d’écrire du code d’application qui accède directement aux fichiers stockés quelque part dans le répertoire racine du document ou dans un sous-répertoire. Par exemple, un développeur peut souhaiter stocker des images téléchargées par des utilisateurs, puis autoriser d’autres utilisateurs à les afficher. Un paramètre d’entrée utilisateur contiendrait alors le nom du fichier image de /var/www/my_app/images/ , et l’application ouvrirait une image particulière et l’afficherait à l’écran.

Les vulnérabilités de traversée de répertoire se produisent lorsqu’un utilisateur malveillant peut inclure un chemin de fichier arbitraire dans l’entrée utilisateur et utiliser des caractères spéciaux pour accéder aux fichiers à partir d’un répertoire différent sur le serveur. Les caractères spéciaux utilisés pour cela sont des combinaisons point-point-barre oblique : ../ pour Linux/UNIX ou ..\ pour Windows. Ces combinaisons permettent d’accéder aux répertoires parents à partir d’un chemin relatif.

Bien que la traversée de répertoires soit une vulnérabilité typique des applications Web, elle se trouve le plus souvent dans les logiciels Web intégrés, par exemple, les logiciels de gestion des périphériques ou les interfaces d’administration à distance. Certaines vulnérabilités de traversée de chemin sont même attribuées aux serveurs Web eux-mêmes.

Traversée de répertoire vs inclusion de fichiers locaux (LFI)

Les vulnérabilités de traversée de chemin sont souvent confondues avec l’inclusion de fichier local (LFI) , qui est une vulnérabilité similaire mais distincte :

  • LFI signifie que l’attaquant peut inclure des fichiers de code source ou afficher des fichiers situés dans le répertoire racine du document et ses sous-répertoires. Cela ne signifie pas que l’attaquant peut atteindre en dehors de la racine du document.
  • La traversée de répertoire signifie que l’attaquant peut accéder aux fichiers situés en dehors du répertoire racine du document, mais l’attaque n’implique pas l’exécution de code malveillant.

Pour ajouter à la confusion, les deux apparaissent très souvent ensemble et ont également exactement la même cause : le développeur permettant aux chemins d’accès aux fichiers locaux d’être passés dans le cadre de l’entrée de l’utilisateur.

Exemple d’attaque par traversée de répertoire

Vous trouverez ci-dessous un exemple simple de code source PHP avec une vulnérabilité de traversée de répertoire et un vecteur d’attaque de traversée de chemin sur une application qui inclut ce code.

Code vulnérable

Le développeur d’une application PHP souhaite que l’utilisateur puisse lire des poèmes stockés dans des fichiers texte sur le serveur Web. Ces poèmes dans des fichiers texte sont téléchargés par d’autres utilisateurs et stockés dans un répertoire de poèmes relatif – le chemin absolu vers le répertoire d’images est /var/www/my_app/poems/ . Ce qui suit est un extrait de code du fichier poems/display.php , qui affiche le poème dans le cadre du code HTML.

<?PHP 
  $file = $_GET["file"];
    $handle = fopen($file, 'r');
    $poem = fread($handle, 1);
    fclose($handle);
    echo $poem;
?>
 

Comme vous pouvez le voir, le nom du fichier provient directement de la requête HTTP GET reçue de l’utilisateur. Par conséquent, vous pouvez accéder et afficher un poème appelé poem.txt en utilisant l’URL suivante :

http://example.com/my_app/display.php?file=poem.txt

Le vecteur d’attaque

L’attaquant abuse de ce script en manipulant la requête GET à l’aide de la charge utile suivante :

http://example.com/my_app/display.php?file=../../../../etc/passwd

Le script display.php remonte quatre niveaux dans la structure de répertoires jusqu’au répertoire racine Linux, puis au répertoire /etc/ , puis expose le fichier passwd , qui contient tous les noms des utilisateurs du système d’exploitation sur ce serveur :

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
(...)
 

Conséquences potentielles d’une attaque par traversée de répertoire

La seule conséquence directe d’une attaque par traversée de répertoire est l’accès à des informations sensibles. Ces informations sensibles peuvent être utilisées directement ou pour suivre d’autres attaques. Si des informations sensibles sont stockées dans des fichiers sur le serveur, par exemple des photos confidentielles de documents ou des données sensibles dans des fichiers texte, l’attaquant peut trouver et accéder à ces fichiers.

Dans d’autres cas, les attaques par traversée de répertoire sont utilisées pour accéder à des fichiers typiques qui existent sur de nombreux serveurs Web. Les attaquants peuvent ensuite utiliser les informations de ces fichiers pour trouver d’autres méthodes d’attaque appsec, ce qui peut finalement conduire à une compromission complète du serveur. 

Étant donné que le serveur Web et ses applications accèdent aux fichiers en utilisant les autorisations limitées du compte système utilisé pour le processus du serveur Web, certains fichiers sensibles tels que /etc/shadow (fichier de mots de passe Linux/UNIX avec hachages), ainsi que des répertoires restreints, sont généralement pas accessible à la suite d’une attaque par traversée de répertoire.

Voici quelques fichiers qui sont souvent la cible d’attaques par traversée de répertoires sur des serveurs Web basés sur Linux. Tous ces fichiers sont toujours lisibles par tous les utilisateurs du système d’exploitation :

  • /proc/version – contient la version du noyau Linux exécuté sur le système. Ces informations permettent à l’attaquant de trouver des exploits pour ce noyau Linux particulier.
  • /proc/mounts – contient une liste des systèmes de fichiers actuellement montés. Cela permet à l’attaquant d’essayer d’accéder à ces systèmes de fichiers, par exemple, via des attaques de suivi de traversée de répertoire.
  • /proc/net/arp – contient la table du protocole de résolution d’adresse (ARP), qui pourrait être utilisée pour découvrir d’autres systèmes connectés (cibles d’attaque potentielles).
  • /proc/net/tcp et /proc/net/udp – contiennent des listes de connexions TCP/UDP en cours, qui pourraient être utilisées pour découvrir d’autres systèmes connectés (encore une fois, des cibles d’attaque potentielles).

Notez que la traversée de répertoire est très facile à automatiser via une technique appelée fuzzing, qui consiste à envoyer automatiquement des charges utiles d’attaque typiques à la cible. Les attaquants peuvent utiliser des applications de fuzzing dédiées telles que DotDotPwn, donc très peu de connaissances techniques sont nécessaires pour une telle attaque.

Exemples de vulnérabilités connues de traversée de répertoire

  • CVE-2021-41773 dans le serveur Apache HTTP Server 2.4.49 pourrait permettre à un pirate informatique malveillant d’intensifier l’attaque en exécution de code à distance . Il s’agit d’un exemple très récent de 2021, qui prouve également que malgré le fait que la traversée de répertoires est une vulnérabilité de gravité moyenne, elle peut conduire aux attaques les plus graves.
  • CVE-2018-13379 est une vulnérabilité de traversée de répertoire découverte en 2018 dans Fortinet FortiOS – le système d’exploitation des pare-feu FortiGate. Cette vulnérabilité a même été répertoriée par la CISA en 2021 comme étant l’une des principales vulnérabilités régulièrement exploitées , ce qui prouve que même une vulnérabilité vieille de 3 ans est utilisée pour de nombreuses attaques réussies aujourd’hui.
  • En 2015, le chercheur en sécurité Kyle Lovett a découvert plus de 700 000 routeurs présentant des vulnérabilités de traversée de répertoires dans leurs interfaces Web administratives. Ces routeurs, populaires parmi les consommateurs et les PME, provenaient de différents fabricants mais avaient une chose en commun : ils utilisaient tous le micrologiciel de Shenzhen Gongjin Electronics. Cette faille de traversée de répertoire a permis à l’attaquant d’utiliser le script webproc.cgi pour accéder aux fichiers config.xml , qui contenaient des hachages de mot de passe administrateur faciles à déchiffrer, des noms d’utilisateur/mots de passe de connexion ISP, des mots de passe Wi-Fi, ainsi que le client et informations d’identification du serveur pour le protocole de gestion à distance TR-069 utilisé par certains FAI.
  • 2004 marque l’un des plus anciens cas connus liés à la traversée de répertoires. Un an plus tard, Daniel Cuthbert a été reconnu coupable d’avoir utilisé la traversée de répertoires pour pirater le site Web donate.bt.com .

Comment détecter les vulnérabilités de traversée de répertoire ?

La meilleure façon de détecter les vulnérabilités de traversée de répertoire dépend de si elles sont déjà connues ou inconnues.

  • Si vous n’utilisez que des logiciels commerciaux ou open source et que vous ne développez pas de logiciels vous-même, vous trouverez peut-être qu’il suffit d’identifier la version exacte du système ou de l’application que vous utilisez. Si la version identifiée est vulnérable à la traversée de répertoire, vous pouvez supposer que vous êtes sensible à cette vulnérabilité de traversée de répertoire. Vous pouvez identifier la version manuellement ou utiliser un outil de sécurité approprié, tel qu’un logiciel d’analyse de la composition logicielle (SCA) dans le cas d’applications Web ou un analyseur de réseau dans le cas de systèmes et d’applications en réseau.
  • Si vous développez votre propre logiciel ou souhaitez potentiellement trouver des vulnérabilités de traversée de répertoire inconnues (jours zéro) dans des applications connues, vous devez être en mesure d’exploiter avec succès la vulnérabilité de traversée de répertoire pour être certain qu’elle existe. Dans de tels cas, vous devez soit effectuer des tests d’intrusion manuels avec l’aide de chercheurs en sécurité ou de testeurs d’intrusion, soit utiliser un outil de test de sécurité des applications (scanner de vulnérabilité Web) qui peut exploiter automatiquement les vulnérabilités.

Comment prévenir les vulnérabilités de traversée de répertoire dans les applications Web ?

Il existe plusieurs méthodes qui vous permettent d’empêcher les vulnérabilités de traversée de répertoire dans votre code :

  1. Évitez de transmettre des noms de fichiers dans l’entrée utilisateur. Cela inclut non seulement l’entrée directe de l’utilisateur, mais également d’autres sources de données qui peuvent être manipulées par l’attaquant, par exemple les cookies.
  2. Si votre application nécessite que vous utilisiez des noms de fichiers à partir de l’entrée de l’utilisateur et qu’il n’y a aucun moyen de contourner cela, créez une liste blanche de fichiers sûrs.
  3. Si vous ne pouvez pas créer de liste blanche parce que vous utilisez des noms de fichiers arbitraires, par exemple, si les utilisateurs téléchargent les fichiers, stockez les noms de fichiers dans la base de données et utilisez les identificateurs de ligne de table dans l’entrée utilisateur. Vous pouvez également utiliser des mappages d’URL pour identifier les fichiers sans risque de traversée de chemin.

Les méthodes ci-dessus sont disponibles dans tous les langages de programmation et, par conséquent, chaque développeur peut facilement prévenir les vulnérabilités de traversée de répertoire en utilisant des techniques de codage sécurisées. Il n’y a aucune excuse pour laisser votre application vulnérable à la traversée de répertoires.

Remarque : n’utilisez pas de liste noire, d’encodage ou de méthodes de validation des entrées telles que le filtrage pour empêcher la traversée de répertoires. Par exemple, n’essayez pas de limiter ou d’imposer des extensions de fichiers ou de bloquer des séquences de caractères spéciaux. Les attaquants peuvent utiliser diverses astuces, telles que l’encodage d’URL, pour contourner ces filtres.

Comment atténuer les attaques par traversée de répertoire ?

Les méthodes pour atténuer les attaques par traversée de répertoire diffèrent selon le type de logiciel :

  • Dans le cas d’applications Web personnalisées, vous pouvez atténuer les attaques par traversée de répertoire en exécutant votre application Web dans un environnement limité, ce qui est très courant pour les API Web. Par exemple, l’exécution de votre application dans un conteneur Docker séparé limitera le nombre de fichiers auxquels l’attaquant peut accéder et limitera l’effet potentiel de l’accès aux informations système. 
  • Si vous ne pouvez pas exécuter d’applications Web personnalisées dans un conteneur séparé, vous pouvez configurer le contrôle d’accès de votre serveur Web pour refuser complètement l’accès à tous les répertoires parents. Vous pouvez le faire apparaître aux applications Web comme si la racine du document était la racine du système de fichiers, ce qui empêcherait l’attaquant de remonter dans l’arborescence des répertoires.
  • Dans le cas de traversées de répertoires connues dans des logiciels tiers, comme par exemple un logiciel d’administration pour les routeurs matériels et les pare-feu, vous devez vérifier les derniers avis de sécurité pour un correctif et mettre à jour vers une version non vulnérable.

Dans le cas de traversées de répertoires zero-day dans un logiciel tiers, vous pouvez appliquer des règles WAF (pare-feu d’application Web) temporaires pour l’atténuation. Cependant, cela ne fait que rendre la traversée du répertoire plus difficile à exploiter et n’élimine pas le problème.

La traversée de répertoire (traversée de chemin) est une vulnérabilité Web qui permet à un pirate malveillant d’accéder et d’afficher des fichiers situés dans le système de fichiers du serveur Web, mais en dehors du dossier racine des documents de l’application Web.

La seule conséquence directe d’une attaque par traversée de répertoire est l’accès à des informations sensibles. Ces informations sensibles peuvent être utilisées directement ou pour suivre d’autres attaques utilisant l’élévation de privilèges.

Pour éviter la traversée de répertoires et de nombreuses autres vulnérabilités, suivez des habitudes de programmation sécurisées et ne faites jamais confiance aux entrées de l’utilisateur. Si vous devez utiliser des noms de fichiers, utilisez une liste blanche de noms et d’emplacements autorisés.

ClassificationIDENTIFIANT
CAPEC126
CWE23
WASC33
OWASP 2021A1
{"cpt":"service","style":"9","columns":"3","show":"6","order":"DESC","orderby":"DESC"}

Nos Services en Cybersécurité

Protégez-vous maintenant !

Forfait Évaluation de la surface d’attaque

La cible de cette évaluation de la surface d’attaque est les ressources réseau, les systèmes et les terminaux. Il n’y a pas de ciblage des membres ou des employés des organisations à des fins d’ingénierie sociale.

Forfait Évaluation de la vulnérabilité

Nous sommes en mesure de fournir des évaluations de vulnérabilité des applications web , des serveurs connectés à Internet et des gammes de réseaux connectés à Internet .

Analyse de vulnérabilité

Cycuri propose des analyses de vulnérabilité ponctuelles ou régulières de votre périmètre externe, de vos applications Web ou de votre réseau interne.

Forfait Évaluation WordPress

Nos services d’évaluation WordPress professionnelle sont populaires auprès de tous ceux qui souhaitent un examen par un tiers indépendant de leur posture de sécurité.

Test d’intrusion d’application Web

Que votre application Web soit destinée aux employés, B2B ou B2C, il existe un niveau de confiance inhérent qui est supposé lorsque les utilisateurs sont autorisés à entrer, naviguer et utiliser des applications et/ou des portails d’applications.

Test d’intrusion Black-Box externe

Un test d’intrusion externe Black-Box imite les actions d’un adversaire réel en tentant d’exploiter les faiblesses de la sécurité du réseau sans les dangers d’une menace réelle.

Traversée de répertoire