GCP - Cloud Functions Enum

Support 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

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

Artifact Registry

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

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トリガーが使用される場合、**呼び出し元が関数を呼び出すためにIAM認証を持つ必要があるか、**誰でも呼び出せるかが示されます:

Inside the Cloud Function

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

Enumeration

# 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 '{}'

権限昇格

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

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

ポストエクスプロイト

永続性

参考文献

HackTricksをサポートする

Last updated