CWE-22 : traversée de chemin, le nom de fichier qui sort du dossier
- Accueil
- Référentiels & catalogues
- Cwe
- CWE-22 : traversée de chemin, le nom de fichier qui sort du dossier
CWE-22 : traversée de chemin, le nom de fichier qui sort du dossier
Section intitulée « CWE-22 : traversée de chemin, le nom de fichier qui sort du dossier »Sixième du CWE Top 25 2025. Son libellé officiel, Improper Limitation of a Pathname to a Restricted Directory (‘Path Traversal’), se traduit par « limitation incorrecte d’un chemin d’accès à un répertoire restreint ». Le catalogue enregistre trois appellations usuelles (path traversal, directory traversal et la coquille devenue courante path transversal), ce qui est une façon élégante de reconnaître que personne n’emploie le nom officiel.
Un vestiaire accepte de rendre le manteau correspondant au numéro qu’on lui présente. Si l’on présente « 14, puis sortez du vestiaire, montez à l’étage et rapportez le dossier du directeur », le vestiaire obéit, car il n’a jamais eu pour consigne de refuser les itinéraires. CWE-22 décrit ce vestiaire.
→ Lire l’explication complète de la marmotte
Ce que la classe recouvre exactement
Section intitulée « Ce que la classe recouvre exactement »Le produit utilise une entrée externe pour construire un chemin censé désigner un fichier situé sous un répertoire parent restreint, mais ne neutralise pas correctement les éléments spéciaux qui permettent au chemin de se résoudre ailleurs.
Deux points de la définition sont souvent mal lus. D’abord, le défaut n’est pas « accepter un nom de fichier venu de l’extérieur » : c’est un besoin légitime, que toute application de téléchargement satisfait. Le défaut est de ne pas garantir que le chemin résolu reste dans le périmètre voulu. Ensuite, « éléments spéciaux » ne désigne pas seulement la séquence ../ : un chemin absolu, un lien symbolique, un encodage d’URL, un encodage double, une séquence valide en UTF-8 mais inattendue, un séparateur propre à un autre système d’exploitation produisent tous le même résultat. C’est pourquoi les filtres qui cherchent une chaîne de caractères précise échouent : ils interdisent une écriture, pas une destination.
La classe couvre la lecture comme l’écriture. En lecture, elle donne accès à des fichiers de configuration, des clés, des secrets. En écriture, elle permet de déposer un fichier à un emplacement choisi, ce qui conduit régulièrement à l’exécution de code : raison pour laquelle le catalogue note qu’elle peut précéder CWE-668, l’exposition d’une ressource à la mauvaise sphère.
Sa place dans l’arbre
Section intitulée « Sa place dans l’arbre »CWE-22 est une base, fille de la classe CWE-706, « usage d’un nom ou d’une référence incorrectement résolus ». Ce parent dit l’essentiel du problème : la faiblesse n’est pas dans le nom fourni, mais dans l’écart entre le nom tel qu’il a été vérifié et la ressource à laquelle il aboutit une fois résolu par le système de fichiers.
Deux entrées filles la précisent, et leur distinction sert en pratique :
CWE-23, la traversée relative : le chemin contient des séquences de remontée, et le défaut tient à ce que la résolution se fasse après la vérification ;CWE-36, la traversée absolue : l’entrée est un chemin complet, qui ignore purement et simplement le répertoire de base. Le filtre anti-../le plus consciencieux ne voit rien passer, et pour cause.
Une confusion fréquente vaut d’être levée : cette classe n’est pas celle du contournement de contrôle d’accès sur un proxy. Lorsqu’un intermédiaire et un serveur d’arrière-plan normalisent différemment un chemin, le défaut se code autrement, même si le résultat se ressemble : l’un trompe un contrôle réseau, l’autre sort d’un répertoire.
Pourquoi elle est si haut
Section intitulée « Pourquoi elle est si haut »Parce que tout logiciel manipule des fichiers. Serveurs web, systèmes de publication, outils de sauvegarde, lecteurs d’archives, interfaces d’administration d’équipements : la surface est au moins aussi large que celle des injections, et la correction y est moins mécanique qu’une requête paramétrée.
Parce que les archives sont un vecteur à part entière. Un fichier d’archive peut contenir des entrées dont le nom est un chemin de remontée ; le programme qui l’extrait sans vérifier écrit alors où l’archive le demande. Ce cas particulier alimente régulièrement le flux de vulnérabilités publiées, dans des bibliothèques d’extraction utilisées par des milliers de produits.
Parce que les correctifs sont souvent incomplets. L’histoire récente des serveurs d’applications et des équipements de réseau privé virtuel abonde en vulnérabilités de ce type corrigées, puis contournées par un encodage différent, puis corrigées à nouveau. Chaque tour de manège produit un nouvel identifiant, et donc de nouveaux points dans un classement bâti sur le compte des vulnérabilités.
Le mécanisme, et où le site le traite
Section intitulée « Le mécanisme, et où le site le traite »Le site traite le sujet dans comment corriger une attaque path traversal, qui décrit la résolution des chemins, les contournements par encodage et la bonne façon de vérifier : canonicaliser d’abord, comparer ensuite. Rien à ajouter ici sur le mécanisme.
Deux renvois utiles pour les cas voisins : l’upload de shell déguisé montre ce que devient une traversée en écriture quand le fichier déposé est interprété par le serveur, et la confusion de préfixe de chemin devant un proxy illustre la même famille de défauts de résolution appliquée à un contrôle d’accès plutôt qu’à un système de fichiers.
Ce qu’une équipe en fait
Section intitulée « Ce qu’une équipe en fait »Ne jamais construire un chemin par concaténation. La règle pratique tient en trois gestes : joindre le nom au répertoire de base, demander au système le chemin canonique du résultat, vérifier que ce chemin canonique commence bien par le répertoire de base canonique. La vérification porte sur la destination, jamais sur la chaîne fournie.
Préférer un identifiant opaque au nom de fichier. Quand l’application sert des documents, un numéro ou un identifiant aléatoire associé au fichier dans une table supprime la classe entière : il n’y a plus de chemin à valider, puisque l’utilisateur n’en fournit plus.
Isoler le processus. Un service qui n’a accès qu’à son propre répertoire, par les mécanismes d’isolation du système, transforme une traversée réussie en lecture de fichiers sans intérêt. C’est la défense qui tient quand le code se trompe quand même.
- CWE-22: Improper Limitation of a Pathname to a Restricted Directory, MITRE, liste 4.20 : définition, parent CWE-706, entrées filles CWE-23 et CWE-36.
- 2025 CWE Top 25, MITRE : rang 6.
🐝 Ce qui arrive si on s’en passe
Section intitulée « 🐝 Ce qui arrive si on s’en passe »Une équipe qui corrige la traversée en interdisant la chaîne ../ croit avoir réglé le problème et laisse passer le chemin absolu, l’encodage d’URL et le lien symbolique. Le défaut survit donc au correctif, ce qui est pire qu’un défaut connu : il est désormais marqué « corrigé » dans le suivi des vulnérabilités, et personne ne le retestera. En lecture, le prix est une fuite de fichiers de configuration, qui contiennent presque toujours des identifiants de base de données ou des clés d’API, c’est-à-dire la clé de l’étage suivant. En écriture, le prix est l’exécution de code : il suffit que le fichier déposé atterrisse dans un répertoire servi ou chargé au démarrage. Et comme ces défauts touchent souvent des équipements d’infrastructure exposés sur Internet, la découverte se fait rarement par un audit : elle se fait par l’exploitation, parfois massive, dans la semaine qui suit la publication du correctif que personne n’a appliqué.
🦫 Explication de la marmotte 🍫
Section intitulée « 🦫 Explication de la marmotte 🍫 »Les fichiers d’un ordinateur sont rangés dans des dossiers, eux-mêmes rangés dans d’autres dossiers, comme des boîtes gigognes. Pour désigner un fichier, on écrit le chemin qui y mène, en séparant chaque étape par une barre oblique. Il existe une notation universelle pour remonter d’un cran : deux points. Écrire ../ signifie « sortir du dossier courant ».
Beaucoup d’applications demandent à l’utilisateur quel fichier il veut, puis vont le chercher dans un dossier prévu à cet effet. Si l’application se contente de coller le nom demandé à la suite du nom du dossier, l’utilisateur peut y glisser des remontées : au lieu de demander une image, il demande une image située dix dossiers plus haut, c’est-à-dire un fichier qui ne lui était pas destiné : les mots de passe du système, la configuration du serveur, les clés d’accès à la base de données.
C’est le défaut que le catalogue CWE appelle CWE-22, « traversée de chemin ». Le même mécanisme fonctionne parfois dans l’autre sens : si l’application enregistre un fichier à un emplacement choisi par l’utilisateur, celui-ci peut le déposer là où le serveur exécutera son contenu.
Une chose mérite d’être retenue, parce qu’elle explique la longévité du problème. La mauvaise manière de s’en protéger consiste à interdire les caractères suspects dans la demande ; elle échoue toujours, parce qu’il existe des dizaines de façons d’écrire la même remontée : en majuscules, en code numérique, avec un séparateur d’un autre système, ou en donnant directement un chemin complet qui ne contient aucune remontée. La bonne manière consiste à calculer où la demande aboutit réellement, puis à vérifier que cet endroit se trouve bien dans le dossier autorisé. On ne juge pas la demande, on juge la destination.
À lire aussi
- CWE-434 : téléversement d'un fichier de type dangereuxCWE-434, unrestricted upload of file with dangerous type : ce que la classe recouvre, le rôle décisif du traitement automatique, ses pairs CWE-351, CWE-430 et CWE-436, et son rang 12 au Top 25 2025.
- CWE-770 : allocation de ressources sans limite ni régulationCWE-770, allocation of resources without limits or throttling : ce que la classe recouvre, ses filles CWE-774, CWE-789 et CWE-1325, pourquoi elle facture désormais plus qu'elle ne plante, et son rang 25 au Top 25 2025.
- CWE-200 : exposition d'information sensible, un impact pris pour une causeCWE-200, exposure of sensitive information to an unauthorized actor : pourquoi le MITRE déconseille cette classe, ses entrées filles réellement utiles comme CWE-532 et CWE-209, et son rang 20 au Top 25 2025.
- CWE-863 : autorisation incorrecte, le contrôle qui vérifie la mauvaise choseCWE-863, incorrect authorization : ce que la classe recouvre, ce qui la sépare de CWE-862, ses entrées filles dont CWE-639 et CWE-551, et son rang 17 au Top 25 2025.
Pages voisines
La citent
- CWE-434 : téléversement d'un fichier de type dangereux
- CWE-863 : autorisation incorrecte, le contrôle qui vérifie la mauvaise chose
CWE-22 : traversée de chemin, le nom de fichier qui sort du dossier
Elle cite
: les deux pages se citent l’une l’autre.
