Skip to main content

Solution du CTF Fetch the Flag 2022 : git-refs

Écrit par

Iulia Manda

feature ctf git refs

9 novembre 2022

0 minutes de lecture

Merci d’avoir participé à Fetch avec nous ! Félicitations aux milliers de joueurs qui nous ont rejoints pour leCTF Fetch the Flag. Et un immense merci aux Snykers qui ont créé, testé et documenté les défis !

Si vous avez participé à l’événement CTF Fetch the Flag de cette année, vous avez peut-être relevé le défi git-refs. Si vous ne l’avez pas terminé ou souhaitez simplement en savoir plus, nous allons l’examiner dans cet article. Le nom et la description de ce défi font penser à Git : nous garderons donc cela à l’esprit pendant notre enquête. Git pourrait-il nous aider à trouver le flag ? Voyons quelles vulnérabilités potentielles se cachent dans l’application git-refs.

Défi

Dans ce défi Web, un lien nous mène à un site qui affiche des informations sur des dépôts Git publics. Une recherche textuelle permet de répertorier les branches et les empreintes de commit d’un dépôt donné. Aucune authentification n’est nécessaire pour que les requêtes aboutissent, ce qui va nous faciliter un peu la tâche.

Étapes de résolution

Commençons par examiner les requêtes envoyées.

Outil Git Refs affichant l’URL d’un dépôt GitHub, des noms de branches distantes et des hachages de commits, ainsi que les détails d’une requête réseau du navigateur.
Outil Git Refs affichant l’URL d’un dépôt GitHub, les noms de branches distantes et les hachages de commits, à côté de la charge utile d’une requête dans Chrome DevTools.

Nous constatons qu’il s’agit d’une requête POST vers http://git-refs.c.ctf-snyk.io/git, avec une liste dans le corps de la requête :

["ls-remote", "https://github.com/snyk/nuget-semver"]

Intéressant ! Nous pensons que ls-remote est une commande Git. Voyons si nous pouvons passer d’autres commandes Git dans le corps de la requête…

Fenêtre Postman montrant une requête POST vers un point de terminaison Git et un texte de réponse indiquant que le dépôt se trouve sur la branche master et ne contient encore aucun commit

On dirait que nous avons maintenant un shell distant via la commande Git. Voyons si nous pouvons obtenir des informations sur le dépôt git-refs.

Il semble s’agir d’un dépôt Git vide. Mais l’est-il vraiment ? Pourrions-nous trouver quelque chose qui a été supprimé de l’historique Git ?

Client API affichant une requête POST pour récupérer les données du reflog Git et une erreur 500 indiquant que la branche master ne contient aucun commit.

Le reflog ne semble pas très utile non plus. On dirait que c’est un dépôt local qui vient d’être initialisé, car rien n’a été envoyé en amont.

En fait, pourrions-nous exploiter ces découvertes pour obtenir des informations sur les fichiers système ? Cherchons peut-être un fichier flag.txt ou quelque chose de similaire.

Fenêtre Postman affichant une requête POST vers une URL Git avec un corps JSON et une réponse 200 OK présentant la sortie de l’état Git.

En consultant le manuel Git, nous découvrons que l’option --work-tree pourrait nous aider à explorer le système de fichiers.

Requête Postman interrogeant les références Git avec work-tree et status, et renvoyant une liste Git des répertoires système non suivis.

Super ! Nous avons utilisé Git pour lister le contenu de « / » sur le système distant.

Cette piste ne nous a toutefois pas menés bien loin, principalement parce que toutes nos tentatives de lecture du contenu des fichiers ont échoué (nous avons essayé git add, puis git diff, mais rien ne pouvait probablement être ajouté ou validé à cause du fichier .gitignore. Nous n’en sommes pas sûrs, car nous n’avons pas non plus pu en voir le contenu).

Poursuivons notre lecture pour découvrir ce que nous pouvons faire d’autre avec git.

Changer d’approche

Nous avons ensuite pensé à vérifier la configuration du dépôt. En parcourant les options de git config, nous en avons trouvé une qui semblait intéressante :

-e, --edit           Opens an editor to modify the specified config file; either --system, --global, or repository (default).

Hmm, intéressant. Essayons :

Fenêtre Postman affichant une requête POST vers un endpoint git-refs, avec une entrée JSON et une réponse du package contenant un flag et une configuration Git.

Et voilà le flag. :)

Pour conclure

Récapitulons les étapes qui nous ont permis de résoudre ce défi :

  • Analyser les requêtes réseau de l’application Web : vérifier l’URL, le corps de la requête et le statut

  • Repérer une vulnérabilité potentielle en déterminant comment obtenir un accès à un shell distant à partir des informations disponibles

  • Parcourir le manuel Git (ou faire appel à ses souvenirs, selon le cas :) ) pour découvrir comment nous rapprocher du flag

L’injection de commandes reste assez fréquente. Il est donc toujours indispensable de nettoyer les entrées utilisateur dans les applications actuelles. Nous espérons que ce défi vous a plu et que vous avez appris quelque chose au passage.

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é.

Lire la suite

illustration hero ai
Blog

PHP corrige deux vulnérabilités RCE critiques exploitables sans authentification (CVE-2026-109618, CVE-2026-109619) : mettez à jour dès maintenant

Deux vulnérabilités critiques dans le cycle de traitement des requêtes de PHP peuvent permettre l’exécution de code à distance sans authentification. Passez à une version corrigée ou installez un correctif rétroporté par votre fournisseur pour les versions antérieures.

blog feature ai lilac
Blog

Transformez votre backlog de vulnérabilités en pull requests grâce à la remédiation agentique

Evo Remediation Agent est désormais disponible en aperçu ouvert et apporte la résolution automatisée des dépendances à Evo Agentic AppSec. Les équipes AppSec peuvent désormais lancer des campagnes de remédiation continues

AI Background min crop
Blog

L’IA fait surgir tous les risques que vous avez acceptés : sept enseignements du panel de sécurité de l’IA sans filtre

L’IA rend les attaques moins coûteuses et plus rapides, exposant des risques déjà présents dans les organisations. Quatre responsables de la sécurité expliquent pourquoi une défense à la vitesse des machines et une remédiation accélérée sont désormais indispensables.