În acest blog, explorăm CVE-2024-36401 - o vulnerabilitate de securitate descoperită în GeoServer, un server open-source bazat pe Java utilizat pe scară largă pentru manipularea și partajarea datelor geospațiale. Această vulnerabilitate, care ar putea permite RCE (executarea codului de la distanță) de către utilizatori neautentificați, subliniază importanța critică a implementării de patch-uri pentru GeoServer cât mai curând posibil.
În ultima noastră analiză de securitate, doi bursieri OPSWAT investighează această amenințare prin:
- Examinarea aprofundată a vectorilor de atac ai CVE
- Identificarea lacunelor de securitate pe care atacatorii le-ar putea folosi pentru a exploata GeoServer
- Simularea modului în care atacatorii pot compromite implementările GeoServer
De asemenea, vom împărtăși modul în care tehnologia OPSWAT SBOM poate detecta această vulnerabilitate și vom oferi echipelor pași de urmat pentru a-și securiza infrastructura geospațială înainte ca atacatorii să lovească.

Prezentare generală GeoServer
GeoServer este un server open-source bazat pe Java conceput pentru vizualizarea, editarea și partajarea datelor geospațiale. Lansat inițial în 2001 de TOPP (The Open Planning Project), GeoServer a fost dezvoltat pentru a îmbunătăți implicarea publicului în guvernare și planificare urbană prin schimbul deschis de date spațiale. Peste două decenii mai târziu, GeoServer s-a maturizat într-o platformă robustă, capabilă să gestioneze diverse formate de date spațiale și să se integreze cu diferite surse de date.
GeoServer oferă servicii bazate pe standardele OGC (Open Geospatial Consortium), inclusiv:
- WFS (Web Feature Service) - Permite crearea, modificarea și schimbul de informații geografice în format vectorial utilizând HTTP.
- WCS (Web Coverage Service) - facilitează accesul la date raster (de exemplu, imagini din satelit) pentru modelare și analiză complexe.
- WMS (Web Map Service) - Oferă o interfață HTTP simplă pentru solicitarea imaginilor de hartă.
Context privind CVE-2024-36401
CVE-2024-36401 afectează versiunile GeoServer anterioare 2.25.2, 2.24.4 și 2.23.6. Acesta provine din evaluarea nesigură a numelor de proprietăți ca expresii XPath în mai mulți parametri de cerere OGC. Atacatorii pot exploata acest defect pentru a crea RCE (executarea codului de la distanță) prin injectarea de intrări falsificate într-o instalare implicită GeoServer.
Conform GitHub Security Advisories, această vulnerabilitate are un scor CVSS v3.1 de 9.8 (Critical).
Caracteristici simple vs. complexe ale GeoServer
GeoServer acceptă atât tipuri de caracteristici simple, cât și complexe, pentru a acomoda diferite structuri de date geospațiale, de la cele plate la cele complexe, cu seturi de date imbricate. Cu toate acestea, manipularea defectuoasă a expresiilor XPath în aceste tipuri de date este ceea ce face CVE-2024-36401 exploatabil.
Caracteristici simple
Tipurile simple de caracteristici reprezintă date geospațiale simple într-un format plat, în care fiecare rând dintr-o bază de date corespunde unei caracteristici geospațiale, iar fiecare atribut este corespondent direct al unui element XML.
De exemplu, un tabel care reprezintă companii cu coloane precum id, nume și locație poate fi ușor convertit în caracteristici XML simple.
id | nume | locație |
1 | OPSWAT | PUNCT (10.769829, 106.685248) |
Caracteristici complexe
În schimb, tipurile de caracteristici complexe gestionează date mai complexe. Acest tip de entitate acceptă proprietăți imbricate și relații între diferite seturi de date. Aceste scheme complexe nu sunt generate automat, ci sunt definite utilizând standardele comunității, astfel cum sunt prezentate în extensia Application Schema a GeoServer.
Exemplu:
Sub tabelul de companii anterior, adăugăm o cheie străină gu_id
pentru a descrie relația dintre o întreprindere și unitatea sa geologică echivalentă:
id | nume | locație | gu_id |
1 | OPSWAT | PUNCT (10.769829, 106.685248) | 12 |
Informațiile privind unitatea geologică sunt stocate separat în tabelul unitate geologică
:
gu_id | urnă | descriere |
12 | urn:x-demo:feature:GeologicUnit:12 | Gneiss metamorfic |
Utilizând aceste tabele, putem corela compania cu un sa:SamplingCompany
, care conține un gsml:Unitate geologică
. Această configurație creează o caracteristică complexă, deoarece implică tipuri imbricate și relații definite de specificațiile comunității mai degrabă decât de schemele generate automat.
O astfel de flexibilitate este esențială pentru modelarea scenariilor complexe din lumea reală, dar introduce, de asemenea, vulnerabilități datorită dependenței sale de tehnici avansate de procesare, cum ar fi evaluarea JXPath, pentru a gestiona eficient structurile imbricate.
Cum apare vulnerabilitatea
GeoServer este proiectat să utilizeze evaluarea XPath pentru a procesa tipuri complexe de caracteristici (cum ar fi cele găsite în depozitele de date Application Schema). Dar, din cauza unei manipulări necorespunzătoare, acesta aplică în mod eronat evaluarea XPath și tipurilor de caracteristici simple. Acest lucru creează un vector de atac deoarece:
- GeoServer se bazează pe biblioteca GeoTools pentru a evalua numele proprietăților în timpul recuperării datelor.
- The
Jxpath comun
utilizată pentru procesarea expresiilor XPath, nu este validată corespunzător, ceea ce poate executa cod arbitrar la procesarea expresiilor XPath. - Acest defect expune toate instanțele GeoServer la potențiale vulnerabilități RCE, deoarece un atacator poate crea o cerere malițioasă care exploatează această execuție XPath nesigură pentru a controla serverul.
Prezentare generală a fluxului de lucru al exploatării
- A
POST
este trimisă cătreGetPropertyValue
operațiune. Apoi GeoServer încearcă să recupereze proprietatea (sauvaloareReferință
) pentru o anumită caracteristică. - Dacă proprietatea solicitată există în tabelul Feature Type Details, GeoServer o procesează în mod normal.
- Cu toate acestea, în cazul în care proprietatea nu este listată, GeoServer recurge la
Jxpath comun
pentru a interpreta parametrul cererii ca o expresie XPath. - Deoarece
Jxpath comun
permite executarea de cod Java direct din XPath, acest mecanism de rezervă permite potențial exploatarea parametrilor de cerere furnizați de utilizator pentru executarea de cod de la distanță. Mai simplu spus, un atacator poate injecta cod malițios pentru a realiza RCE.
Exploatarea și analiza vulnerabilităților
JXPath și Java Execution Bridge
The Jxpath comun
denumită în mod obișnuit JXPath, permite navigarea prin grafice de obiecte Java (JavaBeans, obiecte DOM etc.) utilizând sintaxa XPath. De exemplu, dacă aveți un simplu obiect Employee cu proprietăți precum numele și adresa, JXPath vă permite să interogați aceste proprietăți ca și cum ar fi noduri într-un document XML.
Exploatarea funcțiilor de extensie
Pe lângă funcțiile standard, JXPath acceptă și funcții de extensie care acționează ca o punte către Java. Această "punte către Java" este esențială deoarece permite invocarea funcțiilor Java direct în interogările XPath, de exemplu:
Din cauza celor câteva limitări privind metodele Java care pot fi apelate prin această punte, un atacator poate exploata exec()
(sau metode similare) pentru a executa comenzi arbitrare pe server.
WFS GetPropertyValue
WFS al GeoServer permite utilizatorilor să interogheze și să manipuleze caracteristici geospațiale. În condiții normale, WFS GetPropertyValue
ar returna pur și simplu proprietatea solicitată într-o structură XML.


Analiza fluxului de lucru
- Un atacator trimite o cerere POST către /geoserver/wfs.
- GeoServer examinează eticheta XML cea mai exterioară-
wfs:GetPropertyValue-
pentru a determina operațiunea care urmează să fie executată. - GeoServer deleagă apoi parametrii cererii către metoda corespunzătoare din clasa WFS. În acest scenariu, Dispatcher direcționează cererea către metoda
GetPropertyValue
metodă.
- În cadrul clasei DefaultWebFeatureService20 (WFS), această
GetPropertyValue
transmite parametrii utilizatorului către un handler cu același nume. - Funcția
run()
primește cererea, inclusiv informațiile criticevaloareReferință
parametru controlat de utilizator.
- În timpul
run()
GeoServer recupereazăValoarea de referință
și invocăevalua()
funcție.
- Dacă
valoareReferință
nu se potrivește cu proprietățile predefinite ale GeoServer, GeoServer îl definește în mod implicit laFeaturePropertyAccessor
, care interpreteazăvaloareReferință
ca expresie XPath.
- The
get()
din FeaturePropertyAccessor utilizeazăJxpath comun
pentru a executa interogarea XPath. În acest caz, user'svaloareReferință
este trecut direct în parametrul xpath fără validare. PrinJXPathContext.newContext()
, GeoServer inițializează un mediu pentru interogări XPath, apoi le execută priniteratePointers()
.
Deoarece JXPath acceptă funcții de extensie, atacatorii pot injecta cod malițios în expresia XPath, declanșând executarea de cod arbitrar pe instanța GeoServer.
Acest lanț de evenimente demonstrează modul în care manipularea nesigură a valoareReferință
poate duce la RCE, reprezentând o amenințare gravă la adresa securității implementărilor GeoServer vulnerabile.
Simularea atacului
Pentru a simula această exploatare într-un scenariu real, bursierii noștri absolvenți OPSWAT au implementat GeoServer pe o mașină Windows locală. Următoarea interfață a fost afișată la accesarea GeoServer.
Odată ce serverul rulează, un atacator poate exploata vulnerabilitatea prin trimiterea unei cereri POST cu o expresie XPath malițioasă prin valoareReferință
la punctul final /geoserver/wfs.
Rezultat: După trimiterea cererii, expresia XPath malițioasă execută o comandă de sistem și declanșează lansarea aplicației Calculator.
Atenuare și recomandări
O exploatare simplă poate escalada într-un atac asupra lanțului de aprovizionare cu software, în special în proiectele care se bazează pe software open-source, cum ar fi GeoServer. TehnologiaOPSWAT SBOM (Software Bill of Materials) vă ajută să identificați vulnerabilități precum CVE-2024-36401 în baza dvs. de cod.
Acest exemplu demonstrează modul în care OPSWAT SBOM:
- Detectează componentele software afectate de vulnerabilități.
- Evaluează și clasifică gravitatea deficienței de securitate - aici, CVE-urile GeoServer sunt marcate ca "Critic".
- Identifică versiunea afectată.
- Recomandă versiunea fixă, astfel încât echipele de dezvoltare să poată aplica patch-uri sau să ia măsuri prompte de remediere.
Alte etape recomandate
- Actualizați GeoServer: Actualizați la versiunile GeoServer 2.25.2, 2.24.4 sau 2.23.6 (sau ulterioare) în care vulnerabilitatea este remediată.
- Dependențe de audit: Utilizați în mod regulat instrumente precum OPSWAT SBOM pentru a identifica bibliotecile învechite (de ex,
Jxpath comun
) în mediul dvs. - Restricționați accesul: Implementați GeoServer în spatele unor firewall-uri sau straturi de autentificare pentru a minimiza suprafața de atac.
- Monitorizați avizele de securitate: Fiți cu ochii pe notele oficiale de lansare GeoServer și pe bazele de date CVE pentru a fi la curent cu noile patch-uri.
Despre OPSWAT SBOM
OPSWAT SBOM suportă cele mai populare limbaje de programare, oferind echipelor de dezvoltare software vizibilitate asupra bibliotecilor open-source terțe, dependențele asociate acestora și cele mai recente versiuni disponibile pentru actualizare. Dezvoltatorii pot integra OPSWAT SBOM în codul lor sursă și în serviciile de containere, cum ar fi GitHub, BitBucket, GitLab, Amazon ECR, DockerHub și multe altele. Aflați mai multe despre SBOM.
Discutați astăzi cu un expert pentru a afla cum să integrați instrumentele și soluțiile OPSWAT cu infrastructura și fluxurile de lucru existente: