Драйверы MongoDB допускают повреждение памяти и подмену запросов к облачному KMS

MongoDB

В клиентских компонентах MongoDB обнаружена серия уязвимостей, затрагивающих драйверы для языков C, C++ и PHP, библиотеку шифрования libmongocrypt и расширение MongoDB для Visual Studio Code. Проблемы позволяют нарушить целостность и конфиденциальность данных, вызвать аварийное завершение приложений, обойти политику безопасности и выполнить код на машине разработчика. Особо выделяется дефект в libmongocrypt, который дает возможность подменять запросы к облачному сервису управления ключами (KMS) и нейтрализовать клиентское шифрование.

Детали уязвимостей

Большинство уязвимостей связано с обработкой данных в форматах JSON и BSON. При разборе входящего JSON в драйверах возникают ошибки преобразования чисел, из-за которых библиотека неправильно вычисляет длину данных. Например, в C-драйвере некорректное преобразование размера может привести к тому, что очень большое текстовое значение молча обрежется или исчезнет из документа, хотя операция будет считаться успешной. Это создает расхождение между тем, что отправил пользователь, и тем, что реально сохранится в базе.

Другая ошибка в этом же парсере на 32-битных системах вызывает переполнение целого числа при расчете размера буфера. В результате копирование данных происходит через уже освобожденную область памяти, что приводит к краху приложения. Аналогичная проблема с усечением длины присутствует в C++-драйвере: при обработке очень большого JSON-документа возможен выход за границы выделенной памяти и раскрытие ее содержимого или молчаливое принятие лишь части документа.

В C-драйвере также найдена уязвимость в механизме проверки сертификатов TLS. В коде, который обрабатывает список адресов для проверки статуса сертификата, при получении специально сформированных данных происходит двойное освобождение одного и того же блока памяти. Поскольку атака ведется со стороны доверенного сервера, подключенный к нему клиент может неожиданно завершиться. Эксплуатация не требует аутентификации, что повышает риск для публичных сервисов.

Отдельные дефекты касаются драйвера для PHP и расширения для Visual Studio Code. В PHP-драйвере ошибка чтения за границей буфера при декодировании вложенных BSON-документов позволяет неавторизованному отправителю включить в сообщение об ошибке небольшой фрагмент памяти приложения. В расширении MongoDB для VS Code проблема иного рода: специальные символы в строке подключения не экранируются перед помещением в команду для встроенного терминала. Если разработчик откроет строку подключения из ненадежного источника и запустит оболочку, злоумышленник сможет встроить в команду произвольные аргументы. Подтверждение, которое показывает интерфейс, не отображает сам текст строки, поэтому пользователь лишен возможности заметить подмену.

Наибольший интерес вызывает уязвимость, связанная с клиентским шифрованием. В библиотеке libmongocrypt обнаружена подмена запросов типа CSRF (межсайтовая подделка запроса) к Google Cloud KMS, которая отслеживается как CVE-2026-84962. Атакующий с правом записи в хранилище ключей может вставить в идентификатор ключа символы перевода строки. Когда авторизованный клиент использует такой идентификатор, библиотека формирует HTTP-запрос к облачному KMS, и внедренные символы позволяют превратить его в произвольный аутентифицированный вызов от имени легитимного пользователя. Таким образом, доступ к базе данных расширяется до контроля над облачными ключами, а клиентское шифрование, которое должно защищать данные даже при компрометации сервера, перестает выполнять свою функцию.

Важно понимать, что затронутое программное обеспечение выступает доверенным строительным блоком для множества приложений. Разработчики редко ожидают от драйверов уязвимостей в обработке входных данных, однако именно такие компоненты обрабатывают непроверяемые данные из Сети и ответы серверов. Многие из описанных проблем эксплуатируются удаленно и без аутентификации, если приложение принимает JSON или BSON от посторонних лиц.

MongoDB выпустила исправленные версии для всех затронутых продуктов. Необходимо обновить C-драйвер до версии 1.30.9 или 2.5.2 в зависимости от используемой ветки, C++-драйвер до версии 4.5.2, libmongocrypt до версии 1.20.4, PHP-драйвер до версии 1.21.8, 2.1.9 или 2.5.1, а расширение MongoDB для VS Code - до версии 1.17.1. Пользователям стоит обновить не только локальные пакеты, но и зависимости в контейнерах и системах непрерывной интеграции, а затем перезапустить сервисы.

Проектам с клиентским шифрованием необходимо отнестись к исправлению особенно внимательно, поскольку для них последствия KMS-уязвимости выходят за пределы отдельной библиотеки. Перед обновлением стоит проверить, какие версии драйверов используются в продакшене: многие приложения собираются со статически слинкованными библиотеками, поэтому для них потребуется пересборка.

Обнаруженные проблемы показывают, что безопасность экосистемы MongoDB зависит не только от серверных обновлений, но и от клиентских библиотек. Производители драйверов все чаще находят ошибки памяти в коде, который считается надежным. Это напоминает о необходимости регулярно обновлять зависимости и не оставлять без внимания бюллетени безопасности, касающиеся вспомогательных компонентов.

Ссылки

Комментарии: 0