Разработчики GeoTools, популярной открытой Java-библиотеки для работы с геопространственными данными, выпускают обновления, закрывающие критическую уязвимость. Проблема связана с внедрением SQL-кода (SQL-инъекцией) в функцию фильтрации данных стандарта OGC (Open Geospatial Consortium, открытый консорциум, определяющий стандарты для геоинформационных систем). Уязвимость проявляется при использовании компонента JDBCDataStore и других хранилищ данных, включая PostGIS - расширение PostgreSQL для работы с геоданными. Вектор атаки сетевой, для эксплуатации не требуются учётные данные, поэтому риску подвержены все сервисы, использующие затронутые версии библиотеки.
Детали уязвимости
GeoTools долгое время считается стандартным инструментом для обработки пространственных данных в Java-приложениях. Её используют тысячи проектов - от небольших сервисов до крупных государственных информационных систем, включая картографические платформы, системы мониторинга транспорта и управления инфраструктурой. Поэтому уязвимость такого уровня опасности привлекает внимание злоумышленников, а её устранение требует скорейшего обновления во всех затронутых системах.
Проблема затрагивает функцию jsonArrayContains, которая позволяет проверять наличие элементов в массивах JSON при работе с базой данных PostGIS версии 12 и выше. При формировании SQL-запроса содержимое переданного значения подставляется в него без корректной фильтрации, из-за чего атакующий может внедрить собственную SQL-команду. Это позволяет не только читать и изменять данные в базе, но и выполнять произвольные SQL-выражения. Если база данных запущена с повышенными привилегиями, последствия усиливаются: атакующий может выполнить код на сервере и получить полный контроль над системой. В случае успешной атаки злоумышленник способен использовать базу для проникновения во внутреннюю сеть организации и получить доступ к другим ресурсам.
Особенность этой находки в том, что она представляет собой регрессию ранее исправленной уязвимости CVE-2023-25158. Та уязвимость имела рейтинг 9,8 по шкале CVSS и затрагивала другие функции фильтрации. Тогда разработчики рекомендовали в качестве меры снижения риска включить подготовленные операторы (prepared statements) и отключить функции кодирования. Однако для новой проблемы эти меры не действуют: функция jsonArrayContains остаётся уязвимой даже при их применении. Исследователи называют это серьёзным изъяном в предыдущем исправлении, поскольку злоумышленники могли знать о недостатке и использовать его до выхода патча.
На данный момент для новой уязвимости не присвоен идентификатор CVE, что не редкость для свежих находок. Тем не менее специалисты уже фиксируют повышенный интерес к проблеме со стороны злоумышленников: в интернете появились обсуждения, выросли объёмы сканирования и вредоносного трафика, направленного на поиск уязвимых систем. Крупномасштабных атак с доказанным ущербом пока не зафиксировано, но ситуация может измениться быстро, поскольку механизм атаки несложен и не требует сложных инструментов. По опыту прошлых инцидентов, активная эксплуатация часто начинается в течение нескольких дней после публикации технических деталей.
Судя по опубликованной разработчиками информации, уязвимыми считаются версии 35.0, а также выпуски веток 33 и 34, начиная с 33.1 и 34.0 соответственно. Это означает, что под угрозой находятся практически все актуальные установки GeoTools, которые не получили свежих обновлений. Разработчики закрыли проблему в версиях 35.1, 34.5 и 33.6. Дополнительный риск создаёт то, что прежние рекомендации по настройке, которые могли бы смягчить атаку, в данном случае бесполезны.
Пользователям настоятельно рекомендуется обновить библиотеку до одной из указанных версий. Разработчикам, использующим менеджер зависимостей Maven, достаточно указать актуальную версию в конфигурации проекта. Тем, кто не может сразу выполнить обновление, временного решения в полном смысле нет. В таком случае стоит ограничить сетевой доступ к сервисам, которые используют GeoTools, и временно отключить функцию jsonArrayContains в конфигурации, если это допустимо с точки зрения бизнес-логики. Администраторам стоит также проверить логи на предмет необычных SQL-запросов, содержащих обращения к этой функции. Обновление необходимо провести на всех серверах, где установлен GeoTools, включая тестовые и резервные контуры.
Эта находка напоминает, что даже хорошо известные уязвимости могут возвращаться после исправлений. В случае с GeoTools проблема возникла в новой функции, которая появилась в более новых версиях, и команда проекта закрыла её отдельным патчем. Всем разработчикам, чьи приложения строятся на этой библиотеке, важно отслеживать обновления не только для критических, но и для смежных компонентов обработки геоданных. Своевременный переход на исправленные версии остаётся единственной надёжной защитой от этого класса атак.
Ссылки