GCP - AppEngine Privesc
App Engine
App Engineに関する詳細情報は次をチェックしてください:
pageGCP - App Engine Enumappengine.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
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 をデプロイするために必要な権限 です。おそらく get
と list
は 回避 できるかもしれません。
Pythonのコード例はhttps://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengineで見つけることができます。
デフォルトでは、Appサービスの名前は default
になり、同じ名前のインスタンスは1つしか存在しません。
これを変更して2番目のAppを作成するには、app.yaml
でルートキーの値を service: my-second-app
のように変更してください。
appengine.applications.update
, appengine.operations.get
appengine.applications.update
, appengine.operations.get
これはおそらく、Googleがアプリケーションをセットアップする際に使用するバックグラウンドSAを変更するだけなので、これを悪用してサービスアカウントを盗むことはできないと思います。
```bash gcloud app update --service-account= ``` ### `appengine.versions.getFileContents`, `appengine.versions.update`
これらの権限の使用方法や有用性についてはわかりません(コードを変更すると新しいバージョンが作成されるため、コードを更新するか、IAMロールを更新できるかどうかはわかりませんが、おそらくできるはずです。おそらくバケット内のコードを変更することができるかもしれませんか?)。
バケット上の書き込みアクセス
ソースコードが格納されているバケットに対する書き込みアクセス権があっても、ソースコードや manifest.json
を変更して任意のコードを実行することはできませんでした。
新しいバージョンが作成され、ソースコードとマニフェストがアップロードされるタイミングを検出し、それらを変更して新しいバージョンがバックドア付きのものを使用するようにすることができれば、可能かもしれません。
コンテナレイヤーもバケットに保存されているようですが、これらを変更することもできるかもしれませんか?
最終更新