PraisonAI CVE-2026-44338:未鉴权的智能体服务器,披露3小时44分后即被利用
2026年5月11日披露的 CVE-2026-44338,使 PraisonAI 的旧版 API 服务器默认硬编码关闭了身份认证。不到四小时,CVE-Detector 扫描器即开始探测该端点。
这是什么?
2026 年 5 月 11 日 13:56 UTC,GitHub 发布了安全公告 GHSA-6rmh-7xcm-cpxj,编号为 CVE-2026-44338(CVSS 7.3,高危),针对开源多智能体编排框架 PraisonAI。该项目在 GitHub 上拥有约 7,100 颗星标。其随包附带的旧版 Flask API 服务器 src/praisonai/api_server.py 通过硬编码默认禁用了身份认证。任何能够访问该进程的调用方,都可以在不提供任何令牌的情况下列出智能体并触发已配置的工作流。
Sysdig 威胁研究团队(TRT)观察到,首个针对性探测——一个自称 CVE-Detector/1.0 的扫描器——在当天 17:40 UTC(即公告发布后 3 小时 44 分钟)击中了其传感器。2.5.6 至 4.6.33 版本均受影响,修复版本 4.6.34 已在 PyPI 上发布。该漏洞由 GitHub 用户 shmulc8 报告。
如何运作
该公告描述了三个相互配合的缺陷,它们都可以在公开源代码中查看:
# src/praisonai/api_server.py —— 受影响逻辑的示意性片段
AUTH_ENABLED = False # 硬编码常量
AUTH_TOKEN = None # 从不从环境变量读取,运行时也无法覆盖
def check_auth():
if not AUTH_ENABLED:
return True # 两条"受保护"路由均按设计 fail-open
# ...
理应处于该检查之后的两个端点,在实际中根本未被守护:
GET /agents返回agents.yaml文件名以及已配置智能体的列表。POST /chat接受任何包含message键的 JSON 主体,忽略该字段的值,然后执行PraisonAI(agent_file="agents.yaml").run()—— 也就是运营方的完整智能体图。
当该脚本被直接启动时,还会绑定到 0.0.0.0:8080。src/praisonai/praisonai/deploy/models.py 中的 APIConfig 同样默认保留 auth_enabled = False,而生成的部署 YAML 示例又同时推荐 host: 0.0.0.0 与 auth_enabled: false —— 把这个不安全的默认值悄悄传播到运营方拥有的部署中。较新的 serve agents 命令路径不受影响:它绑定到 127.0.0.1,并支持 --api-key。
Sysdig 的蜜罐捕捉到了披露后的侦察模式。一台位于 DigitalOcean 的主机(146.190.133.49)运行了两次扫描,相隔 8 分钟,每次约 70 个请求。第二次扫描收窄到 AI 智能体的指纹(/praisonai/version.txt、/pyproject.toml、/docs、/openapi.json),随后发出了验证探测:不带 Authorization 头、User-Agent: CVE-Detector/1.0 的 GET /agents。主机返回 200 OK 并附上智能体列表,确认绕过成功。
为何重要
绕过本身并非任意代码执行。/chat 处理器忽略提交的消息,因此攻击者无法注入自由格式的提示词。攻击者得到的是对运营方 agents.yaml 所被授权执行的所有动作的未鉴权调用 —— 而生产部署中通常会包含 code_interpreter、一个 shell 或文件 I/O 工具、web fetch,或 HTTP 客户端。因此,现实中的影响上限,从最便宜的一端是模型配额消耗,到最昂贵的一端则是智能体工具执行与配置泄露。
另外两点让这枚 CVE 值得研究:
- 该模式在整个 AI 智能体技术栈中反复出现。 Sysdig 将其与近期 Marimo、LMDeploy(
CVE-2026-33626)、Langflow(CVE-2026-33017)等被快速利用的 CVE 联系起来 —— 这些都是中小规模项目,其面向互联网的默认配置把一个强大的运行时暴露给了匿名调用者。 - 3 小时半已成为新的基线。 一个约 7,100 星的仓库不再算”雷达之外”。如今,攻击工具能在公告速度下逆向补丁、生成扫描器并扫描公网 IPv4 空间。
防御
- 立即升级。 升级到 PraisonAI
4.6.34或更高版本。2.5.6–4.6.33范围内的任何版本在出厂时就是脆弱的。 - 停止使用旧版入口。 改用
serve agents命令,它绑定到127.0.0.1并要求--api-key。将api_server.py视为已废弃。 - 审计部署模板。 如果您的基础设施即代码是基于 PraisonAI 示例生成的,请搜索其中的
auth_enabled: false与host: 0.0.0.0,二者都应被反转。 - 对智能体触发器采用默认拒绝。 任何以
PraisonAI(...).run()—— 或其在 LangChain、CrewAI、AutoGen 中的等价物 —— 收尾的 HTTP 路径,都是会改变世界状态的动作,必须强制要求身份认证,而非由部署方自行选择启用。 - 在边界处检测。 成功的未鉴权调用不会在应用日志中留下任何”缺失认证”信号。请为缺少
Authorization头的GET /agents和POST /chat添加 WAF 规则,并在任何位置发现User-Agent: CVE-Detector/1.0字符串时予以标记。 - 审计模型供应商的账单以及
agents.yaml中引用的密钥,核查 2026 年 5 月 11 日之后的任何活动,并轮换工作流中引用的任何凭据。
状态
| 项目 | 引用 | 日期 | 备注 |
|---|---|---|---|
| GitHub 公告 | GHSA-6rmh-7xcm-cpxj | 2026-05-11 13:56 UTC | CVSS 7.3,CWE-306 / CWE-668 / CWE-1188 |
| CVE 编号 | CVE-2026-44338 | 2026-05-11 | 已在 NVD 发布 |
| 首次针对性探测 | Sysdig TRT 传感器 | 2026-05-11 17:40 UTC | CVE-Detector/1.0,披露后约 3 小时 44 分钟 |
| 已修复版本 | PraisonAI 4.6.34 | 2026-05-11 | PyPI |
| 受影响范围 | 2.5.6 — 4.6.33 | — | 对旧版脚本而言,所有更早的版本也存在该问题 |
更深一层的启示是结构性的。PraisonAI 的旧版服务器是一个小 bug —— 三行代码、一个默认值、一个绑定地址 —— 但它所处的位置,正是每一个多智能体框架迟早都会走到的交叉点:一条 HTTP 触发路径,其幕后实际运行的是一个使用工具的任意智能体。任何把这种触发器以”认证选择启用”而非”认证选择禁用”方式交付的框架,都应被假定为在首次暴露到互联网时即可被利用。
Sources
- → https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-6rmh-7xcm-cpxj
- → https://nvd.nist.gov/vuln/detail/CVE-2026-44338
- → https://www.sysdig.com/blog/cve-2026-44338-praisonai-authentication-bypass-in-under-4-hours-and-the-growing-trend-of-rapid-exploitation
- → https://thehackernews.com/2026/05/praisonai-cve-2026-44338-auth-bypass.html
- → https://www.csoonline.com/article/4171215/praisonai-vulnerability-gets-scanned-within-4-hours-of-disclosure.html