系统:运行中
← 返回所有攻击
INFRASTRUCTURE CRITICAL NEW

ChromaToast:ChromaDB 向量数据库中的预认证 RCE

HiddenLayer 于 2026 年 5 月 18 日披露(CVE-2026-45829,CVSS 10.0),表明 ChromaDB 的 Python 服务器会先加载攻击者的 HuggingFace 模型并执行其代码,然后才检查身份认证。

2026-06-12 // 6 min affects: chromadb

这是什么?

2026 年 5 月 18 日,HiddenLayer 研究员 Esteban Tonglet 发表了 ChromaToast: Served Pre-Auth,描述了 CVE-2026-45829——ChromaDB 中的一个预认证远程代码执行漏洞。ChromaDB 是部署最广泛的开源向量数据库之一(每月约 1300 万次 pip 下载、27500 个 GitHub star,并在 Mintlify、Weights & Biases、Factory AI、Capital One 与 UnitedHealthcare 等有据可查的生产环境中使用)。该漏洞的 CVSS 4.0 基础评分为满分 10.0,归类为 CWE-94(代码注入)。它在 1.0.0 版本中引入,截至披露时在 1.5.8 版本中仍未修复。

简而言之:任何能够通过 HTTP 访问该 Python 服务器的未认证攻击者,都可以在数据库进程内执行任意代码。ChromaDB 位于检索增强生成(RAG)流水线的核心,因此一次入侵的影响远不止单台服务器。

工作原理

ChromaDB 允许客户端为集合选择使用哪个嵌入模型,并在创建集合的请求中传入模型名称及参数。Python FastAPI 服务器会直接从 HuggingFace 获取并加载该模型。客户端可设置的参数之一是 trust_remote_code,这是一个标准的 HuggingFace 标志:当其值为 true 时,会告诉库下载并执行模型仓库内附带的 Python 模块文件。ChromaDB 仅校验 kwargs 是否为原始类型——布尔值即可通过——因此 trust_remote_code: true 会原封不动地传到 AutoModel.from_pretrained()。谁控制了被引用的仓库,谁就控制了主机上运行的内容。

另一半问题是时序缺陷。这个易受攻击的端点(POST /api/v2/tenants/{tenant}/databases/{db}/collections)被标注为需要认证,但服务器会在运行认证检查之前就实例化嵌入函数——下载并执行模型。等到凭据检查触发、请求以 500 被拒绝时,攻击者的代码早已执行。对应的 V1 端点无法被禁用,因此封堵一条路径并不能堵住漏洞。HiddenLayer 将根因归结为两个相互叠加的失误:服务器毫无限制地信任客户端提供的模型标识符,并在对调用者进行认证之前就据此行动——这是一个典型的”混淆代理人”(confused deputy)问题,信任边界被放在了错误的位置。

为什么重要

一次成功触发即可让攻击者获得 ChromaDB 进程的权限:环境变量、API 密钥、挂载的机密以及磁盘上完整的嵌入存储。暴露面很广。HiddenLayer 的 Shodan 扫描显示,73% 暴露在互联网上的 ChromaDB 实例运行着易受攻击的版本区间;UpGuard 早先的研究记录了超过 1170 个公开可访问的部署——其中许多包含真实的生产数据——因为 ChromaDB 默认关闭身份认证。

数据层这一角度使其比单纯的主机接管更糟。向量存储集中了专有嵌入与 RAG 知识库。拥有访问权限的攻击者可以投毒嵌入,使下游 LLM 应用把攻击者控制的内容当作权威上下文来检索;而关于嵌入反演(embedding inversion)的研究表明,存储的向量可能泄露其源文本的大部分内容——从而把一次基础设施入侵变成一起隐蔽的文档外泄与 AI 完整性事件。

防御措施

由于披露时 Python 服务器没有可用补丁,缓解主要靠架构层面。优先采用基于 Rust 的部署路径(chroma run 与 Docker 镜像),它不带此缺陷。如果必须保留 Python FastAPI 服务器,请将其网络可达性限制到已知且可信的应用主机,并在反向代理处终止所有外部访问,使其在请求抵达 ChromaDB 之前完成认证。启用 ChromaDB 内置的身份认证并强制 TLS,落实最小权限以使采集账户无法读取全部内容,并将 API 日志发送至 SIEM 以发现异常读取或集合变更。更宏观地说,应把向量数据库当作生产数据基础设施来对待——采用与关系型数据库相同的隔离、访问审查与漏洞管理——并在模型工件进入任何运行时之前对其进行扫描,因为从不可信注册表加载模型等同于运行不可信代码。

状态

CVE-2026-45829 影响 ChromaDB 1.0.0 至 1.5.8(仅限 Python FastAPI 服务器;Rust 服务器不受影响)。HiddenLayer 表示,其于 2026 年 2 月 17 日首次联系 Chroma,并在 2 月 24 日、3 月 5 日和 4 月 16 日多次跟进,在未获回应后于 2026 年 5 月 18 日发布——大约 90 天的窗口期。在仅依赖升级之前,请对照 ChromaDB 的更新日志与 GitHub 公告核实 1.5.8 之后的任何版本是否包含修复,并无论如何都应实施网络与认证方面的缓解措施。

Sources