In questo blog esploriamo CVE-2024-36401, una vulnerabilità di sicurezza riscontrata in GeoServer, un server open-source basato su Java ampiamente utilizzato per la manipolazione e la condivisione di dati geospaziali. Questa vulnerabilità, che potrebbe consentire l'esecuzione di codice remoto (RCE) da parte di utenti non autenticati, sottolinea l'importanza fondamentale di applicare le patch alle distribuzioni di GeoServer il prima possibile.
Nella nostra ultima analisi di sicurezza, due borsisti dell OPSWAT indagano su questa minaccia:
- Esame approfondito dei vettori di attacco della CVE
- Individuazione delle lacune di sicurezza che gli aggressori potrebbero utilizzare per sfruttare GeoServer
- Simulazione del modo in cui gli aggressori possono compromettere le distribuzioni di GeoServer
Condivideremo anche il modo in cui la tecnologia SBOM di OPSWAT può rilevare questa vulnerabilità, oltre a fornire passi concreti ai team per proteggere la loro infrastruttura geospaziale prima che gli aggressori colpiscano.

Panoramica di GeoServer
GeoServer è un server open source basato su Java, progettato per visualizzare, modificare e condividere dati geospaziali. Lanciato inizialmente nel 2001 da TOPP (The Open Planning Project), GeoServer è stato sviluppato per migliorare l'impegno pubblico nel governo e nella pianificazione urbana attraverso lo scambio di dati spaziali aperti. A distanza di oltre due decenni, GeoServer è maturato fino a diventare una solida piattaforma in grado di gestire vari formati di dati spaziali e di integrarsi con diverse fonti di dati.
GeoServer fornisce servizi basati sugli standard OGC (Open Geospatial Consortium), tra cui:
- WFS (Web Feature Service) - Consente di creare, modificare e scambiare informazioni geografiche in formato vettoriale tramite HTTP.
- WCS (Web Coverage Service) - Facilita l'accesso ai dati raster (ad esempio, immagini satellitari) per modelli e analisi complesse.
- WMS (Web Map Service) - Fornisce una semplice interfaccia HTTP per richiedere immagini di mappe.
Informazioni su CVE-2024-36401
La CVE-2024-36401 colpisce le versioni di GeoServer precedenti alla 2.25.2, 2.24.4 e 2.23.6. La falla deriva dalla valutazione non sicura dei nomi delle proprietà come espressioni XPath su più parametri di richiesta OGC. Gli aggressori possono sfruttare questa falla per creare RCE (esecuzione di codice in remoto) iniettando input modificati in un'installazione predefinita di GeoServer.
Secondo gli avvisi di sicurezza di GitHub, questa vulnerabilità ha un punteggio CVSS v3.1 di 9.8 (Critico).
Caratteristiche semplici e complesse di GeoServer
GeoServer supporta sia tipi di caratteristiche semplici che complesse per adattarsi a diverse strutture di dati geospaziali, da quelle piatte a quelle intricate e annidate. Tuttavia, la gestione errata delle espressioni XPath in questi tipi di dati rende sfruttabile la CVE-2024-36401.
Caratteristiche semplici
I tipi di caratteristiche semplici rappresentano dati geospaziali semplici in un formato piatto, in cui ogni riga di un database corrisponde a una caratteristica geospaziale e ogni attributo corrisponde direttamente a un elemento XML.
Ad esempio, una tabella che rappresenta le aziende con colonne come id, nome e sede può essere facilmente convertita in semplici funzioni XML.
id | nome | posizione |
1 | OPSWAT | PUNTO (10.769829, 106.685248) |
Caratteristiche del complesso
I tipi di caratteristica complessi, invece, gestiscono dati più complessi. Questo tipo di caratteristica supporta proprietà annidate e relazioni tra diversi insiemi di dati. Questi schemi complessi non sono generati automaticamente, ma sono definiti utilizzando gli standard della comunità, come indicato nell'estensione Application Schema di GeoServer.
Esempio:
Sotto la precedente tabella delle aziende, aggiungiamo una chiave esterna gu_id
per descrivere la relazione tra una società e la sua unità geologica equivalente:
id | nome | posizione | gu_id |
1 | OPSWAT | PUNTO (10.769829, 106.685248) | 12 |
Le informazioni sull'unità geologica sono memorizzate separatamente nella tabella unità geologica
:
gu_id | urna | descrizione |
12 | urn:x-demo:feature:GeologicUnit:12 | Gneiss metamorfico |
Utilizzando queste tabelle, è possibile mappare l'azienda su una sa:Società di campionamento
che contiene un elemento annidato gsml:Unità geologica
. Questa configurazione crea una caratteristica complessa, poiché coinvolge tipi e relazioni annidati definiti dalle specifiche della comunità piuttosto che da schemi generati automaticamente.
Tale flessibilità è essenziale per la modellazione di scenari complessi del mondo reale, ma introduce anche vulnerabilità dovute alla dipendenza da tecniche di elaborazione avanzate come la valutazione JXPath per gestire efficacemente le strutture annidate.
Come nasce la vulnerabilità
GeoServer è stato progettato per utilizzare la valutazione XPath per elaborare tipi di caratteristiche complesse (come quelle presenti negli archivi di dati Application Schema). Tuttavia, a causa di una gestione impropria, applica erroneamente la valutazione XPath anche a tipi di caratteristiche semplici. Questo crea un vettore di attacco perché:
- GeoServer si affida alla libreria GeoTools per valutare i nomi delle proprietà durante il recupero dei dati.
- Il
comune-jxpath
utilizzata per l'elaborazione delle espressioni XPath, manca di un'adeguata convalida e può eseguire codice arbitrario durante l'elaborazione delle espressioni XPath. - Questa falla espone tutte le istanze di GeoServer a potenziali vulnerabilità RCE, in quanto un utente malintenzionato può creare una richiesta dannosa che sfrutta questa esecuzione XPath non sicura per controllare il server.
Panoramica del flusso di lavoro di sfruttamento
- A
POSTO
viene inviata al sistemaGetPropertyValue
operazione. GeoServer tenta quindi di recuperare la proprietà (o la proprietàvaloreRiferimento
) per una determinata caratteristica. - Se la proprietà richiesta esiste nella tabella Dettagli del tipo di caratteristica, GeoServer la elabora normalmente.
- Tuttavia, se l'immobile non è presente nell'elenco, GeoServer ricorre all'elenco delle proprietà.
comune-jxpath
per interpretare il parametro della richiesta come espressione XPath. - Da quando
comune-jxpath
permette di eseguire codice Java direttamente da XPath, questo meccanismo di fallback consente potenzialmente di sfruttare i parametri di richiesta forniti dall'utente per l'esecuzione di codice remoto. In poche parole, un utente malintenzionato può iniettare codice dannoso per ottenere l'RCE.
Sfruttamento e analisi delle vulnerabilità
JXPath e il ponte di esecuzione Java
Il comune-jxpath
comunemente chiamata JXPath, consente di navigare attraverso grafi di oggetti Java (JavaBeans, oggetti DOM, ecc.) utilizzando la sintassi XPath. Ad esempio, se si dispone di un semplice oggetto Dipendente con proprietà come nome e indirizzo, JXPath consente di interrogare tali proprietà come se fossero nodi di un documento XML.
Sfruttare le funzioni di estensione
Oltre alle funzioni standard, JXPath supporta anche funzioni di estensione che fungono da ponte con Java. Questo "ponte verso Java" è fondamentale perché consente di invocare le funzioni Java direttamente all'interno delle query XPath, ad esempio:
A causa delle poche limitazioni sui metodi Java che possono essere richiamati attraverso questo bridge, un utente malintenzionato può sfruttare il exec()
(o metodi simili) per eseguire comandi arbitrari sul server.
WFS GetPropertyValue
Il WFS di GeoServer consente agli utenti di interrogare e manipolare le caratteristiche geospaziali. In condizioni normali, il WFS GetPropertyValue
restituirebbe semplicemente la proprietà richiesta in una struttura XML.


Analisi del flusso di lavoro
- Un utente malintenzionato invia una richiesta POST a /geoserver/wfs.
- GeoServer esamina il tag XML più esterno.
wfs:GetPropertyValue-
per determinare quale operazione eseguire. - GeoServer delega quindi i parametri della richiesta al metodo corrispondente della classe WFS. In questo scenario, il Dispatcher indirizza la richiesta al metodo
GetPropertyValue
metodo.
- All'interno della classe DefaultWebFeatureService20 (WFS), questo
GetPropertyValue
inoltra i parametri dell'utente a un gestore con lo stesso nome. - Il gestore
eseguire()
riceve la richiesta, compresi i dati criticivaloreRiferimento
parametro controllato dall'utente.
- Durante il
eseguire()
GeoServer recupera il metodovalore di riferimento
e invoca il suovalutare()
funzione.
- Se
valoreRiferimento
non corrisponde alle proprietà predefinite di GeoServer, GeoServer lo imposta come predefinito al valoreAccessore di proprietà di una caratteristica
, che interpretavaloreRiferimento
come espressione XPath.
- Il
get()
in FeaturePropertyAccessor utilizza il metodocomune-jxpath
per eseguire la query XPath. In questo caso, l'utentevaloreRiferimento
viene passato direttamente nel parametro xpath senza validazione. AttraversoJXPathContext.newContext()
GeoServer inizializza un ambiente per le interrogazioni XPath, quindi le esegue tramiteiteratePointers()
.
Poiché JXPath supporta le funzioni di estensione, gli aggressori possono iniettare codice dannoso nell'espressione XPath, innescando l'esecuzione di codice arbitrario sull'istanza di GeoServer.
Questa catena di eventi dimostra come una gestione non sicura del valoreRiferimento
può portare a RCE, rappresentando una grave minaccia per la sicurezza delle distribuzioni vulnerabili di GeoServer.
Simulazione dell'attacco
Per simulare questo sfruttamento in uno scenario reale, i nostri borsisti OPSWAT hanno implementato GeoServer su un computer Windows locale. All'accesso a GeoServer è stata visualizzata la seguente interfaccia.
Una volta che il server è in esecuzione, un utente malintenzionato può sfruttare la vulnerabilità inviando una richiesta POST con un'espressione XPath dannosa via valoreRiferimento
all'endpoint /geoserver/wfs.
Risultato: Dopo l'invio della richiesta, l'espressione XPath dannosa esegue un comando di sistema e attiva l'avvio dell'applicazione Calculator.
Mitigazione e raccomandazioni
Un semplice exploit può trasformarsi in un attacco alla catena di fornitura del software, in particolare nei progetti che si basano su software open-source come GeoServer. La tecnologiaOPSWAT SBOM (Software Bill of Materials) aiuta a identificare vulnerabilità come CVE-2024-36401 nella vostra base di codice.
Questo esempio dimostra come OPSWAT SBOM:
- Rileva i componenti software interessati dalle vulnerabilità.
- Valuta e classifica la gravità della falla di sicurezza: in questo caso, le CVE di GeoServer sono contrassegnate come "Critiche".
- Identifica la versione interessata.
- Raccomanda la versione corretta in modo che i team di sviluppo possano applicare tempestivamente le patch o adottare misure di correzione.
Altri passi consigliati
- Aggiornare GeoServer: Aggiornare alle versioni di GeoServer 2.25.2, 2.24.4 o 2.23.6 (o successive) in cui la vulnerabilità è stata corretta.
- Dipendenze di audit: Utilizzate regolarmente strumenti come OPSWAT SBOM per identificare le librerie obsolete (ad esempio,
comune-jxpath
) nel vostro ambiente. - Limitare l'accesso: Distribuire GeoServer dietro firewall o livelli di autenticazione per ridurre al minimo la superficie di attacco.
- Monitorare gli avvisi di sicurezza: Tenere d'occhio le note di rilascio ufficiali di GeoServer e i database CVE per rimanere aggiornati sulle nuove patch.
Informazioni su OPSWAT SBOM
OPSWAT SBOM supporta i linguaggi di programmazione più diffusi, fornendo ai team di sviluppo software la visibilità delle librerie open-source di terze parti, delle loro dipendenze associate e delle ultime versioni disponibili da aggiornare. Gli sviluppatori possono integrare OPSWAT SBOM nel loro codice sorgente e nei servizi di container come GitHub, BitBucket, GitLab, Amazon ECR, DockerHub e altri. Per saperne di più su SBOM.
Rivolgetevi oggi stesso a un esperto per scoprire come integrare gli strumenti e le soluzioni OPSWAT con l'infrastruttura e i flussi di lavoro esistenti: