CVE-2024-36401
OSGeo GeoServer
2024-07-15
OSGeo GeoServer GeoTools contains an improper neutralization of directives in dynamically evaluated code vulnerability due to unsafely evaluating property names as XPath expressions. This allows unauthenticated attackers to conduct remote code execution via specially crafted input.
Технический анализ и план устранения
Суть уязвимости
CVE-2024-36401 — это критическая уязвимость удаленного выполнения кода (RCE) в GeoServer, связанная с небезопасной обработкой имен свойств в библиотеке GeoTools. Проблема заключается в том, что входные данные, передаваемые пользователем, некорректно интерпретируются как выражения XPath.
Злоумышленник может отправить специально сформированный OGC-запрос (например, через WFS, WMS или WPS), содержащий вредоносное выражение. Поскольку GeoServer выполняет эти выражения с помощью библиотеки Apache Commons JXPath, это позволяет выполнить произвольный Java-код в контексте процесса GeoServer без аутентификации.
Как исправить
Основным и рекомендуемым способом устранения уязвимости является обновление GeoServer до версий, в которых библиотека GeoTools была исправлена.
- Определите текущую версию GeoServer через Web Administration Interface или файл
VERSION.txt. - Скачайте обновленную версию с официального сайта geoserver.org. Исправления включены в следующие релизы:
- 2.23.6
- 2.24.4
- 2.25.2
- Если вы используете GeoServer в Docker, обновите образ до актуального тега.
docker pull docker.osgeo.org/geoserver:2.25.2
- Если обновление всей платформы затруднено, замените вручную JAR-файл
gt-complex-*.jarв директорииWEB-INF/libна исправленную версию из соответствующего патча GeoTools.
Временные меры
Если немедленное обновление невозможно, необходимо применить меры по снижению риска, ограничив функциональность JXPath.
Вариант 1: Удаление уязвимого компонента (если не используется расширение App-Schema)
Удаление библиотеки gt-complex предотвратит эксплуатацию, но может нарушить работу некоторых функций (например, Application Schema или работу с GML).
rm webapps/geoserver/WEB-INF/lib/gt-complex-*.jar
Вариант 2: Использование Web Application Firewall (WAF)
Настройте правила фильтрации для блокировки подозрительных параметров в GET и POST запросах. Ищите вхождения функций Java в параметрах запроса, таких как:
- java.lang.Runtime
- java.lang.ProcessBuilder
- Runtime.getRuntime().exec()
Вариант 3: Ограничение прав процесса Запустите GeoServer от имени пользователя с минимальными привилегиями в системе и используйте песочницу (например, контейнеризацию с Read-Only файловой системой), чтобы минимизировать ущерб в случае взлома.
docker run --read-only -u 1000:1000 geoserver:2.25.1