更值得注意的是,这起事件可能只是更大问题的一部分。
据外媒 The Register 报道,美国网络安全公司 Truffle Security 的研究人员在对数百万个网站进行扫描后发现,至少 2863 个 Google API 密钥原本只用于标识计费项目,如今却可以直接用于 Gemini API 身份验证。
这意味着,一旦攻击者获取这些密钥,就可能直接调用大模型接口,不仅能访问相关账户中的上传文件和缓存数据,还能不断消耗 API 配额,把所有计算费用转嫁到密钥拥有者身上。
对此,Truffle Security 研究员 Joe Leon 不久前也发了一篇长文进行了深度解析为什么会有这种情况发生。
Truffle Security 指出,问题的根源,是 Google Cloud 使用同一种 API Key 格式(以 AIza... 开头)来处理两种本质上完全不同的用途:公开身份识别和敏感认证。
多年来,Google 一直明确告诉开发者,API Key 可以安全地嵌入客户端代码中。Firebase 官方的安全清单中也明确指出,API Key 并非机密信息。
注意:这些 API Key 与用于驱动 GCP 的服务账户 JSON Key 是完全不同的。
Google Maps JavaScript 文档也指导开发者,将 API Key 直接粘贴到 HTML 中。
这在当时是合理的。API Key 的设计初衷是作为项目的标识符,用于计费,并可以通过 HTTP Referer 白名单等方式进行限制(虽然这些限制可以被绕过)。它们并非设计为认证凭证。
然而,随着 Gemini 的出现,情况发生了变化。
当你在 Google Cloud 项目中启用 Gemini API 时,该项目中现有的 API Key(包括那些已经嵌入在你网站公共 JavaScript 中的 Key)会在不发出任何警告、确认对话框或邮件通知的情况下悄然获得访问敏感 Gemini 端点的权限。
这带来了两个问题:
权限溯源扩张(Retroactive Privilege Expansion)。你三年前创建了一个 Maps Key,并严格按照 Google 的指引嵌入到网站源代码中。上个月,你团队的某个开发者为内部原型启用了 Gemini API。现在,你的公共 Maps Key变成了 Gemini 的认证凭证。任何抓取到它的人都可以访问你的上传文件、缓存内容,并让你的 AI 账单飙升。没有人通知你这一变化。
默认配置不安全(Insecure Defaults)。当你在 Google Cloud 创建一个新的 API Key 时,默认状态是“无限制”,意味着它立即对项目中所有已启用的 API(包括 Gemini)有效。UI 会显示“未经授权使用”的警告,但架构上的默认配置本身是完全开放的。
结果:成千上万原本用于计费的无害 API Key,如今成为了公开网络上的 Gemini 凭证。