GCP - Cloud Functions Enum

Reading time: 6 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

Cloud Functions

Google Cloud Functions は、ホストオペレーティングシステムの管理を必要とせずに、イベントに応じて実行されるコードをホストするように設計されています。さらに、これらの関数は、コードが利用できる環境変数の保存をサポートしています。

Storage

Cloud FunctionsのコードはGCP Storageに保存されます。したがって、GCPのバケットに対する読み取りアクセス権を持つ誰でもCloud Functionsのコードを読み取ることができます
コードは次のようなバケットに保存されます:

  • gcf-sources-<number>-<region>/<function-name>-<uuid>/version-<n>/function-source.zip
  • gcf-v2-sources-<number>-<region>/<function-name>function-source.zip

例えば:
gcf-sources-645468741258-us-central1/function-1-003dcbdf-32e1-430f-a5ff-785a6e238c76/version-4/function-source.zip

warning

Cloud Functionを保存しているバケットに対する読み取り権限を持つユーザーは、実行されたコードを読み取ることができます

Artifact Registry

クラウド関数が実行されたDockerコンテナがプロジェクト内のArtifact Registryリポジトリに保存されるように構成されている場合、リポジトリに対する読み取りアクセス権を持つ者は、イメージをダウンロードしてソースコードを確認できます。詳細については、次を確認してください:

GCP - Artifact Registry Enum

SA

指定されていない場合、デフォルトでApp Engine Default Service Accountがプロジェクトに対するEditor権限を持ってCloud Functionに添付されます。

Triggers, URL & Authentication

Cloud Functionが作成されると、トリガーを指定する必要があります。一般的なものの一つはHTTPSで、これにより関数をウェブブラウジングでトリガーできるURLが作成されます
他のトリガーにはpub/sub、Storage、Filestoreなどがあります...

URL形式は**https://<region>-<project-gcp-name>.cloudfunctions.net/<func_name>**です。

HTTPSトリガーが使用されると、**呼び出し元がFunctionを呼び出すためにIAM認証を持つ必要があるか、誰でも呼び出すことができるかが示されます:

Inside the Cloud Function

コードは**/workspaceフォルダー内にダウンロードされ、Cloud Function内のファイルと同じファイル名で保存され、ユーザーwww-dataで実行されます。
ディスクは
読み取り専用としてマウントされていません**。

Enumeration

bash
# List functions
gcloud functions list
gcloud functions describe <func_name> # Check triggers to see how is this function invoked
gcloud functions get-iam-policy <func_name>

# Get logs of previous runs. By default, limits to 10 lines
gcloud functions logs read <func_name> --limit [NUMBER]

# Call a function
curl https://<region>-<project>.cloudfunctions.net/<func_name>
gcloud functions call <func_name> --data='{"message": "Hello World!"}'

# If you know the name of projects you could try to BF cloud functions names

# Get events that could be used to trigger a cloud function
gcloud functions event-types list

# Access function with authentication
curl -X POST https://<region>-<project>.cloudfunctions.net/<func_name> \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{}'

権限昇格

次のページでは、クラウド関数の権限を悪用して権限を昇格させる方法を確認できます:

GCP - Cloudfunctions Privesc

認証されていないアクセス

GCP - Cloud Functions Unauthenticated Enum

ポストエクスプロイト

GCP - Cloud Functions Post Exploitation

永続性

GCP - Cloud Functions Persistence

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする