Mesterséges intelligencia által vezérelt kibertámadások: Hogyan lehet felismerni, megelőzni és megvédeni az intelligens fenyegetéseket?

Olvassa el most
A helyszíni fordításokhoz mesterséges intelligenciát használunk, és bár törekszünk a pontosságra, nem biztos, hogy mindig 100%-os pontosságúak. Megértését nagyra értékeljük.

A CVE-2024-36401 a nyílt forráskódú GeoServerben távoli kódvégrehajtásnak teszi ki a rendszereket

a OPSWAT
Ossza meg ezt a bejegyzést
Az OPSWAT ösztöndíjprogram résztvevőinek fejképei
OPSWAT ösztöndíjprogram résztvevői

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:

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.

A GeoServer sebezhetőségi elemzését bemutató ábra

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. 

Pillanatkép a CVSS Base Score metrikákról, amelyeket a szoftver sebezhetőségek értékeléséhez használnak

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á.

idnévhelyszín
1OPSWATPONT (10.769829, 106.685248)
GeoServer egyszerű funkció leképezés adatbázis sorokból XML elemekre

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:

idnévhelyszíngu_id
1OPSWATPONT (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_idurnátleírás
12urn:x-demo:feature:GeologicUnit:12Metamorf 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.

Beágyazott geológiai egységkapcsolatok a GeoServer komplex jellemzőiben

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:

  1. A GeoServer a GeoTools könyvtárra támaszkodik a tulajdonságnevek kiértékelésében az adatok lekérdezése során.
  2. 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.
  3. 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 a GetPropertyValue művelet. Ezután a GeoServer megpróbálja lekérni a tulajdonságot (vagy valueReference) 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.
GeoServer visszalépés a commons-jxpath-ra az XPath kiértékeléséhez egy táblázatban
  • 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.
A GeoServer GetPropertyValue műveletet és a támadási folyamatot szemléltető munkafolyamat-diagram

Sebezhetőségek kihasználása és elemzése

A JXPath és a Java Execution Bridge

A rosszindulatú XPath-kifejezések Commons-jxpath feldolgozása a GeoServerben

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.

JXPath navigáció Java objektumgráfokban XPath szintaxis használatával

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:

JXPath lekérdezés egy Java Employee objektum tulajdonságairól

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.

Az XPath és a Java metódusok között hidat képező kiterjesztési függvényhívás

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.

WFS GetPropertyValue művelet, amely XML tulajdonságot ad vissza
WFS GetPropertyValue XML válaszstruktúra

Munkafolyamat-elemzés

  1. Egy támadó POST-kérést küld a /geoserver/wfs címre.
  2. A GeoServer megvizsgálja a legkülső XML taget-wfs:GetPropertyValue-annak meghatározásához, hogy melyik műveletet futtassa.
  3. 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.
GeoServer Dispatcher, amely a GetPropertyValue módszerhez irányítja a kérést
  1. 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.
  2. A kezelő run() módszer megkapja a kérést, beleértve a kritikus valueReference a felhasználó által vezérelt paraméter.
Kezelő run() metódus, amely a valueReference paraméterrel rendelkező felhasználói kérést fogadja.
  1. A run() módszerrel a GeoServer lekérdezi a referenceValue és meghívja a evaluate() funkció.
GeoServer a referenciaérték lekérdezése és az evaluate() függvény meghívása
  1. Ha valueReference nem felel meg a GeoServer előre definiált tulajdonságainak, a GeoServer alapértelmezés szerint a FeaturePropertyAccessor, amely értelmezi valueReference XPath-kifejezésként.
FeaturePropertyAccessor a valueReference-t XPath-kifejezésként értelmezi
  1. A get() módszer a FeaturePropertyAccessor-ban a commons-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ül JXPathContext.newContext(), a GeoServer inicializál egy környezetet az XPath lekérdezésekhez, majd lefuttatja őket a iteratePointers().
Commons-jxpath XPath lekérdezés végrehajtása a felhasználó által megadott valueReference értékkel

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.

A támadó rosszindulatú kódot juttat be XPath-kifejezésen keresztül RCE céljából

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.

Pillanatkép a GeoServer felületéről Windows gépen a sebezhetőségi szimulációhoz

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.

XML kódrészlet, amely a GeoServerben lévő valueReference-t kihasználó rosszindulatú POST-kérést demonstrálja

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.

Pillanatkép a Számológép alkalmazás indításáról a sikeres RCE exploit után

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:

  1. Felismeri a sebezhetőségek által érintett szoftverkomponenseket.
  2. Értékeli és rangsorolja a biztonsági hiba súlyosságát - itt a GeoServer CVE-ket "Kritikus" jelöli.
  3. Azonosítja az érintett verziót.
  4. 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.
Az OPSWAT SBOM műszerfal képernyője, amely a kritikus sebezhetőségű GeoServer csomagokat észleli.
OPSWAT SBOMSoftware Bill of Materials) technológiája felismeri a kritikus sebezhetőségű GeoServer csomagokat.

Egyéb ajánlott lépések

  1. 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.
  2. 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.
  3. 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.
  4. 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:

Maradjon naprakész az OPSWAT oldalon!

Iratkozzon fel még ma, hogy értesüljön a vállalat legfrissebb híreiről, történetekről, eseményinformációkról és sok másról.