🔴 严重 | CVE-2026-47410 — PraisonAI Platform is the platform layer for the P...
🔴 【深度分析】严重安全漏洞:CVE-2026-47410
CVSS 评分: 严重(9.8)🔴 状态: Deferred 发布时间: 2026-07-21
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-47410 |
| 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-321,CWE-798 |
| 发布时间 | 2026-07-21 |
| 最后更新 | 2026-07-22 |
| 状态 | Deferred |
| 数据来源 | security-advisories@github.com |
⚠️ CVSS 评分:9.8(严重)
CVSS 向量:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
危害等级: 紧急(可远程未授权获取管理员权限)
漏洞概述
PraisonAI Platform 是 PraisonAI 多智能体协作系统的平台层。其所有版本(低于 0.1.4)在默认配置下使用了一个硬编码的 JWT 签名密钥 "dev-secret-change-me"。当环境变量 PLATFORM_JWT_SECRET 未设置时,该密钥被直接用于签发和验证 JSON Web Token(JWT)。尽管代码中存在一个安全校验逻辑,但该逻辑仅在 PLATFORM_ENV != "dev" 时生效,而 PLATFORM_ENV 的默认值恰好为 "dev",因此该检查被完全绕过。
攻击者可通过读取公开源代码获取该硬编码密钥,然后构造任意 JWT(伪造 sub 和 email 声明),从而以任意已有用户身份进行认证,包括工作区所有者和管理员。漏洞 CVSS 评分高达 9.8,属于严重级别,且攻击复杂度低、无需认证、无需用户交互,可导致完全的信息泄露、篡改和拒绝服务。
受影响组件与版本
| 组件 | 受影响版本 | 修复版本 |
|---|---|---|
| PraisonAI Platform | < 0.1.4 | 0.1.4 |
注意:所有未显式设置 PLATFORM_JWT_SECRET 环境变量且 PLATFORM_ENV 保持默认值 "dev" 的部署均受影响。即使在生产环境中,只要没有按预期修改默认环境变量,漏洞依然存在。
漏洞原理分析
漏洞成因
PraisonAI Platform 的 JWT 签名逻辑中采用了以下模式(根据公开源码及描述推断):
# 伪代码示意
import os
PLATFORM_JWT_SECRET = os.getenv('PLATFORM_JWT_SECRET', 'dev-secret-change-me')
PLATFORM_ENV = os.getenv('PLATFORM_ENV', 'dev')
# 安全校验(本意是在非 dev 环境中禁止使用默认密钥)
if PLATFORM_ENV != 'dev' and PLATFORM_JWT_SECRET == 'dev-secret-change-me':
raise Exception("Insecure default JWT secret in production!")
问题在于:
- 默认
PLATFORM_ENV为"dev",因此上述条件永远不会满足,校验被架空。 - 即使部署在生产环境,只要管理员未主动将
PLATFORM_ENV设置为"production"或其他非dev的值,该安全检查便不会执行。 - 攻击流程极为简单:
- 从 GitHub 等公开仓库(PraisonAI 代码)获取
dev-secret-change-me。 - 使用该密钥签发一个 JWT,payload 中包含任意
sub(用户ID)和email。 - 将此 JWT 作为身份凭证发送至平台 API,即可模拟任意用户,获取其权限。
- 从 GitHub 等公开仓库(PraisonAI 代码)获取
攻击向量
- 攻击入口:直接向平台暴露的 API 端点(如
/api/login、/api/auth/verify)发送伪造的 JWT。 - 利用条件:攻击者仅需网络可达、无需任何认证或用户交互。
- 触发点:服务器端 JWT 验证函数使用预设密钥对 token 进行签名校验,而攻击者持有的密钥恰好与服务器相同。
与 CWE 的对应关系
- CWE-321:使用硬编码的加密密钥
核心问题:PLATFORM_JWT_SECRET的默认值为硬编码字符串,而非随机生成或由管理员安全配置。 - CWE-798:使用硬编码的凭据
密钥本身被当作凭据硬编码在源代码中,攻击者可直接获取。
影响评估
| 评估维度 | 分析 |
|---|---|
| 攻击复杂度 | 低(AC:L)—— 密钥为公开字符串,无需特殊技术能力。 |
| 所需权限 | 无(PR:N)—— 无需任何预先认证或访问权限。 |
| 用户交互 | 无(UI:N)—— 攻击不依赖受害者任何操作。 |
| 攻击向量 | 网络(AV:N)—— 通过互联网远程实施。 |
| 影响范围 | 机密性、完整性、可用性(C:H/I:H/A:H)—— 攻击者可读取所有用户数据、伪造任意操作、甚至删除或修改系统配置,导致完全失陷。 |
| 实际威胁 | 极高。该漏洞允许任意用户接管管理员账号,从而控制整个平台所有智能体团队。若平台管理敏感数据(如业务文档、内部系统凭证),后果尤为严重。 |
| 利用难度 | 极低。已有公开概念验证(PoC)的可能性很大,大量存量部署可能仍在使用默认配置。 |
修复建议
1. 立即升级版本
将 PraisonAI Platform 升级到 v0.1.4 或更高版本。官方在该版本中移除了硬编码默认密钥,并强制要求在生产环境中通过环境变量提供安全的 JWT 密钥。
2. 变更配置(临时缓解措施)
若无法立即升级,可采取以下临时措施:
- 设置环境变量:
在部署环境中显式设置PLATFORM_JWT_SECRET为一个强随机值(至少 256 位,建议使用openssl rand -hex 32生成)。 - 设置环境变量:
同时设置PLATFORM_ENV为"production"或其他非"dev"的标识,以触发原有的安全校验逻辑,防止默认密钥被误用。 - 验证配置:
在启动日志中确认系统未使用dev-secret-change-me,可尝试用已知密钥签发 JWT 测试是否被接受。
3. 应急响应
- 检查现有 JWT:如果已部署过 0.1.4 以下版本,应假设所有现有 JWT 可能已被泄露。立即让所有用户撤销并重新签发其会话 token。
- 审计日志:检查服务器日志中是否存在异常身份认证记录,特别是使用
sub字段为 admin 或 owner 的请求。 - 旋转所有涉及的用户凭证:包括 API 密钥、系统间通讯 token 等,以防攻击者早已利用该漏洞植入后门。
参考资料
| 类型 | 链接 |
|---|---|
| NVD 官方页面 | https://nvd.nist.gov/vuln/detail/CVE-2026-47410 |
| CWE-321 | https://cwe.mitre.org/data/definitions/321.html |
| CWE-798 | https://cwe.mitre.org/data/definitions/798.html |
| 官方安全公告(推测) | 暂未发布公开公告,建议关注 GitHub 仓库安全 advisories。 |
| 相关源码提交 | 版本 0.1.4 的修复 commit 可在 PraisonAI Platform 的 GitHub 仓库查看(未公开,但 NVD 引用 security-advisories@github.com)。 |
备注:本分析基于 NVD 公开数据及 CVSS 向量进行合理推断,未添加未经确认的技术细节。建议安全团队参考官方仓库的补丁 diff 进行深度验证。
总结
CVE-2026-47410 是典型的硬编码凭据漏洞,因默认配置不当导致攻击者可远程获取最高权限。虽然官方已在 0.1.4 中修复,但大量历史部署可能仍暴露于风险中。请运维人员立即排查并修复,不可因“只是开发环境”而掉以轻心——默认环境变量值使得生产环境同样脆弱。