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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
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リポジトリに保存されるように構成されている場合、リポジトリに対する読み取りアクセス権を持つ者は、イメージをダウンロードしてソースコードを確認できます。詳細については、次を確認してください:
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認証を持つ必要があるか、誰でも呼び出すことができるかが示されます:
.png)
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 '{}'
権限昇格
次のページでは、クラウド関数の権限を悪用して権限を昇格させる方法を確認できます:
認証されていないアクセス
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。