# GCP - Cloud Run Enum

{{#include ../../../banners/hacktricks-training.md}}

## Cloud Run <a href="#reviewing-cloud-run-configurations" id="reviewing-cloud-run-configurations"></a>

Cloud Runは、Googleのスケーラブルなインフラストラクチャの上で**コンテナを直接実行**できるサーバーレスの管理されたコンピューティングプラットフォームです。

コンテナを実行することができ、Go、Node.js、Python、Java、.NET Core、またはRubyを使用している場合は、**コンテナを自動的に構築する**[source-based deployment](https://cloud.google.com/run/docs/deploying-source-code)オプションを使用できます。

GoogleはCloud Runを**Google Cloud上の他のサービスと連携してうまく機能するように構築しました**ので、フル機能のアプリケーションを構築できます。

### Services and jobs <a href="#services-and-jobs" id="services-and-jobs"></a>

Cloud Runでは、コードは_**サービス**_として継続的に実行されるか、_**ジョブ**_として実行されます。サービスとジョブは同じ環境で実行され、Google Cloud上の他のサービスとの統合を同じように使用できます。

- **Cloud Run services.** ウェブリクエストやイベントに応答するコードを実行するために使用されます。
- **Cloud Run jobs.** 作業（ジョブ）を実行し、作業が完了すると終了するコードを実行するために使用されます。

## Cloud Run Service

Google [Cloud Run](https://cloud.google.com/run)は、環境変数を検索することもできる別のサーバーレスオファーです。Cloud Runは、デフォルトでコンテナ内のポート8080で実行される小さなウェブサーバーを作成し、HTTP GETリクエストを待機します。リクエストが受信されると、ジョブが実行され、ジョブログがHTTPレスポンスを介して出力されます。

### Relevant details

- **デフォルト**では、ウェブサーバーへの**アクセス**は**公開**ですが、**内部トラフィック**（VPCなど）に**制限**することもできます。\
さらに、ウェブサーバーに接続するための**認証**は、**すべてを許可する**か、**IAMを介して認証を要求する**ことができます。
- デフォルトでは、**暗号化**は**Google管理キー**を使用しますが、**KMS**からの**CMEK**（顧客管理暗号化キー）を**選択**することもできます。
- **デフォルト**では、使用される**サービスアカウント**は**Compute Engineのデフォルトアカウント**で、プロジェクトに対して**Editor**アクセス権を持ち、**スコープ`cloud-platform`**があります。
- 実行のために**平文の環境変数**を定義することが可能で、**クラウドシークレットをマウント**したり、**環境変数にクラウドシークレットを追加**したりすることもできます。
- **Cloud SQLとの接続を追加**したり、**ファイルシステムをマウント**したりすることも可能です。
- デプロイされたサービスの**URL**は、**`https://<svc-name>-<random>.a.run.app`**に似ています。
- Run Serviceは**1つ以上のバージョンまたはリビジョン**を持つことができ、**複数のリビジョン間でトラフィックを分割**できます。

### Enumeration
```bash
# List services
gcloud run services list
gcloud run services list --platform=managed
gcloud run services list --platform=gke

# Get info of a service
gcloud run services describe --region <region> <svc-name>

# Get info of all the services together
gcloud run services list --format=yaml
gcloud run services list --platform=managed --format=json
gcloud run services list --platform=gke --format=json

# Get policy
gcloud run services get-iam-policy --region <region> <svc-name>

# Get revisions
gcloud run revisions list --region <region>
gcloud run revisions describe --region <region> <revision>

# Get domains
gcloud run domain-mappings list
gcloud run domain-mappings describe <name>

# Attempt to trigger a job unauthenticated
curl <url>

# Attempt to trigger a job with your current gcloud authorization
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" <url>
```
## Cloud Run ジョブ

Cloud Run ジョブは、**完了するまで実行され、リクエストを処理しないコンテナ**により適しています。ジョブはリクエストを処理したり、ポートで待機したりする能力がありません。これは、Cloud Run サービスとは異なり、ジョブはウェブサーバーをバンドルすべきではないことを意味します。代わりに、ジョブコンテナは完了したら終了するべきです。

### 列挙
```bash
gcloud beta run jobs list
gcloud beta run jobs describe --region <region> <job-name>
gcloud beta run jobs get-iam-policy --region <region> <job-name>
```
## 権限昇格

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

{{#ref}}
../gcp-privilege-escalation/gcp-run-privesc.md
{{#endref}}

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

{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-cloud-run-unauthenticated-enum.md
{{#endref}}

## ポストエクスプロイト

{{#ref}}
../gcp-post-exploitation/gcp-cloud-run-post-exploitation.md
{{#endref}}

## 永続性

{{#ref}}
../gcp-persistence/gcp-cloud-run-persistence.md
{{#endref}}

## 参考文献

- [https://cloud.google.com/run/docs/overview/what-is-cloud-run](https://cloud.google.com/run/docs/overview/what-is-cloud-run)

{{#include ../../../banners/hacktricks-training.md}}
