Fetch the Flag CTF 2022 : solution du défi Containers are ACE
9 novembre 2022
0 minutes de lectureMerci d’avoir participé à Fetch avec nous !Félicitations aux milliers de participants qui nous ont rejoints pour Fetch the Flag CTF. Et un immense merci aux Snykers qui ont conçu, testé et présenté les défis !
Le niveau de difficulté du défi Containers are ACE de l’édition de cette année de Fetch the Flag CTF est assez faible. Il nécessite des connaissances de base de Burp et de quelques commandes système. Il faut également mener un travail d’analyse et d’enquête pour identifier le vecteur d’attaque.
Guide pas à pas
Enquête initiale
Avant de commencer l’enquête proprement dite, tout détective doit rassembler les indices et les relier. Ce défi nous fournit plusieurs indices précieux, comme vous pouvez le voir ci-dessous.
Indice n° 1 : installez la CLI Snyk https://docs.snyk.io/snyk-cli/install-the-snyk-cli
Rien de particulier ici. Il existe plusieurs façons d’installer la CLI Snyk. Pour notre part, nous allons l’installer avec NPM (assurez-vous que NPM est installé ; sinon, vous pouvez l’installer ici).
Exécutez sudo npm install snyk -g et vous serez prêt pour l’étape suivante.
Indice n° 2 : exécutez cette commande : snyk container test pasapples/apjctf-todo-java-app:latest --app-vulns --exclude-base-image-vulns
C’est là que la CLI Snyk se révèle utile : l’exécution de la commande ci-dessus lance une série d’instructions (vous trouverez plus d’informations dans la documentation de la CLI Snyk) :
Télécharge l’image si elle n’est pas déjà disponible localement dans votre daemon Docker
Détermine les logiciels installés dans l’image
Envoie cette nomenclature logicielle au service Snyk
Renvoie la liste des vulnérabilités présentes dans votre image
Snyk analyse l’image à la recherche de vulnérabilités et vous présente les résultats ainsi qu’une correction recommandée.

Indice n° 3 : plus d’informations ici : https://docs.snyk.io/products/snyk-container/getting-around-the-snyk-container-ui/detecting-application-vulnerabilities-in-container-images#ap[…]lag
Cet indice fournit des informations utiles si vous souhaitez approfondir le fonctionnement de Snyk Container.
Indice n° 4 : Containers are ACE
Le titre contient également un indice qui sera essentiel pour résoudre ce défi. ACE est souvent l’abréviation de « Arbitrary Code/Command Execution » (exécution arbitraire de code ou de commandes).
Prendre du recul
Nous avons terminé la phase de collecte d’informations et allons maintenant chercher un vecteur d’attaque qui nous permettra de pénétrer dans l’application. À l’étape précédente, Snyk Container a détecté un grand nombre de vulnérabilités. Nous devons trouver un moyen de faire le tri !
Nous allons chercher les vulnérabilités de gravité élevée, comme CriticalET dont le type est Arbitrary Command/Code Execution. En appliquant nos critères, nous réduisons la liste aux vulnérabilités suivantes :

https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHESTRUTS-31503
https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHESTRUTS-30207
https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHESTRUTS-30771
https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHESTRUTS-30772
Après une brève analyse de chacune d’elles, nous constatons que CVE-2017-5638 a un score CVSS de 10 et qu’il existe plusieurs exploits accessibles au public. Nous pouvons donc supposer que la probabilité d’exploiter cette vulnérabilité est assez élevée. Essayons donc !
Passons à la pratique
Nous pouvons exploiter la vulnérabilité en créant un script à partir des charges utiles disponibles publiquement, ou essayer de le faire avec Burp. Nous allons choisir la deuxième option, qui ne nécessite ni l’installation de bibliothèques ni la création de fichiers et qui est, dans l’ensemble, plus simple.
Après avoir lancé Burp, accédons à l’onglet Proxy, puis cliquons sur le bouton Open Browser et accédons à l’application Web vulnérable. À partir de maintenant, chaque requête sera d’abord transmise à Burp.
Accédons maintenant à la section de connexion de l’application Web et commençons à intercepter les requêtes. Essayer de se connecter avec une adresse e-mail et un mot de passe aléatoires ne fonctionnera évidemment pas. Envoyons plutôt cette requête au répéteur.


Modifions maintenant la requête POST en y intégrant une charge utile disponible publiquement, que vous trouverez sur GitHub.

Bingo ! Nous avons reçu une réponse différente. En l’examinant de plus près, nous constatons que le résultat reçu provient de cette commande :

Nous pouvons maintenant modifier la commande et rechercher dans les fichiers et les répertoires pour voir si nous trouvons quelque chose. Mais nous arrivons à une impasse.

Puisque nous savons que le format du flag est SNYK{...}, nous pouvons lancer #cmd='grep -r -e SNYK' pour rechercher dans tous les fichiers. Nous avons trouvé le flag !

Autre possibilité : rechercher les fichiers contenant le mot-clé flag en exécutant #cmd='find . -name *flag*', puis lire le fichier avec #cmd='cat ./webapps/todolist/flag'

Comment nous avons réussi le défi ACE
Nous avons effectué une reconnaissance rapide de notre cible afin de préparer les étapes suivantes.
Nous avons identifié le vecteur d’attaque en triant les vulnérabilités selon leur
Criticalniveau de gravité.
Nous avons intercepté une requête valide et l’avons modifiée en y intégrant une charge utile malveillante.
Nous avons recherché le flag à l’aide de techniques d’énumération courantes.
Vous voulez savoir comment nous avons trouvé tous les autres flags ? Consultez notre page Solutions Fetch the Flag pour découvrir comment nous avons procédé.
La sécurité des conteneurs, pensée pour les développeurs
Snyk détecte et corrige automatiquement les vulnérabilités dans les images de conteneurs et les workloads Kubernetes.
