🔴 严重 | CVE-2026-47392 — PraisonAI is a multi-agent teams system. Prior to ...
🔴 【深度分析】严重安全漏洞:CVE-2026-47392
CVSS 评分: 严重(9.9)🔴 状态: Deferred 发布时间: 2026-07-21
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-47392 |
| CVSS 评分 | 9.9 🔴 |
| 严重程度 | 严重 |
| CVSS 向量 | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| CWE 分类 | CWE-184,CWE-693 |
| 发布时间 | 2026-07-21 |
| 最后更新 | 2026-07-21 |
| 状态 | Deferred |
| 数据来源 | security-advisories@github.com |
⚠️ CVSS 评分:9.9(严重)
攻击向量: 网络(AV:N) | 攻击复杂度: 低(AC:L) | 所需权限: 低(PR:L) | 用户交互: 无(UI:N)
影响范围: 改变(S:C) | 机密性/完整性/可用性: 全部高(C:H/I:H/A:H)
漏洞概述
CVE-2026-47392 是 PraisonAI 多智能体系统中的一个严重沙箱逃逸漏洞,影响其代码执行函数 execute_code()。攻击者只需拥有低权限(如普通用户或代理角色),即可通过网络发送构造的恶意 Python 代码,完全绕过 PraisonAI 内建的子进程沙箱保护机制,在宿主机上执行任意操作系统命令,获取完整的机密性、完整性和可用性控制权。
该漏洞本质上是多个先前已修补沙箱逃逸漏洞的变种绕过,利用 Python 解释器内部对象属性访问的隐蔽路径,实现从受限制的执行环境跳转到原生 builtins 模块,最终调用 __import__ 加载 os 等危险模块。PraisonAI 在版本 4.6.40(对应 praisonaiagents 1.6.40)中已提供修复。
受影响组件与版本
| 组件 | 受影响版本 | 安全版本 |
|---|---|---|
| PraisonAI(主项目) | < 4.6.40 | 4.6.40 |
praisonaiagents(Python包) |
< 1.6.40 | 1.6.40 |
具体受影响的文件为 praisonaiagents/tools/python_tools.py 中的 execute_code() 函数(在 praisonaiagents 1.6.37 中引入子进程沙箱模式)。
漏洞原理分析
1. 沙箱机制背景
execute_code() 为了实现安全的代码执行,采用了子进程沙箱模式(subprocess sandbox mode),即在一个受限的 Python 子进程中运行用户提供的代码,期望通过限制可用的内置函数(如 __import__、eval 等)来防止恶意操作。此前已针对 CVE-2026-39888(帧遍历)、CVE-2026-34938(str子类)、CVE-2026-40158(type.__getattribute__ 跳板)等逃逸技巧进行了修补,但漏洞作者发现了一种全新的绕过路径。
2. 绕过技术细节
攻击者利用 Python 中 print 函数对象的一个非文档化属性 __self__ 来获取原始的 builtins 模块引用:
print.__self__指向builtins模块本身(因为print是builtins模块内的一个内置函数,其__self__属性返回所属模块)。- 一旦获得
builtins模块,攻击者通过vars()函数(或dir()配合getattr())列举其所有属性,其中包含__import__等危险函数。 - 为了绕过可能存在的属性名黑名单,攻击者采用运行时字符串构造(如
"__" + "import__")动态构建属性名,躲避静态检查。 - 最终通过
__import__('os')获得os模块,并调用os.system()或os.popen()执行任意命令。
此技巧之所以能绕过之前的补丁,是因为之前的修补主要针对帧对象(frame)、特殊方法(如 __class__、__subclasses__)以及类型属性访问,但未考虑到内置函数对象本身保留了对所属模块的引用。print.__self__ 这一属性在 Python 标准文档中极少提及,因此未被纳入沙箱的黑名单。
3. 攻击向量
- 入口: 攻击者通过 PraisonAI 的 API 或代理交互接口,向
execute_code()提交恶意 Python 代码。 - 触发条件: 代码必须被实际解释执行。由于
execute_code()本身是设计用于运行用户提供的代码,因此攻击者只需要提供一个包含上述绕过逻辑的字符串即可。 - 权限要求: 攻击者需要具备调用
execute_code()的权限(PR:L),即普通用户或低权限代理账户即可。
影响评估
攻击难度与条件
| 维度 | 评估 |
|---|---|
| 攻击向量(AV:N) | 远程网络触发,无需物理接触 |
| 攻击复杂度(AC:L) | 利用代码仅需几行 Python,无需特殊工具或环境 |
| 所需权限(PR:L) | 仅需低级账户或默认代理角色 |
| 用户交互(UI:N) | 无需受害者任何操作,全自动执行 |
| 影响范围(S:C) | 沙箱被突破,危害蔓延至整个宿主机 |
潜在后果
- 完全失陷: 攻击者可执行任意操作系统命令,包括安装后门、窃取数据、横向移动。
- 持久化: 由于沙箱运行在子进程中,攻击者可通过写文件(如定时任务、SSH密钥)方式实现持久化。
- 破坏业务: 停止或篡改多智能体系统的工作流程,甚至删除关键数据。
综合风险等级:严重(Critical)
CVSS 9.9 评分反映了该漏洞极易利用且危害极大,应优先修复。
修复建议
1. 立即升级补丁版本
- PraisonAI 项目: 升级至 4.6.40 或更高版本。
- Python 包 praisonaiagents: 升级至 1.6.40 或更高版本。
升级后,execute_code() 内部增加了对 print.__self__ 等非预期属性访问的阻断,并进一步加固了子进程沙箱的执行环境。
2. 临时缓解措施(如无法立即升级)
- 禁用代码执行功能: 在配置中关闭
execute_code()接口,或限制仅能在受信任的网络内部访问。 - 强制最小权限运行: 确保运行 PraisonAI 的进程使用非 root 账户,且操作系统层面通过容器(如 Docker)进一步隔离。
- 网络隔离: 将 PraisonAI 服务部署在内部网络,不对外暴露 API 端口。
- 监控告警: 在宿主机上监控异常的进程创建(如
os.system调用)、网络连接或文件写入行为。
3. 长期加固建议
- 对 Python 沙箱实施更严格的“白名单”策略,而不是黑名单。例如,仅允许使用预定义的数学、字符串操作函数,禁止任何对
builtins模块的直接或间接访问。 - 考虑使用
subprocess配合seccomp或AppArmor等系统级沙箱,从根本上限制子进程的系统调用能力。
参考资料
- CVE 详情页(NVD): https://nvd.nist.gov/vuln/detail/CVE-2026-47392
- CWE-184: Incomplete Blacklist(黑名单不完整)
- CWE-693: Protection Mechanism Failure(保护机制失效)
- 相关安全公告(GitHub Advisory): 请参考
security-advisories@github.com发布的对应公告(来源标注) - 历史 CVE 链接(用于对比):
- CVE-2026-39888(帧遍历绕过)
- CVE-2026-34938(str子类绕过)
- CVE-2026-40158(
type.__getattribute__跳板绕过)
免责声明: 本文基于 NVD 公开数据及安全公告描述进行技术分析,部分细节(如具体 Python 属性名称)为合理推断。如需确切利用代码或 PoC,请咨询相关安全研究机构。请所有用户尽快升级至安全版本。