GeoServer SQL Injection (CVE-2023–25157 & CVE-2023–25158)
Introduction
GeoServer adalah server perangkat lunak sumber terbuka yang ditulis dalam bahasa Java yang memungkinkan pengguna untuk berbagi dan mengedit data geospasial. Pada tanggal 6 Juni 2023, seorang peneliti keamanan mengungkapkan dua kerentanan injeksi SQL di GeoServer, yang dilacak sebagai CVE-2023–25157 dan CVE-2023–25158.
Technical Details
Kerentanan ini disebabkan oleh kegagalan untuk membersihkan input yang disediakan pengguna dengan benar dalam parameter CQL_FILTER pada protokol WFS dan WMS. Parameter ini digunakan untuk menentukan ekspresi filter yang digunakan untuk memilih fitur dari set data geospasial.
Penyerang dapat mengeksploitasi kerentanan ini dengan menyuntikkan pernyataan SQL berbahaya ke dalam parameter CQL_FILTER. Hal ini dapat memungkinkan penyerang untuk mengeksekusi perintah SQL sewenang-wenang pada basis data GeoServer, yang dapat menyebabkan akses atau modifikasi data yang tidak sah, penolakan layanan, atau serangan lainnya.
Kerentanan telah ditambal di GeoServer versi 2.21.4 dan 2.22.2. Pengguna versi yang terpengaruh disarankan untuk melakukan upgrade sesegera mungkin.
Sementara itu, pengguna dapat mengurangi kerentanan dengan menonaktifkan pengaturan fungsi penyandian PostGIS Datastore dan mengaktifkan pengaturan PostGIS DataStore preparedStatements.
Impact of the Vulnerabilities
Dampak dari kerentanan ini tergantung pada hak istimewa pengguna yang mengeksploitasinya. Seorang penyerang dengan hak istimewa administrator berpotensi mendapatkan kendali penuh atas server GeoServer. Seorang penyerang dengan hak istimewa yang lebih rendah masih bisa mengakses data sensitif atau mengganggu ketersediaan server.
GeoServer terutama dibangun di atas Spring Framework, namun juga menggunakan sejumlah pustaka dan kerangka kerja lain, termasuk:
GeoTools:
Perpustakaan Java sumber terbuka yang menyediakan alat untuk data geospasial. GeoServer menggunakan GeoTools untuk banyak fungsi intinya, seperti pembacaan, penulisan, dan transformasi data.- Validator Hibernasi: Ini digunakan untuk validasi bean.
- Java Topology Suite (JTS): Pustaka perangkat lunak Java sumber terbuka yang menyediakan model objek untuk geometri planar bersama dengan seperangkat fungsi geometris dasar. GeoServer menggunakannya untuk operasi geometris seperti menghitung kotak pembatas.
- Apache Wicket: Ini digunakan untuk antarmuka admin web. Ini adalah kerangka kerja aplikasi web berbasis komponen yang mirip dengan JavaServer Faces dan Tapestry.
- Log4J: Ini digunakan untuk penebangan.
Vulnerabilities
Kerentanan yang dimaksud tertanam kuat di dalam filter dan ekspresi fungsi yang didefinisikan oleh standar Open Geospatial Consortium (OGC). Ekspresi ini membentuk tulang punggung kueri dan manipulasi data geospasial, yang memainkan peran penting dalam fungsionalitas sistem seperti GeoServer dan GeoTools.
Ketika kerentanan ini dieksploitasi, mereka dapat menyebabkan pelanggaran keamanan yang serius. Pengungkapan informasi yang tidak sah merupakan masalah utama, karena penyerang berpotensi mengakses data sensitif yang tersimpan dalam database. Modifikasi yang tidak sah adalah hasil potensial lainnya, dengan penyerang dapat memanipulasi data untuk keuntungan mereka. Selain itu, kerentanan ini juga dapat memfasilitasi gangguan layanan, dengan eksploitasi yang berhasil dapat menyebabkan tidak tersedianya layanan.
Berikut ini adalah analisis mendalam dari setiap kerentanan yang teridentifikasi. Setiap kerentanan dieksplorasi secara terperinci, membahas karakteristik spesifiknya, kondisi yang mengarah pada manifestasinya, dan efek potensial dari eksploitasinya. Berikut ini adalah rincian kerentanan yang ditemukan untuk GeoServer:
PropertyIsLike
filter: kerentanan ini muncul ketika filter PropertyIsLike digunakan dengan bidang String bersama dengan Store berbasis basis data relasional apa pun, PostGIS DataStore dengan fungsi penyandian yang diaktifkan, atau mosaik gambar apa pun dengan indeks yang disimpan dalam basis data relasional.strEndsWith
function: kerentanan ini muncul ketika fungsi strEndsWith digunakan dengan PostGIS DataStore dengan fungsi encode yang diaktifkan.strStartsWith
function: kerentanan ini ditemukan ketika fungsi strStartsWith digunakan dengan PostGIS DataStore dengan fungsi encode yang diaktifkan.FeatureId
filter: kerentanan ini hadir ketika filter FeatureId digunakan dengan tabel database apa pun yang memiliki kolom kunci utama String dan ketika pernyataan yang disiapkan dinonaktifkan.jsonArrayContains
function: Kerentanan ini ditemukan ketika fungsi jsonArrayContains digunakan dengan bidang String atau JSON dan dengan PostGIS atau Oracle DataStore (hanya di GeoServer 2.22.0 dan versi yang lebih baru).DWithin
filter: kerentanan ini ditemukan ketika filter DWithin digunakan dengan Oracle DataStore.
Dan berikut ini adalah rincian kerentanan yang ditemukan untuk GeoTools:
PropertyIsLike
filter:- membutuhkan PostGIS DataStore dengan fungsi penyandian yang diaktifkan atau JDBCDataStore (semua basis data relasional) dengan bidang String (tanpa mitigasi)
strEndsWith
function: membutuhkan PostGIS DataStore dengan fungsi penyandian yang diaktifkanstrStartsWith
function: membutuhkan PostGIS DataStore dengan fungsi penyandian yang diaktifkanFeatureId
filter: membutuhkan JDBCDataStore (semua basis data relasional) dengan pernyataan yang telah disiapkan dinonaktifkan dan tabel dengan kunci utama String (Oracle tidak terpengaruh, SQL Server dan MySQL tidak memiliki pengaturan untuk mengaktifkan pernyataan yang telah disiapkan, PostGIS memiliki pengaturan tersebut)jsonArrayContains
function: membutuhkan PostGIS dan Oracle DataStore dengan bidang String atau JSONDWithin
filter: hanya terjadi di Oracle DataStore, tidak ada mitigasi
Mitigation Strategies
Strategi mitigasi berikut ini dapat digunakan untuk melindungi dari CVE-2023–25157 dan CVE-2023–25158:
- Upgrade to GeoServer versions 2.21.4 or 2.22.2.
- Disable the PostGIS Datastore encode functions setting.
- Enable the PostGIS DataStore preparedStatements setting.
- Use a web application firewall (WAF) to filter malicious requests.
- Implement strong password policies and user authentication.
- Monitor your GeoServer server for signs of unauthorized activity.
References
Security Advisory: https://github.com/geoserver/geoserver/security/advisories/GHSA-7g5f-wrx8-5ccf