CVE-2025-23061 - Внедрение команд в Mongoose
Доказательство концепции уязвимости внедрения команд в Mongoose < 8.9.5, затрагивающей параметр match функции populate().
Детали уязвимости
Идентификатор CVE: CVE-2025-23061
Серьёзность: КРИТИЧЕСКАЯ (CVSS 9.0)
Затронутый пакет: mongoose
Уязвимые версии:
- < 6.13.6
-
= 7.0.0 < 7.8.4
-
= 8.0.0 < 8.9.5
Хронология CVE-2024-53900 и CVE-2025-23061
- 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, работающий локально или доступный через строку подключения
Установка
# Install dependencies
npm install
# Optional: Use specific MongoDB URI
export MONGODB_URI="mongodb://localhost:27017/mongoose_cve_poc"
Запуск уязвимого сервера
npm start
Сервер будет запущен на http://localhost:3000
Запуск эксплойта
В другом терминале:
node exploit.js
Ссылки
Отказ от ответственности
Данный PoC предоставлен только в образовательных целях. Несанкционированный доступ к компьютерным системам является незаконным. Используйте это только на системах, которыми вы владеете или на тестирование которых получили явное разрешение.