🔴 【深度分析】严重安全漏洞: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),攻击者无需诱导管理员或用户操作。

攻击流程

  1. 攻击者扫描网络中暴露的 PraisonAI call server(通常监听固定端口,如 8080 或自定义端口)。
  2. 向 /agents/list、/agents/{id}/metadata、/agents/{id}/invoke、/agents/{id}/unregister 等端点发送请求。
  3. 由于 verify_token() 在无 CALL_SERVER_TOKEN 时返回 True,所有请求均被放行。
  4. 攻击者获取所有 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
    

临时缓解措施(若无法立即升级)

  1. 显式设置 CALL_SERVER_TOKEN
    在启动 call server 前,通过环境变量设置一个强随机令牌:

    export CALL_SERVER_TOKEN=$(openssl rand -hex 32)
    

    然后重启服务。

  2. 限制网络暴露
    修改启动配置,使 call server 仅监听回环地址(127.0.0.1)或内部网络,避免暴露到公网。可通过修改配置文件或启动参数实现(如 --host 127.0.0.1)。

  3. 添加前置反向代理认证
    在 call server 前端部署 Nginx 或 API 网关,强制要求客户端提供有效令牌(如 API Key)后才转发请求。

  4. 监控异常访问
    检查 call server 的访问日志,确认是否存在未经认证的 /invoke、/list 等请求。若发现可疑活动,立即回滚并设置令牌。


参考资料


⚠️ 注意: 截至分析时,该漏洞状态为 Deferred,NVD 尚未分配正式评分;但基于公开数据,CVSS 3.1 评分 9.8 为合理评估。建议运维人员立即检查自身部署并采取修复措施。