PraisonAI — это система мультиагентных команд. До версии 4.5.128 песочницу Python на основе AST от PraisonAI можно было обойти с помощью трамплина type.__getattribute__, что позволяло выполнять произвольный код при запуске ненадежного кода агента. Функция _execute_code_direct в praisonaiagents/tools/python_tools.py использует фильтрацию AST для блокировки опасных атрибутов Python, таких как __subclasses__, __globals__ и __bases__.
Однако фильтр проверяет только узлы ast.Attribute, допуская обход. Песочница использует фильтрацию доступа к атрибутам на основе AST, но не учитывает динамическое разрешение атрибутов с помощью встроенных методов, таких как type.getattribute, что приводит к неполному соблюдению ограничений безопасности. Строка «__subclasses__» является константой ast., а не атрибутом ast., поэтому она никогда не проверяется на наличие списка заблокированных объектов.
Эта уязвимость исправлена в версии 4.5.128.
Показать оригинальное описание (EN)
PraisonAI is a multi-agent teams system. Prior to 4.5.128, PraisonAI's AST-based Python sandbox can be bypassed using type.__getattribute__ trampoline, allowing arbitrary code execution when running untrusted agent code. The _execute_code_direct function in praisonaiagents/tools/python_tools.py uses AST filtering to block dangerous Python attributes like __subclasses__, __globals__, and __bases__. However, the filter only checks ast.Attribute nodes, allowing a bypass. The sandbox relies on AST-based filtering of attribute access but fails to account for dynamic attribute resolution via built-in methods such as type.getattribute, resulting in incomplete enforcement of security restrictions. The string '__subclasses__' is an ast.Constant, not an ast.Attribute, so it is never checked against the blocked list. This vulnerability is fixed in 4.5.128.
Характеристики атаки
Последствия
Строка CVSS v3.1