7 ноября 2024 г.: Дэт Фунг (Dat Phung) обнаружил критическую уязвимость в Mongoose и отправил отчёт об уязвимости в Snyk.
26 ноября 2024 г.: Mongoose выпустил версию 8.8.3 для устранения этой уязвимости.
2 декабря 2024 г.: Национальная база данных уязвимостей (NVD) раскрыла CVE-2024-53900 для этой уязвимости.
17 декабря 2024 г.: Проанализировав патч Mongoose 8.8.3, Дэт Фунг нашёл обход, который всё ещё позволял выполнение произвольного кода (RCE). Подробный отчёт об уязвимости был отправлен в Tidelift.
13 января 2025 г.: Mongoose выпустил версию 8.9.5, в которой представлен улучшенный патч, эффективно устраняющий обход.
15 января 2025 г.: Национальная база данных уязвимостей (NVD) официально раскрыла CVE-2025-23061, подчеркнув серьёзность вновь выявленной уязвимости.
Основная причина
Данная уязвимость существует из-за неполного исправления CVE-2024-53900. Хотя прямое внедрение $where заблокировано, злоумышленники могут обойти эту защиту, вкладывая операторы $where внутрь логических операторов, таких как $and, $or и т.д.
Путь выполнения уязвимого кода:
Пользователь предоставляет данные через параметр match функции populate()
Приложение использует неочищенный пользовательский ввод непосредственно в запросе match
Mongoose не очищает $where при вложении в логические операторы
Злоумышленник выполняет произвольный JavaScript на сервере MongoDB
Воздействие
Раскрытие информации: Доступ к конфиденциальным данным без надлежащей авторизации
Обход аутентификации: Получение данных, доступных только администратору
Выполнение произвольного кода: Выполнение JavaScript на сервере MongoDB
Изменение данных: Возможность изменения записей базы данных
Настройка и запуск PoC
Предварительные требования
Node.js >= 14
MongoDB, работающий локально или доступный через строку подключения
Установка
root@kitploit:~
# Install dependencies
npm install
# Optional: Use specific MongoDB URI
export MONGODB_URI="mongodb://localhost:27017/mongoose_cve_poc"
Данный PoC предоставлен только в образовательных целях. Несанкционированный доступ к компьютерным системам является незаконным. Используйте это только на системах, которыми вы владеете или на тестирование которых получили явное разрешение.