Atacuri cibernetice bazate pe IA: Cum să detectați, să preveniți și să vă apărați împotriva amenințărilor inteligente

Citește acum
Utilizăm inteligența artificială pentru traducerile site-urilor și, deși ne străduim să fim exacți, este posibil ca acestea să nu fie întotdeauna 100% precise. Apreciem înțelegerea dumneavoastră.

CVE-2024-36401 în GeoServer Open-Source expune sistemele la executarea de cod de la distanță

de OPSWAT
Împărtășește această postare
Fotografii ale participanților la programul de burse OPSWAT
Participanții la programul de burse OPSWAT

Î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:

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

Ilustrație reprezentând analiza vulnerabilității GeoServer

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

Captură de ecran a parametrilor CVSS Base Score Metrics utilizați pentru evaluarea vulnerabilităților software

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.

idnumelocație
1OPSWATPUNCT (10.769829, 106.685248)
Cartografierea simplă a caracteristicilor GeoServer de la rânduri din baza de date la elemente XML

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ă:

idnumelocațiegu_id
1OPSWATPUNCT (10.769829, 106.685248)12

Informațiile privind unitatea geologică sunt stocate separat în tabelul unitate geologică:

gu_idurnădescriere
12urn:x-demo:feature:GeologicUnit:12Gneiss 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.

Relațiile dintre unitățile geologice imbricate în caracteristicile complexe GeoServer

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:

  1. GeoServer se bazează pe biblioteca GeoTools pentru a evalua numele proprietăților în timpul recuperării datelor.
  2. The Jxpath comun utilizată pentru procesarea expresiilor XPath, nu este validată corespunzător, ceea ce poate executa cod arbitrar la procesarea expresiilor XPath.
  3. 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ătre GetPropertyValue operațiune. Apoi GeoServer încearcă să recupereze proprietatea (sau valoareReferință) pentru o anumită caracteristică.  
  • Dacă proprietatea solicitată există în tabelul Feature Type Details, GeoServer o procesează în mod normal.
GeoServer revine la commons-jxpath pentru evaluarea XPath într-un tabel
  • 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.
Diagrama fluxului de lucru care ilustrează operațiunea GeoServer GetPropertyValue și fluxul de atac

Exploatarea și analiza vulnerabilităților

JXPath și Java Execution Bridge

Prelucrarea Commons-jxpath a expresiilor XPath malițioase în GeoServer

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.

Navigarea JXPath a grafurilor de obiecte Java utilizând sintaxa XPath

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:

JXPath interogarea proprietăților unui obiect Java Employee

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.

Invocarea funcției de extensie care face legătura între XPath și metodele Java

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.

Operațiunea WFS GetPropertyValue care returnează proprietatea XML
Structura răspunsului XML WFS GetPropertyValue

Analiza fluxului de lucru

  1. Un atacator trimite o cerere POST către /geoserver/wfs.
  2. GeoServer examinează eticheta XML cea mai exterioară-wfs:GetPropertyValue-pentru a determina operațiunea care urmează să fie executată.
  3. 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ă.
GeoServer Dispatcher direcționează cererea către metoda GetPropertyValue
  1. În cadrul clasei DefaultWebFeatureService20 (WFS), această GetPropertyValue transmite parametrii utilizatorului către un handler cu același nume.
  2. Funcția run() primește cererea, inclusiv informațiile critice valoareReferință parametru controlat de utilizator.
Metoda handler run() care primește cererea utilizatorului cu parametrul valueReference
  1. În timpul run() GeoServer recuperează Valoarea de referință și invocă evalua() funcție.
GeoServer recuperează referenceValue și invocă funcția evaluate()
  1. Dacă valoareReferință nu se potrivește cu proprietățile predefinite ale GeoServer, GeoServer îl definește în mod implicit la FeaturePropertyAccessor, care interpretează valoareReferință ca expresie XPath.
FeaturePropertyAccessor interpretează valueReference ca expresie XPath
  1. The get() din FeaturePropertyAccessor utilizează Jxpath comun pentru a executa interogarea XPath. În acest caz, user's valoareReferință este trecut direct în parametrul xpath fără validare. Prin JXPathContext.newContext(), GeoServer inițializează un mediu pentru interogări XPath, apoi le execută prin iteratePointers().
Commons-jxpath execută interogarea XPath cu valueReference furnizată de utilizator

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.

Atacatorul injectează cod malițios prin expresia XPath pentru RCE

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.

Captură de ecran a interfeței GeoServer pe un computer Windows pentru simularea vulnerabilității

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.

Fragment de cod XML care demonstrează solicitarea POST malițioasă care exploatează valueReference în GeoServer

Rezultat: După trimiterea cererii, expresia XPath malițioasă execută o comandă de sistem și declanșează lansarea aplicației Calculator.

Captură de ecran care ilustrează lansarea aplicației Calculator după un exploit RCE reușit

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:

  1. Detectează componentele software afectate de vulnerabilități.
  2. Evaluează și clasifică gravitatea deficienței de securitate - aici, CVE-urile GeoServer sunt marcate ca "Critic".
  3. Identifică versiunea afectată.
  4. Recomandă versiunea fixă, astfel încât echipele de dezvoltare să poată aplica patch-uri sau să ia măsuri prompte de remediere.
Captură de ecran din tabloul de bord al OPSWAT SBOM care detectează pachete GeoServer cu vulnerabilități critice
Tehnologia OPSWAT SBOMSoftware Bill of Materials) detectează pachetele GeoServer cu vulnerabilități critice.

Alte etape recomandate

  1. 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ă.
  2. 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.
  3. Restricționați accesul: Implementați GeoServer în spatele unor firewall-uri sau straturi de autentificare pentru a minimiza suprafața de atac.
  4. 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:

Rămâneți la curent cu OPSWAT!

Înscrieți-vă astăzi pentru a primi cele mai recente actualizări ale companiei, povești, informații despre evenimente și multe altele.