GCP - AppEngine Privesc

htARTE(HackTricks AWS Red Team Expert) でAWSハッキングをゼロからヒーローまで学ぶ

HackTricks をサポートする他の方法:

App Engine

App Engineに関する詳細情報は次をチェックしてください:

pageGCP - App Engine Enum

appengine.applications.get, appengine.instances.get, appengine.instances.list, appengine.operations.get, appengine.operations.list, appengine.services.get, appengine.services.list, appengine.versions.create, appengine.versions.get, appengine.versions.list, cloudbuild.builds.get,iam.serviceAccounts.actAs, resourcemanager.projects.get, storage.objects.create, storage.objects.list

これらは gcloud cli を使用して App をデプロイするために必要な権限 です。おそらく getlist回避 できるかもしれません。

Pythonのコード例はhttps://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengineで見つけることができます。

デフォルトでは、Appサービスの名前は default になり、同じ名前のインスタンスは1つしか存在しません。 これを変更して2番目のAppを作成するには、app.yaml でルートキーの値を service: my-second-app のように変更してください。

cd python-docs-samples/appengine/flexible/hello_world
gcloud app deploy #Upload and start application inside the folder
**10-15分待ってもう一度デプロイ** を呼び出し、数分待ちます。

<div data-gb-custom-block data-tag="hint" data-style='info'>

**使用するサービスアカウントを指定することが可能** ですが、デフォルトではApp EngineのデフォルトSAが使用されます。

</div>

アプリケーションのURLは、`https://<proj-name>.oa.r.appspot.com/` や `https://<service_name>-dot-<proj-name>.oa.r.appspot.com` のようなものです。

### `appengine.instances.enableDebug`, `appengine.instances.get`, `appengine.instances.list`, `appengine.operations.get`, `appengine.services.get`, `appengine.services.list`, `appengine.versions.get`, `appengine.versions.list`, `compute.projects.get`

これらの権限を持つと、**柔軟**タイプのApp Engineインスタンスに**SSH経由でログイン**することが可能です(標準ではありません)。**`list`** および **`get`** 権限の一部は、**実際には必要ない** 場合があります。
gcloud app instances ssh --service <app-name> --version <version-id> <ID>

appengine.applications.update, appengine.operations.get

これはおそらく、Googleがアプリケーションをセットアップする際に使用するバックグラウンドSAを変更するだけなので、これを悪用してサービスアカウントを盗むことはできないと思います。

```bash gcloud app update --service-account= ``` ### `appengine.versions.getFileContents`, `appengine.versions.update`

これらの権限の使用方法や有用性についてはわかりません(コードを変更すると新しいバージョンが作成されるため、コードを更新するか、IAMロールを更新できるかどうかはわかりませんが、おそらくできるはずです。おそらくバケット内のコードを変更することができるかもしれませんか?)。

バケット上の書き込みアクセス

ソースコードが格納されているバケットに対する書き込みアクセス権があっても、ソースコードや manifest.json を変更して任意のコードを実行することはできませんでした。 新しいバージョンが作成され、ソースコードとマニフェストがアップロードされるタイミングを検出し、それらを変更して新しいバージョンがバックドア付きのものを使用するようにすることができれば、可能かもしれません。

コンテナレイヤーもバケットに保存されているようですが、これらを変更することもできるかもしれませんか?

最終更新