Ebben a blogban a CVE-2024-36401 biztonsági sebezhetőséget vizsgáljuk, amelyet a GeoServerben, egy nyílt forráskódú Java-alapú kiszolgálóban találtunk, amelyet széles körben használnak térbeli adatok manipulálására és megosztására. Ez a sebezhetőség, amely lehetővé teszi az RCE (távoli kódfuttatás) végrehajtását nem hitelesített felhasználók számára, kiemeli a GeoServer telepítések mielőbbi foltozásának kritikus fontosságát.
Legújabb biztonsági elemzésünkben az OPSWAT két diplomás ösztöndíjasa vizsgálja ezt a fenyegetést:
- A CVE támadási vektorainak mélyreható vizsgálata
- A biztonsági rések azonosítása, amelyeket a támadók a GeoServer kihasználására használhatnak fel
- Annak szimulálása, hogy a támadók hogyan veszélyeztethetik a GeoServer telepítéseket
Megosztjuk azt is, hogy OPSWAT SBOM technológiája hogyan képes észlelni ezt a sebezhetőséget, valamint hasznos lépéseket kínálunk a csapatoknak, hogy még a támadók lecsapása előtt biztosítsák a térinformatikai infrastruktúrájukat.

GeoServer áttekintés
A GeoServer egy Java-alapú nyílt forráskódú szerver, amelyet térinformatikai adatok megtekintésére, szerkesztésére és megosztására terveztek. A GeoServer-t eredetileg 2001-ben a TOPP (The Open Planning Project) indította útjára, és azzal a céllal fejlesztették ki, hogy a nyílt téradat-csere révén javítsa a nyilvánosság részvételét a kormányzati és várostervezésben. Több mint két évtizeddel később a GeoServer olyan robusztus platformmá érett, amely képes különböző térbeli adatformátumok kezelésére és különböző adatforrásokkal való integrálásra.
A GeoServer az OGC (Open Geospatial Consortium) szabványain alapuló szolgáltatásokat nyújt, többek között:
- WFS (Web Feature Service) - Lehetővé teszi a vektor formátumú földrajzi információk létrehozását, módosítását és cseréjét HTTP segítségével.
- WCS (Web Coverage Service) - Megkönnyíti a raszteres adatok (pl. műholdképek) elérését komplex modellezéshez és elemzéshez.
- WMS (Web Map Service) - Egyszerű HTTP-interfész a térképképek lekérdezéséhez.
A CVE-2024-36401 háttere
A CVE-2024-36401 a GeoServer 2.25.2, 2.24.4 és 2.23.6 előtti verzióit érinti. A hiba a tulajdonságnevek XPath-kifejezésekként történő nem biztonságos kiértékeléséből adódik több OGC-kérelmi paraméteren keresztül. A támadók ezt a hibát kihasználva RCE (távoli kódfuttatás) létrehozására használhatják ki a GeoServer alapértelmezett telepítésű GeoServer rendszerébe történő módosított bemenetek bejuttatásával.
A GitHub Security Advisories szerint ez a sebezhetőség a CVSS v3.1 szerint 9.8-as (kritikus) pontszámot kapott.
A GeoServer egyszerű vs. összetett jellemzői
A GeoServer támogatja az egyszerű és összetett jellemzőtípusokat, hogy különböző térbeli adatszerkezeteket tudjon kezelni, a sík adatállományoktól a bonyolult, egymásba ágyazott adathalmazokig. Az XPath-kifejezések hibás kezelése ezekben az adattípusokban azonban a CVE-2024-36401 kihasználhatóvá teszi.
Egyszerű jellemzők
Az egyszerű jellemzőtípusok egyszerű térbeli adatokat képviselnek sík formátumban, ahol az adatbázis minden sora egy térbeli jellemzőnek felel meg, és minden attribútum közvetlenül egy XML-elemnek felel meg.
Például egy vállalatokat ábrázoló táblázat, amely olyan oszlopokkal rendelkezik, mint az azonosító, a név és a hely, könnyen átalakítható egyszerű XML-funkciókká.
id | név | helyszín |
1 | OPSWAT | PONT (10.769829, 106.685248) |
Komplex jellemzők
Ezzel szemben az összetett jellemzőtípusok bonyolultabb adatokat kezelnek. Ez a jellemzőtípus támogatja az egymásba ágyazott tulajdonságokat és a különböző adatkészletek közötti kapcsolatokat. Ezek az összetett sémák nem automatikusan generálódnak, hanem a GeoServer Application Schema bővítményében felvázolt közösségi szabványok alapján kerülnek meghatározásra.
Példa:
Az előző cégek tábla alá hozzáadunk egy idegen kulcsot gu_id
egy vállalat és az azzal egyenértékű geológiai egység közötti kapcsolat leírására:
id | név | helyszín | gu_id |
1 | OPSWAT | PONT (10.769829, 106.685248) | 12 |
A geológiai egységre vonatkozó információkat külön tárolja a táblázatban geológiai egység
:
gu_id | urnát | leírás |
12 | urn:x-demo:feature:GeologicUnit:12 | Metamorf gneisz |
Ezeknek a táblázatoknak a segítségével leképezhetjük a vállalatot egy sa:Mintavételező vállalat
, amely tartalmaz egy beágyazott gsml:GeologicUnit
. Ez a beállítás összetett funkciót hoz létre, mivel az automatikusan generált sémák helyett a közösségi specifikációk által meghatározott, egymásba ágyazott típusokat és kapcsolatokat tartalmaz.
Ez a rugalmasság elengedhetetlen az összetett valós forgatókönyvek modellezéséhez, de egyben sebezhetőséget is jelent, mivel az egymásba ágyazott struktúrák hatékony kezeléséhez olyan fejlett feldolgozási technikákra támaszkodik, mint a JXPath kiértékelése.
Hogyan keletkezik a sebezhetőség
A GeoServer úgy lett kialakítva, hogy XPath kiértékeléssel dolgozza fel az összetett jellemzőtípusokat (például az Application Schema adattárolókban találhatóakat). A helytelen kezelés miatt azonban tévesen az XPath kiértékelést alkalmazza az egyszerűbb jellemzőtípusokra is. Ez támadási vektort hoz létre, mivel:
- A GeoServer a GeoTools könyvtárra támaszkodik a tulajdonságnevek kiértékelésében az adatok lekérdezése során.
- A
commons-jxpath
XPath-kifejezések feldolgozására használt könyvtárból hiányzik a megfelelő érvényesítés, ami az XPath-kifejezések feldolgozása során tetszőleges kódot hajthat végre. - Ez a hiba minden GeoServer példányt potenciális RCE sebezhetőségnek tesz ki, mivel egy támadó olyan rosszindulatú kérést készíthet, amely kihasználja ezt a nem biztonságos XPath végrehajtást a kiszolgáló irányításához.
Exploitation munkafolyamat áttekintése
- A
POST
a kérést aGetPropertyValue
művelet. Ezután a GeoServer megpróbálja lekérni a tulajdonságot (vagyvalueReference
) egy adott jellemzőre. - Ha a kért tulajdonság létezik a Feature Type Details táblában, a GeoServer normálisan feldolgozza azt.
- Ha azonban az ingatlan nincs a listában, a GeoServer a GeoServer
commons-jxpath
könyvtárat, hogy a kérési paramétert XPath-kifejezésként értelmezze. - Mivel
commons-jxpath
lehetővé teszi a Java kód közvetlen futtatását az XPath-ból, ez a tartalék mechanizmus potenciálisan lehetővé teszi a felhasználó által megadott kérési paraméterek kihasználását távoli kódfuttatásra. Egyszerűen fogalmazva, a támadó rosszindulatú kódot juttathat be az RCE elérése érdekében.
Sebezhetőségek kihasználása és elemzése
A JXPath és a Java Execution Bridge
A commons-jxpath
könyvtár, közismert nevén JXPath, lehetővé teszi a Java objektumgráfokban (JavaBeans, DOM objektumok stb.) való navigációt XPath szintaxis használatával. Ha például van egy egyszerű Employee objektumunk, amelynek tulajdonságai például a név és a cím, a JXPath lehetővé teszi, hogy ezeket a tulajdonságokat úgy kérdezzük le, mintha egy XML-dokumentum csomópontjai lennének.
Bővítési funkciók kihasználása
A szabványos függvényeken túl a JXPath támogatja a kiterjesztett függvényeket is, amelyek hídként működnek a Java felé. Ez a "híd a Java felé" azért kulcsfontosságú, mert lehetővé teszi például, hogy a Java függvényeket közvetlenül az XPath lekérdezéseken belül lehessen meghívni:
Mivel a hídon keresztül kevés korlátozás van arra vonatkozóan, hogy mely Java metódusok hívhatók meg, egy támadó kihasználhatja a exec()
függvényt (vagy hasonló módszereket), hogy tetszőleges parancsokat hajtson végre a kiszolgálón.
WFS GetPropertyValue
A GeoServer WFS lehetővé teszi a felhasználók számára a térbeli jellemzők lekérdezését és kezelését. Normál körülmények között a WFS GetPropertyValue
művelet egyszerűen visszaadja a kért tulajdonságot egy XML struktúrában.


Munkafolyamat-elemzés
- Egy támadó POST-kérést küld a /geoserver/wfs címre.
- A GeoServer megvizsgálja a legkülső XML taget-
wfs:GetPropertyValue-
annak meghatározásához, hogy melyik műveletet futtassa. - A GeoServer ezután a kérés paramétereit a WFS osztály megfelelő metódusához delegálja. Ebben a forgatókönyvben a Dispatcher a kérést a
GetPropertyValue
módszer.
- A DefaultWebFeatureService20 (WFS) osztályon belül ez a
GetPropertyValue
metódus a felhasználó paramétereit egy azonos nevű kezelőnek továbbítja. - A kezelő
run()
módszer megkapja a kérést, beleértve a kritikusvalueReference
a felhasználó által vezérelt paraméter.
- A
run()
módszerrel a GeoServer lekérdezi areferenceValue
és meghívja aevaluate()
funkció.
- Ha
valueReference
nem felel meg a GeoServer előre definiált tulajdonságainak, a GeoServer alapértelmezés szerint aFeaturePropertyAccessor
, amely értelmezivalueReference
XPath-kifejezésként.
- A
get()
módszer a FeaturePropertyAccessor-ban acommons-jxpath
az XPath-lekérdezés végrehajtásához. Itt a felhasználóvalueReference
közvetlenül az xpath paraméterbe kerül átadásra érvényesítés nélkül. A oldalon keresztülJXPathContext.newContext()
, a GeoServer inicializál egy környezetet az XPath lekérdezésekhez, majd lefuttatja őket aiteratePointers()
.
Mivel a JXPath támogatja a kiterjesztő függvényeket, a támadók rosszindulatú kódot vihetnek be az XPath-kifejezésbe, ami tetszőleges kódfuttatást indíthat el a GeoServer példányon.
Az események láncolata azt mutatja, hogy a nem biztonságos kezelés a valueReference
paraméter RCE-t eredményezhet, ami komoly biztonsági fenyegetést jelent a sebezhető GeoServer telepítésekre.
A támadás szimulálása
Hogy ezt a kihasználást valós forgatókönyvben szimuláljuk, az OPSWAT diplomás ösztöndíjasai a GeoServert egy helyi Windows-gépen telepítették. A GeoServer elérésekor a következő felület jelent meg.
Ha a kiszolgáló már fut, a támadó kihasználhatja a sebezhetőséget, ha rosszindulatú XPath-kifejezést tartalmazó POST-kérést küld a következő módon valueReference
a /geoserver/wfs végpontra.
Eredmény: A kérés elküldése után a rosszindulatú XPath-kifejezés végrehajt egy rendszerparancsot, és elindítja a Számológép alkalmazást.
Enyhítés és ajánlások
Egy egyszerű kihasználás a szoftverellátási láncot érintő támadássá fokozódhat, különösen az olyan nyílt forráskódú szoftverekre támaszkodó projektek esetében, mint a GeoServer. OPSWAT SBOM (Software Bill of Materials) technológiája segít azonosítani a CVE-2024-36401-hez hasonló sebezhetőségeket a kódbázisban.
Ez a példa azt mutatja be, hogy OPSWAT SBOM:
- Felismeri a sebezhetőségek által érintett szoftverkomponenseket.
- Értékeli és rangsorolja a biztonsági hiba súlyosságát - itt a GeoServer CVE-ket "Kritikus" jelöli.
- Azonosítja az érintett verziót.
- Ajánlja a javított verziót, hogy a fejlesztőcsapatok azonnal alkalmazhassák a javításokat, vagy javítási intézkedéseket hozhassanak.
Egyéb ajánlott lépések
- GeoServer frissítése: A GeoServer 2.25.2, 2.24.4 vagy 2.23.6 (vagy újabb) verzióra frissít, ahol a biztonsági rés javítva van.
- Auditfüggőségek: Rendszeresen használja az olyan eszközöket, mint OPSWAT SBOM, az elavult könyvtárak azonosítására (pl,
commons-jxpath
) az Ön környezetében. - Hozzáférés korlátozása: A GeoServer telepítése tűzfalak vagy hitelesítési rétegek mögé a támadási felület minimalizálása érdekében.
- Biztonsági tanácsok figyelése: Tartsa szemmel a GeoServer hivatalos kiadási jegyzeteit és a CVE-adatbázisokat, hogy naprakész maradjon az új javításokról.
Az OPSWAT SBOM-ról
OPSWAT SBOM támogatja a legnépszerűbb programozási nyelveket, így a szoftverfejlesztő csapatok számára átláthatóságot biztosít a harmadik féltől származó nyílt forráskódú könyvtárakról, a hozzájuk kapcsolódó függőségekről és a frissítendő legújabb elérhető verziókról. A fejlesztők integrálhatják OPSWAT SBOM-ot a forráskód- és konténerszolgáltatásokba, például a GitHub, BitBucket, GitLab, Amazon ECR, DockerHub és más szolgáltatásokba. Tudjon meg többet az SBOM-ról.
Beszéljen még ma egy szakértővel, hogy megtudja, hogyan integrálhatja OPSWAT eszközeit és megoldásait meglévő infrastruktúrájába és munkafolyamataiba: