Skip to main content

Atténuer les vulnérabilités de traversée de chemin en Java avec Snyk Code

Écrit par
snyk code featured

6 mars 2023

0 minutes de lecture

La traversée de chemin est un type de vulnérabilité de sécurité qui peut survenir lorsqu’une application ou un service Web permet à un attaquant d’accéder à des fichiers ou répertoires du serveur situés en dehors de l’arborescence prévue. Cela peut entraîner la lecture ou la modification non autorisée de données sensibles. Lors du téléversement de fichiers, une vulnérabilité de traversée de chemin peut survenir si l’application ne valide pas correctement le chemin de fichier indiqué par l’utilisateur. Un attaquant peut alors téléverser un fichier malveillant dont le nom lui donne accès à des fichiers protégés sur le serveur.

Prévenir les traversées de chemin lors du téléversement de fichiers est essentiel pour sécuriser les applications Java : cela permet de protéger les données sensibles et d’empêcher tout accès non autorisé aux fichiers et répertoires protégés. Dans cet article, nous allons examiner plus en détail la traversée de chemin lors du téléversement de fichiers et vous montrer comment prévenir cette vulnérabilité dans les applications Java avec Snyk Code.

Que vous soyez développeur ou souhaitiez simplement en savoir plus sur la sécurité en Java, cet article vous apporte des informations et des conseils pour protéger vos applications Java.

Comprendre la traversée de chemin lors du téléversement de fichiers

Imaginez une application qui permet aux utilisateurs de téléverser des photos de profil. L’application stocke ces photos dans un répertoire du serveur, par exemple /images/profiles/. Si elle ne valide pas correctement le nom de fichier indiqué par l’utilisateur, un attaquant pourrait téléverser un fichier malveillant nommé, par exemple, ../../etc/passwd. Il pourrait ainsi accéder à des fichiers système sensibles situés en dehors de l’arborescence prévue. 

Prenons l’exemple ci-dessous d’une application Spring Boot utilisant Thymeleaf.

@PostMapping("/uploadimage")
public String uploadImage (Model model, @RequestParam("image") MultipartFile file) throws IOException {
   var name = file.getOriginalFilename().replace(" ", "_");
   var fileNameAndPath = Paths.get(UPLOAD_DIRECTORY, name);
   Files.write(fileNameAndPath, file.getBytes());
   model.addAttribute("msg", "Uploaded images: " + name);
   return "person/upload";
}

Les formulaires Web sont très souvent utilisés pour téléverser des images. Lors du téléversement, nous utilisons originalFilename provenant du MultipartFile reçu. Si nous interceptons et examinons la requête HTTP POST, nous constatons que filename n’est qu’une métadonnée dans cette requête HTTP, comme le montre la ligne 24.

Extrait de code montrant un cookie JSESSIONID et l’envoi d’une image JPEG avec un formulaire multipart/form-data.

Avec les bons outils, il est facile de remplacer le nom de fichier par celui de notre choix ! En le remplaçant par ../../../../../../../etc/passwd, notre code téléversera le fichier vers images/profiles/../../../../../../../etc/passwd. Le chemin remontera jusqu’à la racine et le fichier /etc/passwd sera écrasé.

Comment Snyk Code détecte la traversée de chemin.

Snyk Code est un outil SAST en temps réel qui aide les développeurs Java à détecter les vulnérabilités dans leurs applications, notamment les traversées de chemin lors du téléversement de fichiers. Il s’appuie sur une analyse statique fondée sur un modèle avancé d’apprentissage automatique pour analyser votre code et repérer les risques de sécurité potentiels.

Pour ce qui est de la traversée de chemin, Snyk Code peut vous aider à repérer dans votre code les endroits où des chemins de fichiers indiqués par l’utilisateur sont utilisés sans validation adéquate. Par exemple, lorsque j’ai connecté mon dépôt GitHub à Snyk, Snyk Code a détecté le problème de traversée de chemin dans l’interface Web.

Interface de Snyk Code mettant en évidence une vulnérabilité de traversée de chemin dans du code Java de téléversement, avec la ligne d’écriture de fichier non sécurisée et une explication de la correction.

Ensuite, j’utilise le plugin Snyk pour IntelliJ IDEA, avec Snyk Code activé. L’analyse sur ma machine pendant le développement a immédiatement détecté le problème de traversée de chemin dans mon téléversement de fichiers. Elle m’a également proposé des solutions pour y remédier.

Tableau de bord de sécurité Snyk mettant en évidence une vulnérabilité CWE-23 de traversée de chemin de gravité élevée et des correctifs de code pour empêcher l’utilisation de chemins de fichiers non sécurisés.

En utilisant Snyk Code, vous pouvez détecter et corriger de manière proactive ces vulnérabilités de traversée de chemin avant qu’elles ne soient exploitées, contribuant ainsi à protéger votre application et les données qu’elle traite. 

En résumé, Snyk Code aide les développeurs Java à détecter les vulnérabilités de traversée de chemin lors du téléversement de fichiers, en analysant leur code et en repérant les endroits où la validation est insuffisante. Cela contribue à sécuriser votre application et à la protéger contre les attaques potentielles.

Atténuer les traversées de chemin lors du téléversement de fichiers

La solution la plus simple pour corriger une vulnérabilité de traversée de chemin consiste à éviter d’utiliser file.getOriginalFilename(). En générant vous-même un nom, vous maîtrisez entièrement l’emplacement où le fichier sera stocké, car celui-ci dépend des données fournies par l’utilisateur.

Cependant, si vous souhaitez conserver le nom d’origine du fichier, vous devez vérifier que l’emplacement où il est stocké est bien celui souhaité. Snyk Code (comme le montre l’exemple du plugin IDE) nous a déjà indiqué que nous pouvions normalize le chemin.

Modifions notre exemple précédent pour vérifier que le chemin normalisé commence bien par le dossier prévu pour le téléversement. Nous éviterons ainsi les problèmes de traversée de chemin.

Note de la rédaction : 31 mars 2023

Ce bloc de code a été mis à jour.

@PostMapping("/uploadimage")
public String uploadImage (Model model, @RequestParam("image") MultipartFile file) throws IOException {
   var name = file.getOriginalFilename().replace(" ", "_");
   var fileNameAndPath = Paths.get(UPLOAD_DIRECTORY, name);

   if (!fileNameAndPath.normalize().startsWith(UPLOAD_DIRECTORY)) {
        throw new IOException("Could not upload file: " + name);
   }

   Files.write(fileNameAndPath, file.getBytes());
   model.addAttribute("msg", "Uploaded images: " + name);
   return "person/upload";
}

Il est essentiel de prévenir les vulnérabilités de traversée de chemin.

Les vulnérabilités de traversée de chemin représentent une grave menace pour la sécurité des applications Web Java et figurent actuellement parmi les principaux problèmes de sécurité détectés par Snyk dans le code Java.
Les développeurs doivent en connaître les risques et comprendre comment les prévenir. En mettant en place une validation adéquate et en utilisant des outils comme Snyk Code pour repérer les vulnérabilités potentielles, ils peuvent contribuer à sécuriser leurs applications et à les protéger contre les attaques par traversée de chemin. N’oubliez pas que la sécurité est un processus continu : rester vigilant et détecter puis atténuer les vulnérabilités de manière proactive est essentiel pour préserver la sécurité de vos applications Java.

Corrigez vos vulnérabilités de traversée de chemin et gagnez des cadeaux

Le hackathon de correction des vulnérabilités de Snyk, The Big Fix, se déroule actuellement du 14 février au 14 mars. Rejoignez la compétition et corrigez les vulnérabilités de vos projets personnels ou d’un projet open source que vous utilisez régulièrement. Si vous venez de découvrir une vulnérabilité de traversée de chemin dans votre application, ajoutez votre projet à TheBig Fix. La correction d’une seule vulnérabilité vous permettra de gagner un T-shirt Big Fix 2023 en édition limitée. Les participants ayant corrigé le plus de vulnérabilités tenteront de remporter d’autres prix exceptionnels.

Alors, qu’attendez-vous ? Rejoignez The Big Fix et commencez dès aujourd’hui à sécuriser votre application.

Bannière promotionnelle The Big Fix : « Corrigez des vulnérabilités et gagnez des cadeaux géniaux », du 14 février au 14 mars, avec un bouton « Rejoignez-nous ».

Lancez-vous dans les compétitions Capture The Flag

Apprenez à résoudre des défis Capture The Flag en regardant à la demande notre atelier virtuel d’initiation.

Lire la suite

blog feature snyk container custom base recommendations
Blog

Découvrez Evo Agentic AppSec : une sécurité au rythme du développement de l’IA

Le développement piloté par l’IA dépasse les workflows de sécurité traditionnels. L’AppSec agentique de Snyk s’appuie sur des agents de sécurité pour détecter, corriger et vérifier les vulnérabilités en continu, tandis que les équipes définissent les exigences.

blog feature ai violet
Blog

VulnBump : les agents IA peuvent-ils corriger les dépendances vulnérables sans casser le build ?

VulnBump évalue des agents IA sur 307 mises à niveau de dépendances réelles. Une correction n’est comptabilisée que si la vulnérabilité disparaît et que la compilation et les tests restent au vert.

Blog

Les modèles de pointe ont trouvé les vulnérabilités. Seul l’attaquant a trouvé les chaînes d’exploitation.

L’analyse statique a détecté les failles, mais seuls des tests d’attaque en conditions réelles ont prouvé comment elles pouvaient être enchaînées pour provoquer des compromissions. Comparaison d’Evo COS, de Claude Security et de Claude Code Security.