Представь: ты разработчик Flowise и добавил allowlist из пяти команд, функцию проверки инъекций и валидатор аргументов. Три слоя защиты. Кажется, достаточно. Потом приходит исследователь и пишет
npx — легитимная команда, allowlist доволен — а следом добавляет -c "touch /tmp/pwn". Файл создан. Хост скомпрометирован.Именно так работает CVE-2026-40933 в Flowise — open-source конструкторе LLM-потоков с drag & drop интерфейсом и примерно 200 000 активных инстансов. CVSS 9.9, критический. Для эксплуатации достаточно любого зарегистрированного аккаунта — даже с минимальными правами.
🔍 Корень проблемы — классический провал allowlist-подхода. Платформа проверяет имя исполняемого файла, но игнорирует семантику аргументов.
npx в списке разрешённых? Отлично. А то, что npx -c выполняет произвольный shell-код — уже не её забота. Аналогично работают python -c и node -e. Sanitization-функции ищут паттерны вроде ; rm -rf / в строке команды, но не разбирают контекст флагов.На момент раскрытия уязвимости около 7 000 Flowise-инстансов были публично доступны в интернете. Типичная история: платформу разворачивают «на попробовать», а потом она обрастает prod-интеграциями с API-ключами к OpenAI, Anthropic, внутренним базам данных. Одна CVE — и задача «пробить периметр» превращается в «собрать ключи от всей AI-инфраструктуры».
🎯 Рядом по таймлайну — CVE-2026-40911 в AVideo (CVSS 10.0). Там другой паттерн: два
eval()-sink на клиентской стороне выполняют произвольный JavaScript в браузере каждого пользователя, подключённого к WebSocket. Без аутентификации. Вообще без неё.Что объединяет обе CVE? Антипаттерны, которые убивали самописные PHP-скрипты пять лет назад —
eval() и subprocess.exec() без санитизации — теперь живут в современных AI-платформах с красивым интерфейсом и миллионами загрузок. Доверие к пользовательским данным заложено прямо в архитектуру.⚠️ Несколько практических выводов, если ты тестируешь или защищаешь AI-инфраструктуру:
• Allowlist по имени бинарника — не защита, если не контролируются аргументы.
npx, python, node — все умеют выполнять произвольный код через флаги.• Flowise < 3.1.0 — обновляй немедленно. Патч реализует строгую валидацию аргументов в MCP stdio адаптере.
• Если Flowise развёрнут внутри периметра — проверь, не накопились ли там prod-ключи от OpenAI или внутренних сервисов.
💡 Интересный нюанс для пентестеров: даже если UI Flowise ограничивает выбор транспорта только HTTP/SSE, backend может принять stdio-конфигурацию напрямую через API. Перехвати запрос в Burp, замени
transport_type с http на stdio, добавь command и args — backend не в курсе, что UI это запретил.Полный разбор обоих векторов, воспроизводимые шаги, маппинг на MITRE ATT&CK и индикаторы компрометации — в статье.
https://codeby.net/threads/rce-uyazvimosti-v-ai-platformakh-cve-2026-40933-i-cve-2026-40911-ot-allowlist-bypass-do-eval-injection.92944/
