GCP - Artifact Registry Privesc
Artifact Registry
有关 Artifact Registry 的更多信息,请查看:
artifactregistry.repositories.uploadArtifacts
通过此权限,攻击者可以上传带有恶意代码的新版本工件,例如 Docker 镜像:
已检查到可以上传一个新的恶意docker镜像,名称和标签与已存在的相同,因此旧的镜像将失去标签,下次下载带有该标签的镜像时,将会下载到恶意镜像。
无法上传与已存在版本相同的python库,但可以上传更高版本(或者在版本末尾添加一个额外的**.0
** - 但在python中不适用),或者删除最后一个版本并上传一个新的版本(需要artifactregistry.versions.delete
):
artifactregistry.repositories.downloadArtifacts
artifactregistry.repositories.downloadArtifacts
拥有此权限后,您可以下载工件并搜索敏感信息和漏洞。
下载一个Docker镜像:
下载一个 python 库:
如果在一个虚拟注册表中混合了远程和标准注册表,并且一个包同时存在于两者中,会发生什么?请查看此页面:
artifactregistry.tags.delete
, artifactregistry.versions.delete
, artifactregistry.packages.delete
, (artifactregistry.repositories.get
, artifactregistry.tags.get
, artifactregistry.tags.list
)
artifactregistry.tags.delete
, artifactregistry.versions.delete
, artifactregistry.packages.delete
, (artifactregistry.repositories.get
, artifactregistry.tags.get
, artifactregistry.tags.list
)从注册表中删除工件,例如 docker 镜像:
artifactregistry.repositories.delete
artifactregistry.repositories.delete
删除一个完整的仓库(即使它有内容):
artifactregistry.repositories.setIamPolicy
artifactregistry.repositories.setIamPolicy
拥有此权限的攻击者可以授予自己执行一些先前提到的存储库攻击的权限。
通过 Artifact Registry 读写进行其他服务的转移
Cloud Functions
当创建 Cloud Function 时,一个新的 docker 镜像会被推送到项目的 Artifact Registry。我尝试用一个新的镜像修改该镜像,甚至删除当前镜像(和 cache
镜像),但没有任何变化,Cloud Function 继续工作。因此,可能 可以利用竞争条件攻击,就像使用存储桶一样,来更改将要运行的 docker 容器,但 仅仅修改存储的镜像无法破坏 Cloud Function。
App Engine
尽管 App Engine 在 Artifact Registry 内部创建 docker 镜像。测试表明,即使您在此服务中修改镜像并删除 App Engine 实例(以便部署一个新的实例),执行的代码不会改变。 可能通过执行 类似于存储桶的竞争条件攻击,可能可以覆盖执行的代码,但这尚未测试。
Last updated