GCP - local privilege escalation ssh pivoting

HackTricksをサポートする

このシナリオでは、あなたがCompute Engineプロジェクト内の非特権アカウントを侵害したと仮定します。

驚くべきことに、あなたが侵害したCompute EngineのGPC権限は、マシン内でローカルに特権を昇格させるのに役立つかもしれません。これはクラウド環境では常に非常に役立つわけではありませんが、可能であることを知っておくのは良いことです。

スクリプトを読む

Compute Instancesは、おそらくサービスアカウントを使用してアクションを実行するためのスクリプトを実行するために存在しています。

IAMは非常に細かく設定できるため、アカウントはリソースに対して読み取り/書き込み権限を持っているが、リスト権限は持っていない場合があります。

この良い仮想的な例は、instance82736-long-term-xyz-archive-0332893というストレージバケットにバックアップを読み書きする権限を持つCompute Instanceです。

コマンドラインからgsutil lsを実行すると何も返されません。これは、サービスアカウントがstorage.buckets.list IAM権限を持っていないためです。しかし、gsutil ls gs://instance82736-long-term-xyz-archive-0332893を実行すると、完全なファイルシステムバックアップが見つかり、あなたのローカルLinuxアカウントが持っていないデータへの平文アクセスが得られるかもしれません。

このバケット名は、スクリプト(bash、Python、Rubyなど)内で見つけることができるかもしれません。

カスタムメタデータ

管理者は、インスタンスおよびプロジェクトレベルカスタムメタデータを追加できます。これは、任意のキー/値ペアをインスタンスに渡す方法であり、環境変数や起動/シャットダウンスクリプトに一般的に使用されます。

さらに、ユーザーデータを追加することも可能で、これはマシンが起動または再起動されるたびに実行されるスクリプトであり、メタデータエンドポイントからもアクセス可能です。

詳細については、次を確認してください:

IAM権限の悪用

以下に提案するほとんどの権限は、デフォルトのCompute SAに付与されているもので、唯一の問題は、デフォルトのアクセススコープがSAの使用を妨げることです。しかし、cloud-platform スコープが有効になっているか、compute スコープが有効になっている場合、これらを悪用することができます

以下の権限を確認してください:

ファイルシステム内のキーを検索

他のユーザーがボックス内でgcloudにログインし、ファイルシステムに資格情報を残しているか確認してください:

sudo find / -name "gcloud"

これらは最も興味深いファイルです:

  • ~/.config/gcloud/credentials.db

  • ~/.config/gcloud/legacy_credentials/[ACCOUNT]/adc.json

  • ~/.config/gcloud/legacy_credentials/[ACCOUNT]/.boto

  • ~/.credentials.json

さらにAPIキーの正規表現

TARGET_DIR="/path/to/whatever"

# Service account keys
grep -Pzr "(?s){[^{}]*?service_account[^{}]*?private_key.*?}" \
"$TARGET_DIR"

# Legacy GCP creds
grep -Pzr "(?s){[^{}]*?client_id[^{}]*?client_secret.*?}" \
"$TARGET_DIR"

# Google API keys
grep -Pr "AIza[a-zA-Z0-9\\-_]{35}" \
"$TARGET_DIR"

# Google OAuth tokens
grep -Pr "ya29\.[a-zA-Z0-9_-]{100,200}" \
"$TARGET_DIR"

# Generic SSH keys
grep -Pzr "(?s)-----BEGIN[ A-Z]*?PRIVATE KEY[a-zA-Z0-9/\+=\n-]*?END[ A-Z]*?PRIVATE KEY-----" \
"$TARGET_DIR"

# Signed storage URLs
grep -Pir "storage.googleapis.com.*?Goog-Signature=[a-f0-9]+" \
"$TARGET_DIR"

# Signed policy documents in HTML
grep -Pzr '(?s)<form action.*?googleapis.com.*?name="signature" value=".*?">' \
"$TARGET_DIR"

参考文献

HackTricksをサポートする

Last updated