🔴 严重 | CVE-2026-47396 — PraisonAI is a multi-agent teams system. Prior to ...
🔴 【深度分析】严重安全漏洞:CVE-2026-47396
CVSS 评分: 严重(9.8)🔴 状态: Deferred 发布时间: 2026-07-21
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-47396 |
| CVSS 评分 | 9.8 🔴 |
| 严重程度 | 严重 |
| CVSS 向量 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE 分类 | CWE-284,CWE-306 |
| 发布时间 | 2026-07-21 |
| 最后更新 | 2026-07-22 |
| 状态 | Deferred |
| 数据来源 | security-advisories@github.com |
以下是基于 NVD 公开数据的深度安全分析文章。
PraisonAI 未授权远程 Agent 控制 API 漏洞 (CVE-2026-47396)
⚠️ 严重等级:紧急
CVSS 评分:9.8(Critical)
CVSS 向量:AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
漏洞概述
PraisonAI 是一款多智能体协作(multi-agent teams)系统。其内置的 call server 在未配置 CALL_SERVER_TOKEN 环境变量时,会暴露一组无需认证即可调用的 agent 控制 API。攻击者利用该缺陷可远程枚举、查看、调用甚至删除系统中的 agent,实现完全未授权访问 agent 控制平面。
该漏洞编号为 CVE-2026-47396,影响 praisonai.api.agent_invoke 路由模块(由 praisonai.api.call 挂载)。修复版本为 4.6.40。
受影响组件与版本
| 组件 | 受影响版本范围 |
|---|---|
PraisonAI call server 中的 praisonai.api 模块 |
< 4.6.40 |
依赖组件:praisonai.api.agent_invoke 路由、verify_token() 认证辅助函数 |
所有未显式设置 CALL_SERVER_TOKEN 的部署 |
修复版本: 4.6.40 及更高版本。
漏洞原理分析
成因
PraisonAI 的 call server 设计为通过 CALL_SERVER_TOKEN 环境变量作为静态令牌对客户端进行身份验证。认证逻辑封装在 verify_token() 辅助函数中,该函数被所有敏感 agent 控制端点调用。然而,当 CALL_SERVER_TOKEN 未被设置(即为 None 或空字符串)时,verify_token() 的实现存在 fail-open(验证失败时默认通过) 问题——即令牌缺失时直接返回成功,绕过了所有身份检查。
具体攻击向量如下:
- 攻击者位置: 网络可达(CVSS
AV:N),call server默认监听0.0.0.0(任意网络接口)。 - 攻击复杂度: 低(
AC:L),无需特殊工具或知识,直接发送 HTTP 请求即可。 - 所需权限: 无(
PR:N),无需任何有效凭证。 - 用户交互: 无(
UI:N),攻击者无需诱导管理员或用户操作。
攻击流程
- 攻击者扫描网络中暴露的 PraisonAI
call server(通常监听固定端口,如 8080 或自定义端口)。 - 向
/agents/list、/agents/{id}/metadata、/agents/{id}/invoke、/agents/{id}/unregister等端点发送请求。 - 由于
verify_token()在无CALL_SERVER_TOKEN时返回 True,所有请求均被放行。 - 攻击者获取所有 agent 的配置、指令提示(prompt),甚至直接调用 agent 执行恶意操作,或注销 agent 导致系统不可用。
技术细节(基于现有信息)
NVD 官方描述明确指出:“The authentication helper verify_token() fails open when CALL_SERVER_TOKEN is unset.” 虽然未公开具体源代码,但可以推断该函数逻辑类似于:
def verify_token(request):
token = request.headers.get("Authorization")
if not CALL_SERVER_TOKEN: # 当环境变量未设置时
return True # 无条件通过认证
return token == CALL_SERVER_TOKEN
此类问题属于经典的 缺失认证(CWE-306) 与 不正确的访问控制(CWE-284) 的结合。
影响评估
| 评估维度 | 说明 |
|---|---|
| 利用难度 | 极低。扫描到服务即可直接利用,无需前置条件。 |
| 攻击代价 | 低。仅需网络可达,攻击者可使用 curl、Postman 或简单脚本。 |
| 影响范围 | 所有未设置 CALL_SERVER_TOKEN 的 PraisonAI 实例。默认启动时未配置 token 的部署全部受影响。 |
| 机密性 | 高。攻击者可以读取 agent 的元数据、内部指令、提示词等敏感信息。 |
| 完整性 | 高。攻击者可调用 agent 执行任意操作(取决于 agent 功能),甚至可能篡改 agent 行为。 |
| 可用性 | 高。攻击者可注销 agent,导致多 agent 协作系统部分或完全瘫痪。 |
综合威胁等级: 该漏洞可被远程且无认证地利用,完全控制 agent 控制平面,对运行中的 AI 协作系统构成直接且严重的威胁。
修复建议
官方补丁
升级至 4.6.40
官方已发布修复版本,该版本修正了verify_token()的 fail-open 行为。建议所有用户立即升级。pip install praisonai>=4.6.40
临时缓解措施(若无法立即升级)
显式设置
CALL_SERVER_TOKEN
在启动call server前,通过环境变量设置一个强随机令牌:export CALL_SERVER_TOKEN=$(openssl rand -hex 32)然后重启服务。
限制网络暴露
修改启动配置,使call server仅监听回环地址(127.0.0.1)或内部网络,避免暴露到公网。可通过修改配置文件或启动参数实现(如--host 127.0.0.1)。添加前置反向代理认证
在call server前端部署 Nginx 或 API 网关,强制要求客户端提供有效令牌(如 API Key)后才转发请求。监控异常访问
检查call server的访问日志,确认是否存在未经认证的 /invoke、/list 等请求。若发现可疑活动,立即回滚并设置令牌。
参考资料
- CVE 详情页: https://nvd.nist.gov/vuln/detail/CVE-2026-47396
- CWE-284(不当访问控制): https://cwe.mitre.org/data/definitions/284.html
- CWE-306(缺失认证): https://cwe.mitre.org/data/definitions/306.html
- PraisonAI GitHub 安全公告(待查阅): https://github.com/praisonai/praisonai/security/advisories
- 修复版本发布说明: 建议关注 PraisonAI 官方仓库的 Releases 页面(https://github.com/praisonai/praisonai/releases)获取详细信息。
⚠️ 注意: 截至分析时,该漏洞状态为
Deferred,NVD 尚未分配正式评分;但基于公开数据,CVSS 3.1 评分 9.8 为合理评估。建议运维人员立即检查自身部署并采取修复措施。