Библиотека JetBrains Exposed содержит уязвимость класса "внедрение SQL-кода". Несколько её функций принимают строковые аргументы и подставляют их в запрос без проверки. Если такие строки приходят из внешнего источника, приложение открывает путь к выполнению чужих команд в базе. Вендор оценил проблему в 9,8 балла по шкале CVSS (общая система оценки уязвимостей). Идентификатор - CVE-2026-108474, исправление появилось в версии 1.5.1.
Уязвимость CVE-2026-108474 в библиотеке JetBrains Exposed
Exposed - набор инструментов для работы с базами данных из программ на языке Kotlin. Библиотека сама собирает SQL-запросы, поэтому разработчику не нужно писать их вручную. Подключают её как обычную зависимость, и в готовом продукте она оказывается рядом с остальным кодом. Обновлять такую зависимость приходится отдельно от правок в самом приложении.
Ошибка в том, что часть функций принимает строку и вставляет её в текст запроса как есть. База данных не отличает данные от команды, когда разработчик передал их одной строкой. Злоумышленнику достаточно попасть своим текстом в такой аргумент, чтобы дописать запрос. Дальше он читает чужие таблицы, меняет или удаляет записи. Масштаб ущерба зависит от прав, под которыми приложение работает с базой.
Класс ошибки в описании - CWE-89, неправильная обработка специальных символов в командах SQL. Это один из самых старых типов уязвимостей в приложениях, работающих с данными. Возвращается он каждый раз, когда запрос собирают склейкой строк вместо параметров. Здесь та же причина, только на уровне библиотеки. Ошибку допустили не в конечном продукте, а в общем коде, который этот продукт использует.
Атаку можно провести по сети, учётная запись и участие пользователя не нужны. Вендор присвоил проблеме самую высокую категорию в своей шкале. NVD (Национальная база данных уязвимостей США) собственную оценку пока не выставила и отдельно отмечает расхождение с баллом JetBrains. Об использовании уязвимости в реальных атаках в опубликованных данных не сообщается.
Последствия для организации выходят за пределы базы: утечка персональных сведений, испорченные записи, остановка сервиса. Что именно произойдёт, зависит от того, какие операции выполняет приложение и насколько широки его права. При этом попытка не требует действий человека на стороне жертвы.
Затронуты все выпуски Exposed до 1.5.1. В группе риска - серверные приложения и внутренние сервисы на Kotlin, которые передают пользовательские строки в эти функции. Пользователи готового продукта сами ничего не заметят. Уязвимость находится на стороне сервера, а не в браузере. Проверить версию библиотеки можно в файле зависимостей или в отчёте менеджера пакетов.
Исправление - версия 1.5.1. Обновление зависимости закрывает проблему, но только после пересборки и повторного развёртывания приложения. Если обновление откладывается, из этих функций нельзя передавать строки, собранные из внешних данных. Вместо склейки подойдут параметризованные запросы, где значение и команда разделены. Права учётной записи базы разумно урезать до необходимого минимума, чтобы ограничить ущерб от удачного попадания. Полезно и включить проверку зависимостей в конвейер сборки: подобные ошибки приходят вместе с чужими библиотеками. Сведения о закрытой версии JetBrains приводит на странице исправленных проблем безопасности.
Внедрение SQL-кода держится в списке распространённых проблем не первый десяток лет. Ошибка в одной библиотеке затрагивает сразу множество продуктов, а обновление зависимости легко отложить. Из-за этого уязвимости в инструментах для работы с данными остаются заметным риском для тех, кто собирает приложения из готовых компонентов.
Ссылки
- https://nvd.nist.gov/vuln/detail/cve-2026-108474
- https://www.jetbrains.com/privacy-security/issues-fixed/?product=Exposed