# GCP - Pub/Sub Enum

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

## Pub/Sub <a href="#reviewing-cloud-pubsub" id="reviewing-cloud-pubsub"></a>

[Google **Cloud Pub/Sub**](https://cloud.google.com/pubsub/) è descritto come un servizio che facilita lo scambio di messaggi tra applicazioni indipendenti. I componenti principali includono **argomenti**, ai quali le applicazioni possono **iscriversi**. Le applicazioni iscritte hanno la capacità di **inviare e ricevere messaggi**. Ogni messaggio comprende il contenuto effettivo insieme ai metadati associati.

L'**argomento è la coda** dove i messaggi verranno inviati, mentre le **iscrizioni** sono gli **oggetti** che gli utenti utilizzeranno per **accedere ai messaggi negli argomenti**. Possono esserci più di **1 iscrizione per argomento** e ci sono 4 tipi di iscrizioni:

- **Pull**: L'utente(i) di questa iscrizione deve estrarre i messaggi.
- **Push**: Viene indicato un endpoint URL e i messaggi verranno inviati immediatamente ad esso.
- **Big query table**: Come push ma impostando i messaggi all'interno di una tabella Big query.
- **Cloud Storage**: Consegnare messaggi direttamente a un bucket esistente.

Per **default**, un'**iscrizione scade dopo 31 giorni**, anche se può essere impostata per non scadere mai.

Per **default**, un messaggio è **conservato per 7 giorni**, ma questo tempo può essere **aumentato fino a 31 giorni**. Inoltre, se non viene **ACKato in 10s**, torna nella coda. Può anche essere impostato che i messaggi ACKati continuino a essere memorizzati.

Un argomento è per default crittografato utilizzando una **chiave di crittografia gestita da Google**. Ma può anche essere selezionata una **CMEK** (Customer Managed Encryption Key) da KMS.

**Dead letter**: Le iscrizioni possono configurare un **numero massimo di tentativi di consegna**. Quando un messaggio non può essere consegnato, viene **ripubblicato nell'argomento di dead letter specificato**.

### Snapshots & Schemas

Uno snapshot è una funzionalità che **cattura lo stato di un'iscrizione in un momento specifico**. È essenzialmente un **backup consistente dei messaggi non riconosciuti in un'iscrizione**. Creando uno snapshot, preservi lo stato di riconoscimento dei messaggi dell'iscrizione, consentendoti di riprendere il consumo dei messaggi dal punto in cui è stato preso lo snapshot, anche dopo che i messaggi originali sarebbero stati altrimenti eliminati.\
Se sei molto fortunato, uno snapshot potrebbe contenere **vecchie informazioni sensibili** da quando è stato preso lo snapshot.

Quando crei un argomento, puoi indicare che i **messaggi dell'argomento devono seguire uno schema**.

### Enumeration
```bash
# Get a list of topics in the project
gcloud pubsub topics list
gcloud pubsub topics describe <topic>
gcloud pubsub topics list-subscriptions <topic>
gcloud pubsub topics get-iam-policy <topic>

# Get a list of subscriptions across all topics
gcloud pubsub subscriptions list
gcloud pubsub subscriptions describe <subscription>
gcloud pubsub subscriptions get-iam-policy <subscription>

# Get list of schemas
gcloud pubsub schemas list
gcloud pubsub schemas describe <schema>
gcloud pubsub schemas list-revisions <schema>

# Get list of snapshots
gcloud pubsub snapshots list
gcloud pubsub snapshots describe <snapshot>
```
Tuttavia, potresti ottenere risultati migliori [**richiedendo un set di dati più ampio**](https://cloud.google.com/pubsub/docs/replay-overview), inclusi messaggi più vecchi. Questo ha alcuni prerequisiti e potrebbe influenzare le applicazioni, quindi assicurati di sapere davvero cosa stai facendo.

### Escalation dei privilegi e Post Exploitation

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

## Pub/Sub Lite

[**Pub/Sub Lite**](https://cloud.google.com/pubsub/docs/choosing-pubsub-or-lite) è un servizio di messaggistica con **storage zonale**. Pub/Sub Lite **costa una frazione** di Pub/Sub ed è destinato a pipeline di **streaming ad alto volume** (fino a 10 milioni di messaggi al secondo) e sistemi basati su eventi dove il costo ridotto è la considerazione principale.

In PubSub Lite ci **sono** **argomenti** e **sottoscrizioni**, non ci **sono snapshot** e **schemi** e ci sono:

- **Riservazioni**: Le Riservazioni di Pub/Sub Lite sono una funzionalità che consente agli utenti di riservare capacità in una regione specifica per i loro flussi di messaggi.
- **Operazioni**: Si riferisce alle azioni e ai compiti coinvolti nella gestione e amministrazione di Pub/Sub Lite.

### Enumerazione
```bash
# lite-topics
gcloud pubsub lite-topics list
gcloud pubsub lite-topics describe <topic>
gcloud pubsub lite-topics list-subscriptions <topic>

# lite-subscriptions
gcloud pubsub lite-subscriptions list
gcloud pubsub lite-subscriptions describe <subscription>

# lite-reservations
gcloud pubsub lite-reservations list
gcloud pubsub lite-reservations describe <topic>
gcloud pubsub lite-reservations list-topics <topic>

# lite-operations
gcloud pubsub lite-operations list
gcloud pubsub lite-operations describe <topic>
```
{{#include ../../../banners/hacktricks-training.md}}
