GCP - Storage Privesc
Last updated
Last updated
学习和实践 AWS 黑客技术: 学习和实践 GCP 黑客技术:
基本信息:
storage.objects.get
此权限允许您下载存储在 Cloud Storage 中的文件。这可能会让您提升权限,因为在某些情况下敏感信息会保存在那里。此外,一些 GCP 服务将其信息存储在桶中:
GCP Composer:当您创建一个 Composer 环境时,所有 DAG 的代码将保存在一个桶中。这些任务的代码中可能包含有趣的信息。
GCR (容器注册表):容器的镜像存储在桶中,这意味着如果您可以读取这些桶,您将能够下载镜像并搜索泄漏和/或源代码。
storage.objects.setIamPolicy
您可以授予自己权限以滥用本节中的任何先前场景。
storage.buckets.setIamPolicy
有关如何使用此权限修改权限的示例,请查看此页面:
storage.hmacKeys.create
Cloud Storage 的“互操作性”功能,旨在实现与 AWS S3 等的跨云交互,涉及为服务账户和用户创建 HMAC 密钥。攻击者可以通过为具有提升权限的服务账户生成 HMAC 密钥来利用这一点,从而在 Cloud Storage 中提升权限。虽然与用户相关的 HMAC 密钥只能通过网络控制台检索,但访问密钥和秘密密钥始终保持可访问,允许潜在的备份访问存储。相反,与服务账户关联的 HMAC 密钥可以通过 API 访问,但其访问密钥和秘密密钥在创建后不可检索,增加了持续访问的复杂性。
storage.objects.create
, storage.objects.delete
= 存储写入权限在可以在云中写入的存储桶中,常见的利用是当存储桶保存网页服务器文件时,您可能能够存储新代码,该代码将被网页应用程序使用。
Composer 是在 GCP 中管理的 Apache Airflow。它有几个有趣的功能:
它运行在 GKE 集群 中,因此 集群使用的 SA 可以被 Composer 中运行的代码访问
Composer 环境的所有组件(DAG 的代码、插件和数据)都存储在 GCP 存储桶中。如果攻击者对其具有读写权限,他可以监控存储桶,并且每当创建或更新 DAG 时,提交一个后门版本,以便 Composer 环境将从存储中获取后门版本。
Cloud Functions 代码存储在存储中,每当创建新版本时,代码会推送到存储桶,然后从该代码构建新容器。因此,在新版本构建之前覆盖代码可以使云函数执行任意代码。
AppEngine 版本在存储桶中生成一些数据,格式为:staging.<project-id>.appspot.com
。在此存储桶中,可以找到一个名为 ae
的文件夹,该文件夹将包含每个 AppEngine 应用版本的文件夹,在这些文件夹中可以找到 manifest.json
文件。该文件包含一个 json,列出了创建特定版本所需的所有文件。此外,可以找到文件的真实名称、它们在 GCP 存储桶中的 URL(存储桶中的文件更改了名称为其 sha1 哈希)和每个文件的 sha1 哈希。
请注意,无法预先接管此存储桶,因为 GCP 用户没有权限使用域名 appspot.com 生成存储桶。
然而,拥有此存储桶的读写访问权限,可以通过监控存储桶并在每次进行更改(新版本)时尽快修改新版本,从而提升与 App Engine 版本关联的 SA 的权限。这样,从该代码创建的容器将执行后门代码。
提到的攻击可以通过多种不同方式执行,所有这些方式都从监控 staging.<project-id>.appspot.com
存储桶开始:
将 AppEngine 版本的完整新代码上传到不同且可用的存储桶,并准备一个**manifest.json
文件,包含新存储桶名称和它们的 sha1 哈希**。然后,当在存储桶中创建新版本时,您只需修改 manifest.json
文件并上传恶意文件。
上传一个修改过的 requirements.txt
版本,该版本将使用恶意依赖代码并更新 manifest.json
文件,包含新文件名、URL 和哈希。
上传一个修改过的 main.py
或 app.yaml
文件,将执行恶意代码并更新 manifest.json
文件,包含新文件名、URL 和哈希。
Google Container Registry 将图像存储在存储桶中,如果您可以写入这些存储桶,您可能能够横向移动到这些存储桶运行的地方。
此服务已被弃用,因此此攻击不再有用。此外,替代此服务的 Artifact Registry 不会将图像存储在存储桶中。
另一个针对此方法的利用脚本可以在 找到。
为了在存储桶中创建新对象,您需要 storage.objects.create
,并且根据 ,您还需要 storage.objects.delete
来修改现有对象。
您可以在该仓库中找到此攻击的 PoC:
您可以在该仓库中找到此攻击的 PoC:
您可以在该仓库中找到此攻击的 PoC:
GCR 使用的存储桶将具有类似于 gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com
的 URL(顶级子域在 指定)。
学习和实践 AWS 黑客攻击: 学习和实践 GCP 黑客攻击:
查看 !
加入 💬 或 或 在 Twitter 🐦 ** 上关注我们。**
通过向 和 github 仓库提交 PR 来分享黑客技巧。