GCP - AppEngine Privesc
Reading time: 8 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を提出してハッキングトリックを共有してください。
App Engine
App Engineに関する詳細情報は以下を確認してください:
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を使用してアプリをデプロイするために必要な権限です。おそらくget
およびlist
の権限は回避**できるかもしれません。
Pythonのコード例はhttps://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengineで見つけることができます。
デフォルトでは、アプリサービスの名前は**default
になり、同じ名前のインスタンスは1つだけ存在できます。
これを変更して2つ目のアプリを作成するには、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分待ってください。うまくいかない場合は、別のデプロイを呼び出して数分待ってください。
note
使用するサービスアカウントを指定することは可能ですが、デフォルトではApp EngineのデフォルトSAが使用されます。
アプリケーションのURLは、https://<proj-name>.oa.r.appspot.com/
または https://<service_name>-dot-<proj-name>.oa.r.appspot.com
のようになります。
同等の権限を更新する
AppEngineを更新するための十分な権限があるかもしれませんが、新しいものを作成する権限はないかもしれません。その場合、現在のApp Engineを更新する方法は次のとおりです:
# Find the code of the App Engine in the buckets
gsutil ls
# Download code
mkdir /tmp/appengine2
cd /tmp/appengine2
## In this case it was found in this custom bucket but you could also use the
## buckets generated when the App Engine is created
gsutil cp gs://appengine-lab-1-gcp-labs-4t04m0i6-3a97003354979ef6/labs_appengine_1_premissions_privesc.zip .
unzip labs_appengine_1_premissions_privesc.zip
## Now modify the code..
## If you don't have an app.yaml, create one like:
cat >> app.yaml <<EOF
runtime: python312
entrypoint: gunicorn -b :\$PORT main:app
env_variables:
A_VARIABLE: "value"
EOF
# Deploy the changes
gcloud app deploy
# Update the SA if you need it (and if you have actas permissions)
gcloud app update --service-account=<sa>@$PROJECT_ID.iam.gserviceaccount.com
もしすでにAppEngineを侵害している場合、appengine.applications.update
の権限と、使用するサービスアカウントに対するactAsがあれば、次のようにAppEngineで使用されるサービスアカウントを変更できます:
gcloud app update --service-account=<sa>@$PROJECT_ID.iam.gserviceaccount.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 インスタンスのタイプ flexible(標準ではない)にsshでログインすることが可能です。一部の**list
およびget
権限は本当に必要ないかもしれません**。
gcloud app instances ssh --service <app-name> --version <version-id> <ID>
appengine.applications.update
, appengine.operations.get
これは、アプリケーションを設定するためにGoogleが使用するバックグラウンドSAを変更するだけだと思うので、これを悪用してサービスアカウントを盗むことはできないと思います。
gcloud app update --service-account=<sa_email>
appengine.versions.getFileContents
, appengine.versions.update
これらの権限をどのように使用するか、またはそれらが有用かどうかわかりません(コードを変更すると新しいバージョンが作成されるため、コードやIAMロールのどちらかを更新できるかどうかは不明ですが、バケット内のコードを変更することでできるはずだと思います)。
バケットへの書き込みアクセス
前述のように、appengineのバージョンは、staging.<project-id>.appspot.com
という形式のバケット内にデータを生成します。このバケットを事前に引き継ぐことはできません。なぜなら、GCPユーザーはappspot.com
というドメイン名を使用してバケットを生成する権限がないからです。
しかし、このバケットに対して読み取りおよび書き込みアクセスがあれば、バケットを監視し、変更が行われるたびにできるだけ早くコードを修正することで、AppEngineバージョンに付随するSAの権限を昇格させることが可能です。この方法で、このコードから作成されるコンテナはバックドア付きのコードを実行します。
詳細情報とPoCについては、このページの関連情報を確認してください:
アーティファクトレジストリへの書き込みアクセス
App Engineはアーティファクトレジストリ内にdockerイメージを作成します。このサービス内でイメージを変更しても、App Engineインスタンスを削除して(新しいものがデプロイされる)も、実行されるコードは変更されません。
バケットと同様にレースコンディション攻撃を行うことで、実行されるコードを上書きできる可能性がありますが、これはテストされていません。
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を提出してハッキングトリックを共有してください。