CrewAI:沙箱静默降级让提示注入升级为远程代码执行(VU#221883)
CrewAI 的四个缺陷可将提示注入串联为 RCE、SSRF 与文件读取——其 Code Interpreter 会在脱离 Docker 时静默降级。CERT/CC 于 2026 年 5 月 20 日的更新确认已完整修复。
这是什么?
CrewAI 是广泛用于编排多智能体系统的框架,它存在一条由四个漏洞构成的利用链,使攻击者能够把提示注入升级为主机上的远程代码执行(RCE)。这些问题由 Cyata 的 Yarden Porat 报告,并于 2026 年 3 月 30 日发布为 CERT/CC 漏洞通告 VU#221883(3 月 26 日公开)。该通告于 2026 年 5 月 20 日修订,CrewAI 确认四个问题——CVE-2026-2275、CVE-2026-2285、CVE-2026-2286、CVE-2026-2287——已在当前版本中修复。最初披露时并无完整补丁;正是 5 月 20 日的收尾构成了此处的新进展。
工作原理
根本原因是安全能力的静默降级,而非奇特的漏洞利用。CrewAI 的 Code Interpreter Tool 本应在 Docker 容器内运行智能体生成的 Python 代码。当 Docker 不可达——或在执行过程中停止——该工具会回退到较弱的进程内 SandboxPython 环境,而不是安全地失败(fail closed)。能够影响智能体的攻击者(直接影响,或通过智能体读取的被投毒文档/网页间接影响)可将四个缺陷串联:
漏洞 位置 影响
----------------- ---------------------------- --------------------------------------
CVE-2026-2275 CodeInterpreterTool 回退 沙箱逃逸:Docker 缺失时经 ctypes 进行
任意 C 函数调用
CVE-2026-2287 运行时缺少 Docker 检查 静默回退到不安全沙箱 -> RCE
CVE-2026-2286 RAG 检索工具 SSRF:未校验的运行时 URL 抵达
内部 / 云元数据服务
CVE-2026-2285 JSON 加载工具 任意本地文件读取,无路径校验
当设置 allow_code_execution=True,或开发者手动添加 Code Interpreter Tool 时,CVE-2026-2275 会被触发。其余三个是配置与校验缺陷。本文不复现任何可用的攻击载荷——权威技术参考是 CERT/CC 通告。要点在于结构性问题:一款宣称”沙箱化”的工具,却在沙箱之外静默执行了代码。
为何重要
影响取决于主机配置,最严重时即为主机完全失陷。据 CERT/CC,攻击者若触及启用了 Code Interpreter Tool 的 CrewAI 智能体,在存在 Docker 时可实现沙箱逃逸加 RCE/文件读取,在主机以配置模式或 unsafe 模式运行时可实现完整 RCE。SSRF 与任意读取原语支持凭据窃取——抵达云元数据端点或读取磁盘上的机密——这是从单个被攻陷智能体横向扩展到整个环境的常见跳板。
两条经验远超 CrewAI 本身。其一,“默认沙箱、回退即不安全”是一个陷阱:任何在依赖缺失时静默降级的隔离层,最终都会在生产环境以降级模式运行。其二,提示注入只是投递机制,而非漏洞本身——智能体会忠实执行受攻击者影响的指令,其破坏范围仅受周边工具所允许的权限限制。这正是”致命三要素”模式(不可信输入 + 代码/工具执行 + 敏感触达)在主流框架中的具体体现。
防御措施
干净的修复办法是升级到当前 CrewAI 版本,其中相关缺陷已被修补。据 VU#221883 中厂商声明(2026 年 5 月 20 日):Code Interpreter Tool 及其不安全的 SandboxPython 回退已被完全移除(PR #4791 与 #5309),allow_code_execution 被弃用,转而推荐使用 E2B、Daytona 等外部沙箱;集中式的 validate_file_path() 与 validate_url()(PR #5310 与 #5315)现已在 RagTool 及 20 多个工具中拦截路径穿越,以及指向私有、内部和云元数据地址的 SSRF。
若无法立即升级:
- 关闭 Code Interpreter Tool——在并非严格必要之处一律关闭,且除非具备外部且强制的沙箱,否则不要设置
allow_code_execution=True。 - **安全失败,绝不回退。**将”Docker 不可用”视为代码执行的硬性中止,而非降级到进程内解释器的理由。监控 Docker 可用性,并对回退发出告警。
- 将智能体的所有输入视为不可信——包括文档、工具输出与抓取的网页内容——并根据输入来源限制智能体可调用的工具。
- **对主机出站流量进行过滤。**阻断对
169.254.169.254及内部网段的访问,使 SSRF 原语无法抵达云元数据或内部服务。 - **审计逃生开关。**修复中附带了
CREWAI_TOOLS_ALLOW_UNSAFE_PATHS=true覆盖项,会停用新的路径校验——请确认任何部署中均未设置该项。
状态
| 项目 | 参考 | 日期 | 备注 |
|---|---|---|---|
| 通知厂商 | CERT/CC | 2026-01-05 | 协同披露开始 |
| 公开披露 | CERT/CC VU#221883 | 2026-03-26 → 03-30 | 由 Yarden Porat(Cyata)报告 |
| CVE-2026-2275(RCE / 逃逸) | VU#221883 | 2026-03-30 | SandboxPython 回退上的 ctypes 逃逸 |
| CVE-2026-2287(RCE) | VU#221883 | 2026-03-30 | 运行时缺少 Docker 检查 |
| CVE-2026-2286(SSRF) | VU#221883 | 2026-03-30 | RAG 工具 URL 未校验 |
| CVE-2026-2285(文件读取) | VU#221883 | 2026-03-30 | JSON 加载器路径穿越 |
| 确认完整修复 | CERT/CC(修订 3) | 2026-05-20 | 移除工具;新增路径/URL 校验器 |
要点并非”某个 AI 框架出了 bug”——而是一款以 Docker 沙箱为卖点的工具,在依赖消失时会在该沙箱之外静默执行代码,且仅凭一次提示注入即可触及。补丁已经落地;而设计层面的教训——隔离必须安全失败——才是值得带回你自己智能体技术栈的部分。