Compte rendu du CTF Fetch the Flag 2022 : File Explorer
9 novembre 2022
0 minutes de lectureMerci d’avoir participé à Fetch avec nous ! Félicitations aux milliers de joueurs qui nous ont rejoints pour le CTF Fetch the Flag. Un grand merci également aux Snykers qui ont créé, testé et documenté les défis !
Si vous avez participé à Fetch the Flag de Snyk en 2022 et que vous cherchez la solution du défi File Explorer, vous êtes au bon endroit. Découvrons ensemble la solution !
Commençons par la phase de reconnaissance
Lors de cette phase du défi, un attaquant identifie une cible vulnérable et cherche comment l’exploiter. Ici, nous avons un lien vers un site web et un lien vers un dépôt public sur GitHub. Un seul point d’entrée nous suffit pour commencer.

De quoi disposons-nous ?
Nous commençons par vérifier le lien et accédons à http://file-explorer.c.ctf-snyk.io/. Quelques lignes s’affichent, ainsi qu’une invitation à consulter les fichiers en cliquant sur un lien.

Nous cliquons sur le lien et accédons au dossier /public/, où nous constatons que nous avons accès à certains fichiers de l’application.

Le nom du défi, sa description et le lien /public/ nous laissent penser qu’il faudra effectuer un traversal de répertoires.
Qu’est-ce qu’une traversée de répertoires ?
Une attaque par traversal de répertoires (également appelée traversal de chemin) vise à accéder à des fichiers et des répertoires situés en dehors du dossier prévu. En manipulant les fichiers à l’aide de séquences point-point-barre oblique (../) et de leurs variantes, ou en utilisant des chemins de fichiers absolus, il peut être possible d’accéder à des fichiers et répertoires arbitraires du système de fichiers, notamment au code source de l’application, à sa configuration et à d’autres fichiers système critiques.
Les vulnérabilités de traversal de répertoires peuvent entraîner des fuites d’informations et permettre à un attaquant de découvrir la structure des dossiers ou de lire le contenu de fichiers sensibles sur le système.
Trouver le flag avec Postman
Les CTF consistent à utiliser tous les outils à votre disposition. Utilisons donc Postman pour effectuer l’attaque par traversal de chemin. Commençons par une simple requête GET (http://file-explorer.c.ctf-snyk.io) pour accéder au site web. Le résultat est le même que dans le navigateur :

Nous obtenons le même résultat en ajoutant /public à la fin de l’URL avec cette requête GET (http://file-explorer.c.ctf-snyk.io/public/) :

La séquence point-point-barre oblique (../) redirige vers la page d’accueil du site web. Essayons une variante de cette séquence en utilisant l’encodage d’URL.

Qu’est-ce que l’encodage d’URL ?
L’encodage d’URL remplace les caractères ASCII non sécurisés par un « % » suivi de deux chiffres hexadécimaux. Ici, nous utiliserons %2e pour le caractère . et %2f pour le caractère /.
Voyons le résultat de cette requête GET (http://file-explorer.c.ctf-snyk.io/public/%2e

Nous voyons un fichier flag. Accédons-y avec cette requête GET (http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/flag) :

Nous avons trouvé le flag !
Trouver le flag avec Curl

Réessayons, cette fois en utilisant simplement curl. Nous allons suivre la même logique et commencer par interroger les dossiers du site web avec cette commande :
curl http://file-explorer.c.ctf-snyk.io/public/
Nous exploitons ensuite la vulnérabilité de traversal de chemin et interrogeons le dossier situé au-dessus du dossier public avec cette commande :
curl http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/
Enfin, nous interrogeons le fichier flag avec la commande suivante :
curl http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/flag
Trouver le flag avec le navigateur
Nous pouvons aussi le faire directement dans le navigateur. Saisissez l’URL suivante dans votre navigateur pour afficher la page qui permet d’accéder au flag :
http://file-explorer.c.ctf-snyk.io/public/%2e%2e%2f/

Trouver le flag avec l’extension IDE de Snyk
Pour cela, nous commençons par cloner le dépôt public et l’ouvrons dans Visual Studio Code. Nous installons l’extension de sécurité Snyk pour IDE depuis la marketplace en recherchant « Snyk ». Rechargez ensuite votre IDE après l’installation et exécutez npm install.

La première fois que vous cliquez sur la petite icône de Patch (notre mascotte) dans la barre latérale gauche, vous ne verrez pas les vulnérabilités de sécurité open source du projet tant que vous ne vous serez pas authentifié. Pour cela, vous pouvez créer un compte Snyk gratuit. Une fois authentifié, vous pourrez lancer votre premier scan !
Vous pouvez également consulter le fichier package.json : nous y voyons quelques vulnérabilités dans le package st.

st est un module qui sert des fichiers statiques sur des pages web et contient une vulnérabilité de ce type. Dans notre exemple, le fichier app.js montre que nous servons des fichiers depuis la route public.

Retournez au fichier package.json, survolez le package st et cliquez sur l’ampoule jaune pour afficher la vulnérabilité la plus grave.

Vous serez redirigé vers la vulnérabilité de traversal de répertoires. Cette page vous en apprendra davantage sur la vulnérabilité, la version qui l’introduit, la manière de la corriger et une preuve de concept.

Vous pouvez également en savoir plus sur cette vulnérabilité en cliquant sur En savoir plus sur cette vulnérabilité.

Récapitulatif de File Explorer
Réfléchissons au nombre de lignes de code que nous écrivons nous-mêmes par rapport au nombre de composants ou de packages que nous importons dans notre base de code. Inutile de réinventer la roue et de perdre du temps à réécrire quelque chose qui existe probablement déjà sous forme de package dans notre écosystème.
C’était le cas dans ce défi. Nous avons un site web simple qui utilise le package st pour servir des fichiers statiques. Mais en utilisant une ancienne version de ce package, nous avons introduit une vulnérabilité dans notre projet. Un attaquant potentiel peut ainsi découvrir des fichiers sensibles, des identifiants ou des mots de passe. Veillez à maintenir à jour les composants de vos projets afin de réduire votre surface d’attaque !
J’espère que vous avez apprécié File Explorer et les autres défis du CTF :)
Vous voulez savoir comment nous avons trouvé tous les autres flags ? Consultez notre page Solutions de Fetch the Flag pour découvrir comment nous avons procédé.
