Bu blogda, coğrafi veri manipülasyonu ve paylaşımı için yaygın olarak kullanılan açık kaynaklı Java tabanlı bir sunucu olan GeoServer'da bulunan bir güvenlik açığı olan CVE-2024-36401'i inceliyoruz. Kimliği doğrulanmamış kullanıcılar tarafından RCE'ye (uzaktan kod yürütme) izin verebilecek bu güvenlik açığı, GeoServer dağıtımlarının mümkün olan en kısa sürede yamalanmasının kritik öneminin altını çizmektedir.
En son güvenlik analizimizde, iki OPSWAT Yüksek Lisans Bursiyeri bu tehdidi araştırıyor:
- CVE'nin saldırı vektörlerinin derinlemesine incelenmesi
- Saldırganların GeoServer'ı istismar etmek için kullanabileceği güvenlik açıklarının belirlenmesi
- Saldırganların GeoServer dağıtımlarını nasıl tehlikeye atabileceğinin simülasyonu
Ayrıca OPSWAT SBOM teknolojisinin bu güvenlik açığını nasıl tespit edebileceğini paylaşacak ve ekiplerin saldırganlar saldırmadan önce jeo-uzamsal altyapılarını güvence altına almaları için uygulanabilir adımlar sunacağız.

GeoServer'a Genel Bakış
GeoServer, jeo-uzamsal verileri görüntülemek, düzenlemek ve paylaşmak için tasarlanmış Java tabanlı açık kaynaklı bir sunucudur. İlk olarak 2001 yılında TOPP (The Open Planning Project) tarafından başlatılan GeoServer, açık mekansal veri alışverişi yoluyla hükümet ve şehir planlamasına halkın katılımını artırmak için geliştirilmiştir. Yirmi yılı aşkın bir süre sonra GeoServer, çeşitli mekansal veri formatlarını işleyebilen ve farklı veri kaynaklarıyla entegre olabilen sağlam bir platform haline gelmiştir.
GeoServer, OGC (Open Geospatial Consortium) standartlarına dayalı hizmetler sunmaktadır:
- WFS (Web Özellik Hizmeti) - HTTP kullanarak vektör formatındaki coğrafi bilgilerin oluşturulmasını, değiştirilmesini ve değiş tokuş edilmesini sağlar.
- WCS (Web Coverage Service) - Karmaşık modelleme ve analizler için raster verilere (örn. uydu görüntüleri) erişimi kolaylaştırır.
- WMS (Web Harita Hizmeti) - Harita görüntüleri istemek için basit bir HTTP arayüzü sağlar.
CVE-2024-36401 hakkında arka plan
CVE-2024-36401, 2.25.2, 2.24.4 ve 2.23.6'dan önceki GeoServer sürümlerini etkiler. Birden fazla OGC istek parametresinde özellik adlarının XPath ifadeleri olarak güvenli olmayan şekilde değerlendirilmesinden kaynaklanmaktadır. Saldırganlar, varsayılan bir GeoServer kurulumuna hazırlanmış girdiler enjekte ederek RCE (uzaktan kod yürütme) oluşturmak için bu kusurdan yararlanabilir.
GitHub Güvenlik Danışmanlarına göre, bu güvenlik açığı 9.8 (Kritik) CVSS v3.1 puanı taşımaktadır.
GeoServer'ın Basit ve Karmaşık Özellikleri
GeoServer, düzden karmaşık, iç içe geçmiş veri kümelerine kadar farklı jeo-uzamsal veri yapılarını barındırmak için hem basit hem de karmaşık özellik türlerini destekler. Ancak, bu veri türlerinde XPath ifadelerinin hatalı kullanımı CVE-2024-36401'i istismar edilebilir hale getirmektedir.
Basit Özellikler
Basit özellik türleri, bir veritabanındaki her satırın bir jeo-uzamsal özelliğe karşılık geldiği ve her özniteliğin doğrudan bir XML öğesine eşlendiği düz bir formatta basit jeo-uzamsal verileri temsil eder.
Örneğin, id, isim ve konum gibi sütunlara sahip şirketleri temsil eden bir tablo kolayca basit XML özelliklerine dönüştürülebilir.
id | isim | konum |
1 | OPSWAT | NOKTA (10.769829, 106.685248) |
Kompleks Özellikleri
Buna karşılık, karmaşık özellik türleri daha karmaşık verileri işler. Bu özellik türü, iç içe geçmiş özellikleri ve farklı veri kümeleri arasındaki ilişkileri destekler. Bu karmaşık şemalar otomatik olarak oluşturulmaz, ancak GeoServer'ın Uygulama Şeması uzantısında belirtildiği gibi topluluk standartları kullanılarak tanımlanır.
Örnek:
Önceki şirketler tablosunun altına bir yabancı anahtar ekliyoruz gu_id
bir şirket ile eşdeğer jeolojik birim arasındaki ilişkiyi tanımlamak için kullanılır:
id | isim | konum | gu_id |
1 | OPSWAT | NOKTA (10.769829, 106.685248) | 12 |
Jeolojik birim bilgileri tabloda ayrı olarak saklanır jeoloji̇k bi̇ri̇m
:
gu_id | urn | Açıklama |
12 | urn:x-demo:feature:GeologicUnit:12 | Metamorfik gnays |
Bu tabloları kullanarak, şirketi bir sa:SamplingCompany
iç içe geçmiş bir gsml:GeologicUnit
. Bu kurulum, otomatik olarak oluşturulan şemalar yerine topluluk özellikleri tarafından tanımlanan iç içe geçmiş türleri ve ilişkileri içerdiğinden karmaşık bir özellik oluşturur.
Bu tür bir esneklik karmaşık gerçek dünya senaryolarının modellenmesi için gereklidir, ancak aynı zamanda iç içe geçmiş yapıları etkili bir şekilde yönetmek için JXPath değerlendirmesi gibi gelişmiş işleme tekniklerine dayanması nedeniyle güvenlik açıklarını da beraberinde getirir.
Güvenlik Açığı Nasıl Ortaya Çıkar?
GeoServer, karmaşık özellik türlerini (Application Schema veri depolarında bulunanlar gibi) işlemek için XPath değerlendirmesini kullanmak üzere tasarlanmıştır. Ancak yanlış kullanım nedeniyle, XPath değerlendirmesini yanlışlıkla basit özellik türlerine de uygular. Bu bir saldırı vektörü oluşturur çünkü:
- GeoServer, veri alımı sırasında özellik adlarını değerlendirmek için GeoTools kütüphanesine güvenir.
- Bu
commons-jxpath
kütüphanesi, XPath ifadelerini işlemek için kullanılan uygun doğrulamadan yoksundur, bu da XPath ifadelerini işlerken rastgele kod çalıştırabilir. - Bir saldırgan sunucuyu kontrol etmek için bu güvenli olmayan XPath yürütmesinden yararlanan kötü niyetli bir istek oluşturabileceğinden, bu kusur tüm GeoServer örneklerini potansiyel RCE güvenlik açıklarına maruz bırakır.
İstismar İş Akışına Genel Bakış
- A
POSTA
isteği şu adrese gönderilirGetPropertyValue
işlemini gerçekleştirir. Ardından GeoServer özelliği (veyavalueReference
) belirli bir özellik için. - İstenen özellik Özellik Türü Ayrıntıları tablosunda mevcutsa, GeoServer bunu normal şekilde işler.
- Ancak, mülk listelenmemişse, GeoServer, mülk listesindeki
commons-jxpath
kütüphanesinin istek parametresini bir XPath ifadesi olarak yorumlamasını sağlar. - O zamandan beri
commons-jxpath
Java kodunun doğrudan XPath'ten yürütülmesine izin veren bu geri dönüş mekanizması, potansiyel olarak kullanıcı tarafından sağlanan istek parametrelerinin uzaktan kod yürütme için kullanılmasına olanak tanır. Basitçe söylemek gerekirse, bir saldırgan RCE elde etmek için kötü amaçlı kod enjekte edebilir.
Güvenlik Açığı İstismarı ve Analizi
JXPath ve Java Yürütme Köprüsü
Bu commons-jxpath
kütüphanesi, genellikle JXPath olarak adlandırılır ve XPath sözdizimini kullanarak Java nesne grafiklerinde (JavaBeans, DOM nesneleri vb.) gezinmeyi sağlar. Örneğin, ad ve adres gibi özelliklere sahip basit bir Employee nesneniz varsa, JXPath bu özellikleri bir XML belgesindeki düğümlermiş gibi sorgulamanıza olanak tanır.
Uzantı İşlevlerinden Yararlanma
Standart fonksiyonların ötesinde JXPath, Java'ya köprü görevi gören uzantı fonksiyonlarını da destekler. Bu "Java köprüsü" çok önemlidir, çünkü örneğin Java fonksiyonlarının doğrudan XPath sorguları içinde çağrılmasına olanak tanır:
Bu köprü aracılığıyla hangi Java yöntemlerinin çağrılabileceğine ilişkin birkaç sınırlama nedeniyle, bir saldırgan exec()
işlevini (veya benzer yöntemleri) kullanarak sunucu üzerinde rastgele komutlar çalıştırabilirsiniz.
WFS GetPropertyValue
GeoServer'ın WFS'si kullanıcıların jeo-uzamsal özellikleri sorgulamasını ve değiştirmesini sağlar. Normal koşullar altında, WFS GetPropertyValue
işlemi basitçe istenen özelliği bir XML yapısı içinde döndürür.


İş Akışı Analizi
- Bir saldırgan /geoserver/wfs adresine bir POST isteği gönderir.
- GeoServer en dıştaki XML etiketini inceler-
wfs:GetPropertyValue-
hangi işlemin çalıştırılacağını belirlemek için. - GeoServer daha sonra istek parametrelerini WFS sınıfındaki ilgili yönteme aktarır. Bu senaryoda, Dispatcher isteği şu yönteme yönlendirir
GetPropertyValue
yöntem.
- DefaultWebFeatureService20 (WFS) sınıfı içinde, bu
GetPropertyValue
yöntemi, kullanıcının parametrelerini aynı addaki bir işleyiciye iletir. - İşleyicinin
run()
yöntemi talebi alır ve kritikvalueReference
kullanıcı tarafından kontrol edilen parametre.
- sırasında
run()
yöntemini kullanarak GeoServerreferenceValue
ve onundeğerlendir()
fonksiyon.
- Eğer
valueReference
GeoServer'ın önceden tanımlanmış özellikleriyle eşleşmiyorsa, GeoServer varsayılan olarakFeaturePropertyAccessor
yorumlayanvalueReference
bir XPath ifadesi olarak.
- Bu
get()
FeaturePropertyAccessor'daki yöntem şunları kullanırcommons-jxpath
XPath sorgusunu çalıştırmak için. Burada, kullanıcınınvalueReference
doğrulama yapılmadan doğrudan xpath parametresine geçirilir. aracılığıylaJXPathContext.newContext()
GeoServer, XPath sorguları için bir ortam başlatır, ardından bunlarıiteratePointers()
.
JXPath uzantı işlevlerini desteklediğinden, saldırganlar XPath ifadesine kötü amaçlı kod ekleyerek GeoServer örneğinde rastgele kod yürütülmesini tetikleyebilir.
Bu olaylar zinciri, güvenli olmayan işlemlerin nasıl valueReference
parametresi RCE'ye yol açarak savunmasız GeoServer dağıtımları için ciddi bir güvenlik tehdidi oluşturabilir.
Saldırı Simülasyonu
Bu istismarı gerçek dünya senaryosunda simüle etmek için OPSWAT Yüksek Lisans Bursiyerlerimiz GeoServer'ı yerel bir Windows makinesinde konuşlandırdı. GeoServer'a erişildiğinde aşağıdaki arayüz görüntülenmiştir.
Sunucu çalıştıktan sonra, bir saldırgan kötü niyetli bir XPath ifadesi içeren bir POST isteği göndererek güvenlik açığından yararlanabilir valueReference
/geoserver/wfs uç noktasına yönlendirin.
Sonuç: İstek gönderildikten sonra, kötü amaçlı XPath ifadesi bir sistem komutu yürütür ve Calculator uygulamasının başlatılmasını tetikler.
Hafifletme ve Öneriler
Basit bir istismar, özellikle GeoServer gibi açık kaynaklı yazılımlara dayanan projelerde bir yazılım tedarik zinciri saldırısına dönüşebilir. OPSWAT SBOM (Software Bill of Materials) teknolojisi, kod tabanınızdaki CVE-2024-36401 gibi güvenlik açıklarının belirlenmesine yardımcı olur.
Bu örnek OPSWAT SBOM'un nasıl çalıştığını göstermektedir:
- Güvenlik açıklarından etkilenen yazılım bileşenlerini tespit eder.
- Güvenlik açığının ciddiyetini değerlendirir ve sıralar - burada GeoServer CVE'leri "Kritik" olarak işaretlenmiştir.
- Etkilenen sürümü tanımlar.
- Geliştirme ekiplerinin yamaları uygulayabilmesi veya düzeltme önlemlerini derhal alabilmesi için sabit sürümü önerir.
Önerilen Diğer Adımlar
- GeoServer'ı güncelleyin: Güvenlik açığının yamalandığı GeoServer 2.25.2, 2.24.4 veya 2.23.6 (veya üstü) sürümlerine yükseltin.
- Denetim Bağımlılıkları: Güncel olmayan kütüphaneleri belirlemek için OPSWAT SBOM gibi araçları düzenli olarak kullanın (örn,
commons-jxpath
) ortamınızda. - Erişimi Kısıtlayın: Saldırı yüzeyini en aza indirmek için GeoServer'ı güvenlik duvarlarının veya kimlik doğrulama katmanlarının arkasına dağıtın.
- Güvenlik Önerilerini İzleyin: Yeni yamalardan haberdar olmak için resmi GeoServer sürüm notlarını ve CVE veritabanlarını takip edin.
OPSWAT SBOM Hakkında
OPSWAT SBOM en popüler programlama dillerini destekleyerek yazılım geliştirme ekiplerine üçüncü taraf açık kaynak kütüphaneleri, ilgili bağımlılıkları ve yükseltme için mevcut en son sürümler hakkında görünürlük sağlar. Geliştiriciler OPSWAT SBOM'u GitHub, BitBucket, GitLab, Amazon ECR, DockerHub ve daha fazlası gibi kaynak kodlarına ve konteyner hizmetlerine entegre edebilirler. SBOM hakkında daha fazla bilgi edinin.
OPSWAT araçlarını ve çözümlerini mevcut altyapınız ve iş akışlarınızla nasıl entegre edeceğinizi öğrenmek için bugün bir uzmanla görüşün: