{"id":4367,"date":"2022-01-28T14:23:31","date_gmt":"2022-01-28T13:23:31","guid":{"rendered":"https:\/\/www.vaadata.com\/blog\/?p=4367"},"modified":"2022-01-28T14:29:20","modified_gmt":"2022-01-28T13:29:20","slug":"comprendre-se-proteger-vulnerabilite-path-traversal","status":"publish","type":"post","link":"https:\/\/www.vaadata.com\/blog\/fr\/comprendre-se-proteger-vulnerabilite-path-traversal\/","title":{"rendered":"Comprendre et se prot\u00e9ger de la vuln\u00e9rabilit\u00e9 Path Traversal"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"alignright size-medium\"><img decoding=\"async\" width=\"300\" height=\"157\" src=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2022\/01\/path-traversal-1-300x157.jpg\" alt=\"path traversal\" class=\"wp-image-4373\" srcset=\"https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2022\/01\/path-traversal-1-300x157.jpg 300w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2022\/01\/path-traversal-1-1024x535.jpg 1024w, https:\/\/www.vaadata.com\/blog\/wp-content\/uploads\/2022\/01\/path-traversal-1-1536x803.jpg 1536w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/figure><\/div>\n\n\n\n<p>Dans quelles situations peut se produire une vuln\u00e9rabilit\u00e9 path traversal&nbsp;? Comment d\u00e9tecter cette faille et s\u2019en prot\u00e9ger&nbsp;?<\/p>\n\n\n\n<p>C\u2019est ce que nous allons d\u00e9tailler dans cet article.<\/p>\n\n\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\"><strong>D\u00e9finition d\u2019une attaque path traversal<\/strong><\/h2>\n\n\n\n<p>Une attaque path traversal ou directory traversal vise \u00e0 acc\u00e9der et lire des fichiers stock\u00e9s en dehors de l\u2019arborescence expos\u00e9e directement par le service web.<\/p>\n\n\n\n<p>Il s\u2019agit de modifier des param\u00e8tres d\u2019une requ\u00eate pour naviguer dans l\u2019arborescence. Le but de l\u2019attaquant est de parcourir les r\u00e9pertoires afin d\u2019atteindre des fichiers sensibles auxquels l\u2019acc\u00e8s est normalement refus\u00e9 (fichiers de configuration, code source\u2026)<\/p>\n\n\n\n<p>Dans certaines situations, l\u2019attaquant a m\u00eame parfois acc\u00e8s \u00e0 des fonctionnalit\u00e9s non autoris\u00e9es, comme l\u2019\u00e9criture de fichiers sur le serveur. Cela peut l\u2019amener \u00e0 prendre le contr\u00f4le du serveur et la vuln\u00e9rabilit\u00e9 devient alors une RCE.<\/p>\n\n\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Comment se produit&nbsp;la vuln\u00e9rabilit\u00e9 path traversal&nbsp;?<\/strong><\/h2>\n\n\n\n<p>La plupart des applications web utilisent des ressources stock\u00e9es localement (images, scripts, fichiers texte\u2026) pour r\u00e9aliser leurs t\u00e2ches. Parfois, ces ressources sont int\u00e9gr\u00e9es dans d\u2019autres pages via des param\u00e8tres manipulables par un utilisateur.<\/p>\n\n\n\n<p>La faille path traversal survient lorsque les param\u00e8tres utilisateurs ne sont pas s\u00e9curis\u00e9s (sanitized) et\/ou qu\u2019il y a un manque de contr\u00f4le d\u2019acc\u00e8s aux ressources.<\/p>\n\n\n\n<p>Il est alors possible pour un attaquant de modifier les param\u00e8tres de la requ\u00eate pour demander de retourner d\u2019autres ressources.<\/p>\n\n\n\n<p>L\u2019impact de cette faille est g\u00e9n\u00e9ralement critique. En effet, selon le contexte, l\u2019attaquant peut<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>obtenir&nbsp;la lecture de fichiers, potentiellement&nbsp;:<ul><li>des fichiers de configuration o\u00f9 il y a r\u00e9guli\u00e8rement des secrets (identifiants, cl\u00e9s\u2026), qui permettent ensuite d\u2019exploiter de nouvelles failles,<\/li><\/ul><ul><li>des fichiers sensibles du syst\u00e8me d\u2019exploitation,<\/li><\/ul><\/li><li>lire le code source,<\/li><li>analyser l\u2019organisation du serveur,<\/li><li>parfois, \u00e9crire sur le serveur, ce qui peut conduire \u00e0&nbsp;:<ul><li>une modification du comportement de l\u2019application<\/li><\/ul><ul><li>voire \u00e0 la prise du contr\u00f4le du serveur<\/li><\/ul><\/li><\/ul>\n\n\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Comment identifier la faille directory traversal&nbsp;?<\/strong><\/h2>\n\n\n\n<p>Pour trouver une faille path traversal, il faut r\u00e9pertorier rigoureusement tous les endroits o\u00f9 les utilisateurs peuvent envoyer des donn\u00e9es.<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/OWASP\/wstg\/blob\/master\/document\/4-Web_Application_Security_Testing\/05-Authorization_Testing\/01-Testing_Directory_Traversal_File_Include.md#how-to-test\" target=\"_blank\" rel=\"noreferrer noopener\">L\u2019OWASP Testing Guide<\/a> d\u00e9taille des points \u00e0 regarder&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>y a-t-il des param\u00e8tres qui sont reli\u00e9s \u00e0 des op\u00e9rations n\u00e9cessitant des fichiers&nbsp;?<\/li><li>y a-t-il des extensions de fichiers inhabituelles qui sont accept\u00e9es&nbsp;?<\/li><li>y a-t-il des noms de variables int\u00e9ressants&nbsp;? (item, file, home\u2026)<\/li><li>y a-t-il des cookies utilis\u00e9s pour la g\u00e9n\u00e9ration des pages ou templates&nbsp;?<\/li><\/ul>\n\n\n\n<p>Une fois les points identifi\u00e9s, il s\u2019agit de tout d\u2019abord tester diff\u00e9rentes techniques pour exploiter la vuln\u00e9rabilit\u00e9. Vous pouvez ensuite essayer des techniques pour bypasser les contr\u00f4les en place.<\/p>\n\n\n\n<p>La m\u00e9thode la plus courante est de v\u00e9rifier s\u2019il est possible de remonter dans d\u2019autres r\u00e9pertoires :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>directement avec ..\/<\/li><li>via de l\u2019encodage, ce qui donne par exemple %2e%2e%2f<\/li><li>via les notations unicode, ce qui donne par exemple %u2216%u2216<\/li><li>avec file:<\/li><li>via des wrappers<\/li><li>\u2026<\/li><\/ul>\n\n\n\n<p>Ces diff\u00e9rentes techniques peuvent \u00eatre \u00e0 combiner, car certaines protections peuvent \u00eatre en place tandis que d\u2019autres non.<\/p>\n\n\n\n<p>Vous pouvez vous appuyer sur <a href=\"https:\/\/github.com\/swisskyrepo\/PayloadsAllTheThings\/tree\/master\/Directory%20Traversal\" target=\"_blank\" rel=\"noreferrer noopener\">PayloadsAllTheThings<\/a>, qui r\u00e9pertorie une grande vari\u00e9t\u00e9 de payloads.<\/p>\n\n\n\n<p>Une deuxi\u00e8me possibilit\u00e9 est d\u2019inclure directement des ressources externes dans les param\u00e8tres d\u2019appel, dans les cookies ou d\u2019autres vecteurs.<\/p>\n\n\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Exemples de failles path traversal rencontr\u00e9es<\/strong><\/h3>\n\n\n\n<p>Durant les <a href=\"https:\/\/www.vaadata.com\/fr\/pentest-web\/\" target=\"_blank\" rel=\"noreferrer noopener\">tests d\u2019intrusion d\u2019application web<\/a> que nous r\u00e9alisons, nous rencontrons r\u00e9guli\u00e8rement cette faille.<\/p>\n\n\n\n<p>Certaines vuln\u00e9rabilit\u00e9s d\u00e9couvertes sont des situations classiques, par exemple le param\u00e8tre utilis\u00e9 dans une fonction <code>include<\/code> n\u2019est pas prot\u00e9g\u00e9. Ou alors il est possible de manipuler un param\u00e8tre pass\u00e9 \u00e0 une fonction curl dans laquelle il est possible d\u2019utiliser <code>file:\/\/<\/code>.<\/p>\n\n\n\n<p>D\u2019autres failles sont plus subtiles. Par exemple, nous avons test\u00e9 une application qui avait un g\u00e9n\u00e9rateur de pdf. Le g\u00e9n\u00e9rateur reprenait les donn\u00e9es personnelles de l\u2019utilisateur dans le pdf.<\/p>\n\n\n\n<p>Pour exploiter la faille, nous avons modifi\u00e9 le champ \u00ab adresse&nbsp;\u00bb de l\u2019utilisateur en y mettant une <code>&lt;iframe src=\u2019file:\/\/\/etc\/passwd\u2019&gt;&lt;\/iframe&gt;<\/code>. Le g\u00e9n\u00e9rateur interpr\u00e9tait le HTML. Le probl\u00e8me \u00e9tait que la librairie \u00e9tait autoris\u00e9e \u00e0 aller chercher des fichiers via <code>file:\/\/<\/code>.<\/p>\n\n\n\n<p>En g\u00e9n\u00e9rant le pdf, l\u2019iframe \u00e9tait interpr\u00e9t\u00e9e et allait afficher les ressources que nous avions demand\u00e9es. L\u2019impact d\u2019une faille de ce style est alors critique.<\/p>\n\n\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Comment se prot\u00e9ger des failles path traversal&nbsp;?<\/strong><\/h2>\n\n\n\n<p>Pour \u00e9viter ces failles, plusieurs mesures doivent \u00eatre mises en place&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Ne pas utiliser les entr\u00e9es utilisateurs directement pour appeler un fichier.<\/li><li>Les donn\u00e9es utilisateurs ne doivent pas \u00eatre interpr\u00e9t\u00e9es. Elles doivent \u00eatre encod\u00e9es, \u00e9chapp\u00e9es et nettoy\u00e9es.<\/li><li>Elles doivent \u00eatre valid\u00e9es par rapport \u00e0 une liste d\u2019expressions autoris\u00e9es. Si ce n\u2019est pas possible, alors la validation doit confirmer qu\u2019il n\u2019y a que du contenu autoris\u00e9 (par exemple que des caract\u00e8res alphanum\u00e9riques).<\/li><\/ul>\n\n\n\n<p>Dans le cas de notre exemple du g\u00e9n\u00e9rateur de pdf, la correction est que le HTML ne soit pas interpr\u00e9t\u00e9 et le <code>file:<\/code> pas autoris\u00e9. De plus, il ne doit pas \u00eatre possible de charger des fichiers locaux dans les iframe, ni des ressources web locales (SSRF).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans quelles situations peut se produire une vuln\u00e9rabilit\u00e9 path traversal&nbsp;? Comment d\u00e9tecter cette faille et s\u2019en prot\u00e9ger&nbsp;? C\u2019est ce que nous allons d\u00e9tailler dans cet article.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[],"class_list":{"0":"post-4367","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-technique"},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/4367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/comments?post=4367"}],"version-history":[{"count":4,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/4367\/revisions"}],"predecessor-version":[{"id":4375,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/4367\/revisions\/4375"}],"wp:attachment":[{"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=4367"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=4367"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vaadata.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=4367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}