Vertex AI又爆坑!Python SDK上傳流程漏洞:桶名被蹭=模型被替换,还能2.5秒内下手

62087703071662

安托特报员日前披露:Google Cloud Vertex AI SDK for Python曝出一处已修补的安全漏洞。攻击者不需要获得受害者的项目权限,就可能借助模型上上传流程中的“默认暂存存储桶”设计缺陷,替换用户将要部署的机器学习模型,进而在模型上线后触发任意代码执行。

问题出在“模型注册前”的暂存阶段。开发者使用 Vertex AI SDK 上传模型时,如果没有显式指定用于暂存的存储位置,旧版 SDK 会根据 Google Cloud 的项目识别码与区域自动生成一个默认 bucket 名称。Unit 42 指出,当时 SDK 只会检查这个 bucket 名称是否存在,却不会进一步核验该存储桶是否确实归调用者的项目所有。

由于存储桶名称具有全局唯一性,攻击者只要提前掌握受害者的项目识别码,就能在自己控制的云端项目里创建同名存储桶。随后,当受害者沿用默认流程上传模型时,模型构件可能被写入攻击者掌控的位置,而不是留在目标自身的环境中。

更棘手的是“时间窗口”。攻击者还可以配合自动触发的云端函数,在模型文件上传后立即替换成恶意版本。研究团队测试显示,从上传完成到 Vertex AI 服务代理读取文件之间大约有 2.5 秒差。一旦攻击者能在这段极短时间内完成替换,后续 Vertex AI 读取并部署的就将是被篡改的模型。

一旦模型被控制,风险会沿着 Python 生态常见的模型序列化方式进一步放大。许多模型会用 joblib 或 pickle 进行保存,而 pickle 在反序列化时可能执行代码。因此,当 Vertex AI 在服务端载入模型时,恶意代码便可能被触发。

不过要让攻击真正落地,仍需满足多重条件:受害者所在区域尚未建立正确的默认暂存桶、未指定自管的暂存位置、攻击者掌握受害者项目识别码,并能在极短时间内完成文件替换。

Google 已在更新中加入“存储桶权属验证”,避免仅因同名 bucket 存在就直接继续上传。安托特报员提醒:开发团队应尽快将 SDK 升级到 1.148.0 或更高版本,并在上传模型时明确指定由自己控制的暂存存储桶,以降低被跨租户劫持与模型投毒的可能性。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注