Уязвимость в MongoDB Core Server затрагивает множество версий: выпущены патчи

MongoDB

MongoDB опубликовала бюллетень безопасности SERVER-128125, в котором раскрыла сведения об уязвимости, затрагивающей все поддерживаемые ветки Core Server. Проблема связана с несогласованностью семантики владения памятью в функциях работы с BSON (Binary JSON - бинарный формат представления документов, используемый в MongoDB). Разработчики уже выпустили исправления для всех затронутых версий.

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

Уязвимость получила идентификатор в системе отслеживания задач SERVER-128125. Она затрагивает версии Core Server:

  • до 4.4.31 включительно;
  • 5.x ранее 5.0.34;
  • 6.x ранее 6.0.29;
  • 7.x ранее 7.0.37;
  • 8.0.x ранее 8.0.26;
  • 8.2.x ранее 8.2.11;
  • 8.3.x ранее 8.3.4.

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

В основе проблемы лежит расхождение в реализации двух родственных функций из слоя привязки BSON к движку MozJS: "bsonObjToArray" и "bsonGetImmutable". Функция "bsonGetImmutable" гарантирует, что переданный ей объект BSONObj уже является владельцем памяти (owned), прежде чем создавать обёртки для JavaScript. Функция "bsonObjToArray" не выполняла аналогичной проверки. Эта несогласованность приводила к некорректным результатам при работе с обёртками поддокументов. Другими словами, при извлечении вложенных структур через "bsonObjToArray" существовала вероятность, что данные будут интерпретированы неверно, или произойдёт обращение к освобождённой памяти.

Технически уязвимость проявляется в сценариях, когда приложение использует JavaScript-скрипты, работающие с поддокументами через драйвер MongoDB или через серверную агрегацию с использованием "$function" или "$accumulator". В таких случаях функция "bsonObjToArray" могла возвращать ссылку на данные, которые впоследствии становятся невалидными, что вело к непредсказуемому поведению - от некорректных результатов запросов до полного отказа процесса mongod. В худшем случае умелое применение этой уязвимости могло бы позволить атакующему добиться выхода за границы буфера или выполнения произвольного кода, хотя в бюллетене такие последствия прямо не подтверждены.

Исправление, предложенное инженерами MongoDB, заключается в приведении поведения "bsonObjToArray" к единому стандарту, уже используемому в "bsonGetImmutable". Теперь функция сначала проверяет, находится ли объект в состоянии владения памятью, и при необходимости копирует данные, прежде чем создавать обёртку. Это устраняет потенциальное повреждение памяти. Обновления вышли для всех затронутых веток, причём исправление помечено как полностью обратно совместимое (backwards compatible). Команды Query Integration и Backport Requested подтвердили, что патчи портированы на версии 8.3, 8.2, 8.0 и 7.0.

Пользователям MongoDB настоятельно рекомендуется как можно скорее обновить серверную СУБД (систему управления базами данных) до указанных исправленных версий. Отсутствие установки патча несёт для организаций риск неконтролируемых сбоев в работе баз данных, потенциальной потери данных и компрометации систем, обрабатывающих критическую информацию. Особенно это актуально для компаний, использующих JavaScript-выражения в конвейерах агрегации или хранящих структурированные документы с глубокой вложенностью.

Уязвимость в MongoDB Core Server обусловлена ошибкой в управлении памятью при конвертации поддокументов в массивы. Она затрагивает десятки версий продукта и может приводить к серьёзным нарушениям работы. Разработчики уже выпустили корректирующие обновления. Все инсталляции, использующие уязвимые версии, должны быть незамедлительно обновлены до ближайшей исправленной версии согласно таблице: 4.4.31, 5.0.34, 6.0.29, 7.0.37, 8.0.26, 8.2.11 или 8.3.4.

Ссылки

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