Клиентские компоненты MongoDB открывают путь к внедрению операторов и обходу шифрования

MongoDB

Клиентские компоненты MongoDB содержат несколько уязвимостей, которые позволяют внедрять операторы в отправляемые запросы и обновления, обходить клиентское шифрование полей и вызывать исчерпание памяти процесса. Затронуты драйвер C, драйвер C# для платформы .NET, библиотека шифрования libmongocrypt и настольный клиент Compass. Исправления уже опубликованы, идентификаторы CVE присвоил сам вендор. Сведений об эксплуатации этих уязвимостей в реальных атаках источники не приводят.

Затронутые версии и исправления

Границы затронутых версий различаются по компонентам. Драйвер C уязвим в ветках с 1.6.0 до 1.30.14 и с 2.0.0 до 2.5.7; исправления вышли в 1.30.14 и 2.5.7. Драйвер C# закрыт в версии 3.13.0, libmongocrypt - в 1.21.1, Compass - в 1.53.1. Отдельно в записи об уязвимости шифрования назван пакет MongoDB.Libmongocrypt для .NET: затронуты версии с 1.0.0 по 1.12.0, а исправленная версия для этого пакета в источнике не указана.

Внедрение операторов в запросы и обновления

Часть проблем драйвера C# связана с тем, что служебные символы из пользовательских данных попадают в структуру запроса. В операции FindOneAndReplace драйвер не отвергает документ замены, если его верхние имена полей начинаются с символа доллара. Сервер понимает такой документ как набор операторов обновления, поэтому вместо полной замены меняются отдельные поля совпавшего документа. Оценка по шкале CVSS 4.0 здесь 5.3 из 10, нужен обычный доступ на чтение и запись через приложение.

Тот же приём работает в LINQ-запросах (LINQ - способ строить запросы средствами языка C#). Точки и символы доллара в ключах словарей, именах полей и идентификаторах фильтра по элементам массива меняют путь поля на стороне сервера. Запрос или обновление начинают затрагивать другие поля и документы, чем описано в выражении. Проблема CVE-2026-114648 получила оценку 7.2 из 10, причём пользовательские строки доходят до этих позиций без проверки.

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

Ещё один механизм связан с форматом BSON (двоичное представление документов MongoDB). Когда приложение строит "сырой" документ из внешних байтов, драйвер не сверяет заявленную внутри длину с фактическим размером данных. Из-за этого в отправляемую команду можно добавить лишние поля или убрать существующие, не имея собственного доступа к базе. Сходным образом лишние элементы GeoJSON с именами служебных полей создают дубликаты ключей, и сервер принимает последнее значение, подменяя координаты или тип геометрии.

Обход шифрования, утечка данных и отказ в обслуживании

Одна из проблем обесценивает клиентское шифрование полей на Windows. При не-ASCII имени базы данных внутреннее преобразование кодировки искажает его, и операция перестаёт сопоставляться с настроенными правилами шифрования. В результате поля, которые должны уходить на сервер зашифрованными, сохраняются открытым текстом, причём сообщения об ошибке нет. Оценка по CVSS 4.0 - 6.9 из 10, затронуты версии драйвера C# начиная с 2.10.0.

Похожий исход даёт построитель схем шифрования. Имя поля, переданное приложением, попадает в позицию регулярного выражения без экранирования. Правило защиты либо не срабатывает вовсе, либо применяется шире задуманного, и часть данных остаётся в открытом виде. Действий пользователя для этого не требуется; оценка - 7.1 из 10, уязвимы версии с 3.5.0.

Третий случай связан с разбором массивов BSON. Драйвер читает данные через буфер, который поток использует повторно и не очищает. Если подать искажённый массив, разбор выходит за границы записанных байтов и возвращает приложению остатки чужих запросов с того же потока. Аутентификация не нужна, оценка - 6.3 из 10, затронуты версии с 2.26.0.

Отдельного внимания требует обход аутентификации по клиентскому сертификату. Драйвер сравнивает сертификаты только по издателю и серийному номеру, когда решает, могут ли два клиента делить пул соединений. Пользователь без закрытого ключа, но с копией этих двух значений получает соединения, аутентифицированные чужим сертификатом. Условие - оба клиента созданы в одном процессе; оценка - 7.6 из 10.

Замыкает список исчерпание памяти, описанное в CVE-2026-114644. Библиотека BSON ведёт таблицу символов, которая не очищается до завершения процесса. При разборе недоверенного ввода её объём ничем не ограничен, поэтому память растёт, пока приложение не перестанет отвечать. Оценка по CVSS 4.0 равна 8.2 из 10; серверные компоненты MongoDB не затронуты.

Драйвер C, libmongocrypt и Compass

В драйвере C переполняется буфер в керберос-аутентификации Windows (SSPI - программный интерфейс поддержки безопасности). При очень длинном имени пользователя в настройках подключения 32-битная длина переполняется, буфер выделяется меньше нужного, и драйвер пишет за его границы. Атака локальная: нужен контроль над настройками клиента и высокие права, а сборка должна использовать нативный механизм аутентификации Windows. Оценка - 5.7 из 10.

libmongocrypt собирает HTTP-запросы к внешним службам управления ключами AWS, Azure и GCP из значений, которые не проверяются и не кодируются. Речь о документах хранилища ключей, настройках провайдера и ответах службы. Пользователь с правом записи в коллекцию ключей может изменить структуру запроса и добавить в подписываемое тело или токен лишние утверждения. Оценка - 6.0 из 10, исправление входит в 1.21.1.

Compass доверяет сертификатам промежуточных центров eMudhra, которые вендор называет восстановимыми: они остаются в корневом хранилище Electron (среда, на которой построен клиент). Обновление до 1.53.1 включает Electron 44.9.1 и убирает эти сертификаты из доверенных. Оценка - 7.6 из 10, для использования нужны действия пользователя.

Практический вывод прост: обновление закрывает весь набор проблем, отдельных обходных мер вендор не называет. Драйверам нужны версии 1.30.14, 2.5.7 и 3.13.0, библиотеке шифрования - 1.21.1, клиенту Compass - 1.53.1. Приложениям, которые принимают BSON-документы, имена полей или ключи словарей от пользователей, обновление нужно в первую очередь: именно такие сценарии превращают эти уязвимости во внедрение запросов и утечку данных.

Ссылки

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