PraisonAI: run_stream обходит запрет опасных инструментов (CVE-2026-56838)
В PraisonAI обнаружена уязвимость, из-за которой потоковый путь выполнения рецепта не проверяет политику опасных инструментов. Атакующий или неосторожный пользователь может запустить execute_command и другие заблокированные инструменты через recipe.run_stream(). Проблема оценена как HIGH — CVSS 7.8.
Подробности
Уязвимость затрагивает PraisonAI версий с 4.5.87 до 4.6.59 включительно (до исправления). По умолчанию система блокирует потенциально опасные инструменты, если вызывающая сторона явно не передала allow_dangerous_tools=True. Обычный путь recipe.run() корректно применяет эту политику через функцию _check_tool_policy(). Однако потоковый путь recipe.run_stream() загружает тот же рецепт, проверяет зависимости и передаёт управление в _execute_recipe(), не выполняя проверку политики опасных инструментов. В результате рецепт, который честно объявляет execute_command в разделе requires.tools файла TEMPLATE.yaml, будет отклонён при вызове recipe.run(), но беспрепятственно дойдёт до движка исполнения через recipe.run_stream() даже при allow_dangerous_tools=False. Это позволяет обойти защитный механизм и выполнить команды в обход установленных ограничений — что особенно опасно в сценариях, где рецепты загружаются из недоверенных источников или генерируются автоматически. Тип уязвимости — обход политики безопасности (policy bypass) в механизме исполнения рецептов. Основной риск связан с выполнением произвольных команд на хосте, где работает PraisonAI.Что делать
Разработчики выпустили исправление в версии 4.6.59 — обновление является основным и достаточным решением. Рекомендуется как можно скорее обновить PraisonAI до 4.6.59 или более поздней версии. Если обновление невозможно в краткосрочной перспективе, следует рассмотреть временные митигации: ограничить доступ к вызову recipe.run_stream() для недоверенных пользователей и рецептов, провести аудит существующих TEMPLATE.yaml на предмет неожиданного объявления execute_command и других опасных инструментов в requires.tools, а также усилить изоляцию среды исполнения (контейнеризация, минимальные привилегии процесса). Отдельно стоит проверить журналы на предмет вызовов run_stream() с рецептами, содержащими опасные инструменты, — это может указывать на попытки эксплуатации.Итог
CVE-2026-56838 — наглядный пример того, как дублирование логики в разных путях исполнения приводит к рассинхронизации проверок безопасности. Потоковый API обходил политику, которая корректно работала в обычном режиме, открывая дорогу к выполнению команд. Исправление доступно в версии 4.6.59; обновление рекомендуется выполнить в приоритетном порядке, а до него — ограничить использование run_stream() и проверить рецепты на наличие опасных инструментов.Источник: CVE Project (cvelistV5)
