GCP - AppEngine Privesc
AWSハッキングを学び、練習する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、練習する:
HackTricks Training GCP Red Team Expert (GRTE)
App Engine
App Engineに関する詳細情報は以下を参照してください:
GCP - 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
**のように変更します。
少なくとも10-15分待ってください。それでも動作しない場合は、deploy another of timesを呼び出し、数分待ってください。
使用するService Accountを指定することが可能ですが、デフォルトではApp EngineのデフォルトSAが使用されます。
アプリケーションのURLはhttps://<proj-name>.oa.r.appspot.com/
またはhttps://<service_name>-dot-<proj-name>.oa.r.appspot.com
のような形式です。
同等の権限を更新
AppEngineを更新するための十分な権限を持っているが、新しいものを作成する権限がない場合があります。その場合、現在のApp Engineを更新する方法は次のとおりです:
もしすでにAppEngineを侵害している場合、appengine.applications.update
とactAsの権限を持っているなら、AppEngineで使用されるサービスアカウントを次のように変更できます:
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
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
これらの権限があれば、flexible タイプの App Engine インスタンスに ssh でログイン することが可能です(standard タイプではありません)。一部の list
および get
権限は 実際には必要ない かもしれません。
appengine.applications.update
, appengine.operations.get
appengine.applications.update
, appengine.operations.get
これは、Googleがアプリケーションを設定するために使用するバックグラウンドSAを変更するだけだと思うので、この方法を悪用してサービスアカウントを盗むことはできないと思います。
appengine.versions.getFileContents
, appengine.versions.update
appengine.versions.getFileContents
, appengine.versions.update
これらの権限をどのように使用するか、または有用かどうかは不明です(コードを変更すると新しいバージョンが作成されるため、コードやIAMロールを更新できるかどうかはわかりませんが、バケット内のコードを変更することで可能かもしれません??)。
バケットへの書き込みアクセス
ソースコードが配置されているバケットへの書き込みアクセスがあっても、ソースコードとmanifest.json
を変更して任意のコードを実行することはできませんでした。
新しいバージョンが作成され、ソースコードとマニフェストがアップロードされる瞬間を監視して検出できれば、新しいバージョンがバックドア付きのものを使用するように変更することが可能かもしれません??
また、コンテナレイヤーがバケットに保存されているようなので、それらを変更することも考えられます。
AWS Hackingを学び、練習する:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hackingを学び、練習する:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated