GCP - Cloudfunctions Privesc
cloudfunctions
Cloud Functionsに関する詳細情報:
pageGCP - Cloud Functions Enumcloudfunctions.functions.create
、cloudfunctions.functions.sourceCodeSet
、iam.serviceAccounts.actAs
cloudfunctions.functions.create
、cloudfunctions.functions.sourceCodeSet
、iam.serviceAccounts.actAs
これらの特権を持つ攻撃者は、任意の(悪意のある)コードを持つ新しいCloud Functionを作成し、それにサービスアカウントを割り当てることができます。その後、メタデータからサービスアカウントトークンを漏洩させ、それに特権を昇格させることができます。 関数をトリガーするためにはいくつかの特権が必要です。
この方法の悪用スクリプトはこちらとこちらで見つけることができ、事前にビルドされた.zipファイルはこちらで見つけることができます。
cloudfunctions.functions.update
、cloudfunctions.functions.sourceCodeSet
、iam.serviceAccounts.actAs
cloudfunctions.functions.update
、cloudfunctions.functions.sourceCodeSet
、iam.serviceAccounts.actAs
これらの特権を持つ攻撃者は、関数のコードを変更し、関連付けられたサービスアカウントを変更してトークンを外部に流出させることができます。 関数をトリガーするためにはいくつかの特権が必要です。
この方法の悪用スクリプトはこちらで見つけることができます。
cloudfunctions.functions.sourceCodeSet
cloudfunctions.functions.sourceCodeSet
この権限を持つと、ファイルを関数のバケットにアップロードするための署名付きURLを取得できます(ただし、関数のコードは変更されず、引き続き更新する必要があります)
攻撃者の視点からは、この権限だけがどれだけ有用かはよくわかりませんが、知っておくと良いでしょう。
cloudfunctions.functions.setIamPolicy
、iam.serviceAccounts.actAs
cloudfunctions.functions.setIamPolicy
、iam.serviceAccounts.actAs
前述の**.update
または.create
**権限を自分自身に付与して特権を昇格させます。
cloudfunctions.functions.update
cloudfunctions.functions.update
**iam.serviceAccounts.actAs
なしでcloudfunctions
**権限のみを持っている場合、関数を更新することはできないため、これは有効な特権昇格ではありません。
バケット書き込み権限
Cloud Functionsのコードが格納されているバケットに書き込み権限を持つ攻撃者は、function_code.zip
を上書きしてコードを変更し、実行されると任意のコードを実行できます。
参考文献
最終更新