TGViewer
Codeby Codeby @codeby_sec · 37K subscribers
Post #10082 2.94K
«Защита есть, дыра тоже есть»: как три слоя валидации в AI-платформах не спасли от RCE

Представь: ты разработчик 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/
  • ❤ 11
  • 👍 6
  • 👎 4
  • 🔥 2
More from @codeby_sec
  1. Sep 26, 2026🚩 Новые задания на платформе HackerLab! 👩‍💻 Категория Pentest Machines (Active Director…
  2. Sep 25, 2026Post #10469
  3. Sep 25, 2026Tookie-OSINT: Инструмент разведки по имени пользователя Tookie-OSINT — инструмент с открыт…
  4. Sep 24, 202614 резюме за три дня. Где вакансии? За месяц работодатели не разместили на форуме ни одной…
  5. Sep 24, 2026UDP-сканирование: ты доверяешь zenmap или запускаешь nmap руками? Дефолтный профиль zenmap…
  6. Sep 24, 2026🌐HExHTTP Инструмент для тестирования HTTP-заголовков и анализа результатов с целью выявле…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →