mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 19:11:41 -08:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
@@ -10,13 +10,13 @@ Para mais informações, veja:
|
||||
../aws-services/aws-secrets-manager-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Ler Secrets
|
||||
### Read Secrets
|
||||
|
||||
Os **secrets em si são informações sensíveis**, [veja a página de privesc](../aws-privilege-escalation/aws-secrets-manager-privesc.md) para aprender como lê-los.
|
||||
Os **secrets em si são informações sensíveis**, [veja a página privesc](../aws-privilege-escalation/aws-secrets-manager-privesc.md) para aprender como lê-los.
|
||||
|
||||
### DoS - Alterar valor do secret
|
||||
### DoS Change Secret Value
|
||||
|
||||
Ao alterar o valor do secret, você pode **DoS todo o sistema que depende desse valor.**
|
||||
Ao alterar o valor do secret você pode **DoS todos os sistemas que dependem desse valor.**
|
||||
|
||||
> [!WARNING]
|
||||
> Observe que valores anteriores também são armazenados, então é fácil voltar ao valor anterior.
|
||||
@@ -28,19 +28,19 @@ aws secretsmanager put-secret-value \
|
||||
```
|
||||
### DoS Change KMS key
|
||||
|
||||
Se o attacker tiver a permissão secretsmanager:UpdateSecret, ele pode configurar o secret para usar uma KMS key pertencente ao attacker. Essa KMS key é inicialmente configurada de modo que qualquer pessoa pode acessá‑la e usá‑la, portanto atualizar o secret com a nova KMS key é possível. Se a KMS key não fosse acessível, o secret não poderia ser atualizado.
|
||||
Se o atacante tiver a permissão secretsmanager:UpdateSecret, ele pode configurar o secret para usar uma KMS key de propriedade do atacante. Essa key é inicialmente configurada de modo que qualquer pessoa possa acessá-la e usá-la, então atualizar o secret com a nova key é possível. Se a key não fosse acessível, o secret não poderia ser atualizado.
|
||||
|
||||
Depois de alterar a KMS key do secret, o attacker modifica a configuração da sua KMS key para que apenas ele possa acessá‑la. Assim, nas versões subsequentes do secret, este será criptografado com a nova KMS key e, como não haverá acesso a ela, a capacidade de recuperar o secret será perdida.
|
||||
Após alterar a key do secret, o atacante modifica a configuração da sua key para que apenas ele possa acessá-la. Dessa forma, nas versões subsequentes do secret, ele será criptografado com a nova key e, como não haverá acesso a ela, a capacidade de recuperar o secret será perdida.
|
||||
|
||||
É importante notar que essa inacessibilidade ocorrerá apenas em versões posteriores, após o conteúdo do secret mudar, já que a versão atual ainda está criptografada com a KMS key original.
|
||||
É importante notar que essa inacessibilidade ocorrerá apenas em versões posteriores, depois que o conteúdo do secret mudar, já que a versão atual ainda está criptografada com a KMS key original.
|
||||
```bash
|
||||
aws secretsmanager update-secret \
|
||||
--secret-id MyTestSecret \
|
||||
--kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE
|
||||
```
|
||||
### DoS Deleting Secret
|
||||
### DoS Exclusão de segredo
|
||||
|
||||
O número mínimo de dias para excluir um secret é 7
|
||||
O número mínimo de dias para excluir um segredo é 7
|
||||
```bash
|
||||
aws secretsmanager delete-secret \
|
||||
--secret-id MyTestSecret \
|
||||
@@ -48,29 +48,29 @@ aws secretsmanager delete-secret \
|
||||
```
|
||||
## secretsmanager:RestoreSecret
|
||||
|
||||
É possível restaurar um secret, o que permite restaurar secrets que tenham sido agendados para exclusão, já que o período mínimo de exclusão para secrets é de 7 dias e o máximo é de 30 dias. Em conjunto com a permissão secretsmanager:GetSecretValue, isso possibilita recuperar o conteúdo deles.
|
||||
É possível restaurar um segredo, o que permite a restauração de segredos que foram programados para exclusão, já que o período mínimo de exclusão para segredos é de 7 dias e o máximo é de 30 dias. Em conjunto com a permissão secretsmanager:GetSecretValue, isso possibilita recuperar seus conteúdos.
|
||||
|
||||
Para recuperar um secret que está em processo de exclusão, você pode usar o seguinte comando:
|
||||
Para recuperar um segredo que está em processo de exclusão, você pode usar o seguinte comando:
|
||||
```bash
|
||||
aws secretsmanager restore-secret \
|
||||
--secret-id <Secret_Name>
|
||||
```
|
||||
## secretsmanager:DeleteResourcePolicy
|
||||
|
||||
Esta ação permite excluir a resource policy que controla quem pode acessar um secret. Isso pode causar um DoS se a resource policy tiver sido configurada para permitir acesso a um conjunto específico de usuários.
|
||||
Esta ação permite deletar a resource policy que controla quem pode acessar um secret. Isso pode levar a um DoS se a resource policy tiver sido configurada para permitir acesso a um conjunto específico de usuários.
|
||||
|
||||
Para excluir a resource policy:
|
||||
Para deletar a resource policy:
|
||||
```bash
|
||||
aws secretsmanager delete-resource-policy \
|
||||
--secret-id <Secret_Name>
|
||||
```
|
||||
## secretsmanager:UpdateSecretVersionStage
|
||||
|
||||
Os estados de um segredo são usados para gerenciar suas versões. AWSCURRENT marca a versão ativa que as aplicações usam, AWSPREVIOUS mantém a versão anterior para que você possa reverter se necessário, e AWSPENDING é usado no processo de rotação para preparar e validar uma nova versão antes de torná-la a atual.
|
||||
Os estados de um secret são usados para gerenciar versões de um segredo. AWSCURRENT marca a versão ativa que as aplicações usam, AWSPREVIOUS mantém a versão anterior para que você possa reverter se necessário, e AWSPENDING é usado no processo de rotação para preparar e validar uma nova versão antes de torná-la a atual.
|
||||
|
||||
As aplicações sempre leem a versão com AWSCURRENT. Se alguém mover esse rótulo para a versão errada, as aplicações usarão credenciais inválidas e podem falhar.
|
||||
|
||||
AWSPREVIOUS não é usado automaticamente. No entanto, se AWSCURRENT for removido ou reatribuído incorretamente, pode parecer que tudo ainda está funcionando com a versão anterior.
|
||||
AWSPREVIOUS não é usado automaticamente. No entanto, se AWSCURRENT for removido ou reatribuído incorretamente, pode parecer que tudo continua a ser executado com a versão anterior.
|
||||
```bash
|
||||
aws secretsmanager update-secret-version-stage \
|
||||
--secret-id <your-secret-name-or-arn> \
|
||||
@@ -79,3 +79,52 @@ aws secretsmanager update-secret-version-stage \
|
||||
--remove-from-version-id <previous-version-id>
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### Mass Secret Exfiltration via BatchGetSecretValue (up to 20 per call)
|
||||
|
||||
Abuse the Secrets Manager BatchGetSecretValue API para recuperar até 20 secrets em uma única requisição. Isso pode reduzir dramaticamente o volume de chamadas de API em comparação com iterar GetSecretValue por segredo. Se filtros forem usados (tags/name), a permissão ListSecrets também é necessária. O CloudTrail ainda registra um evento GetSecretValue para cada segredo recuperado no lote.
|
||||
|
||||
Permissões necessárias
|
||||
- secretsmanager:BatchGetSecretValue
|
||||
- secretsmanager:GetSecretValue para cada segredo alvo
|
||||
- secretsmanager:ListSecrets se estiver usando --filters
|
||||
- kms:Decrypt nos CMKs usados pelos segredos (se não estiver usando aws/secretsmanager)
|
||||
|
||||
> [!WARNING]
|
||||
> Observe que a permissão `secretsmanager:BatchGetSecretValue` por si só não é suficiente para recuperar segredos; você também precisa de `secretsmanager:GetSecretValue` para cada segredo que deseja recuperar.
|
||||
|
||||
Exfiltrate by explicit list
|
||||
```bash
|
||||
aws secretsmanager batch-get-secret-value \
|
||||
--secret-id-list <secret1> <secret2> <secret3> \
|
||||
--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}'
|
||||
```
|
||||
Exfiltrar por filtros (chave/valor de tag ou prefixo de nome)
|
||||
```bash
|
||||
# By tag key
|
||||
aws secretsmanager batch-get-secret-value \
|
||||
--filters Key=tag-key,Values=env \
|
||||
--max-results 20 \
|
||||
--query 'SecretValues[].{Name:Name,Val:SecretString}'
|
||||
|
||||
# By tag value
|
||||
aws secretsmanager batch-get-secret-value \
|
||||
--filters Key=tag-value,Values=prod \
|
||||
--max-results 20
|
||||
|
||||
# By name prefix
|
||||
aws secretsmanager batch-get-secret-value \
|
||||
--filters Key=name,Values=MyApp
|
||||
```
|
||||
Lidando com falhas parciais
|
||||
```bash
|
||||
# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters
|
||||
aws secretsmanager batch-get-secret-value --secret-id-list <id1> <id2> <id3>
|
||||
```
|
||||
Impacto
|
||||
- Rápida “smash-and-grab” de muitos segredos com menos chamadas de API, potencialmente contornando alertas ajustados para picos de GetSecretValue.
|
||||
- Os logs do CloudTrail ainda incluem um evento GetSecretValue por cada segredo recuperado pelo lote.
|
||||
|
||||
@@ -12,18 +12,18 @@ Para mais informações sobre Secrets Manager, veja:
|
||||
|
||||
### `secretsmanager:GetSecretValue`
|
||||
|
||||
Um atacante com essa permissão pode obter o **valor salvo dentro de um secret** na AWS **Secretsmanager**.
|
||||
Um atacante com essa permissão pode obter o **valor salvo dentro de um secret** no AWS **Secretsmanager**.
|
||||
```bash
|
||||
aws secretsmanager get-secret-value --secret-id <secret_name> # Get value
|
||||
```
|
||||
**Impacto Potencial:** Acesso a dados altamente sensíveis dentro do serviço AWS Secrets Manager.
|
||||
|
||||
> [!WARNING]
|
||||
> Observe que mesmo com a permissão `secretsmanager:BatchGetSecretValue`, um atacante também precisaria da permissão `secretsmanager:GetSecretValue` para recuperar os segredos sensíveis.
|
||||
> Observe que mesmo com a permissão `secretsmanager:BatchGetSecretValue`, um atacante também precisaria de `secretsmanager:GetSecretValue` para recuperar os segredos sensíveis.
|
||||
|
||||
### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`)
|
||||
|
||||
Com as permissões anteriores, é possível **conceder acesso a outros principals/accounts (mesmo externos)** para acessar o **segredo**. Observe que, para **ler segredos criptografados** com uma chave KMS, o usuário também precisa ter **acesso à chave KMS** (mais informações na [KMS Enum page](../aws-services/aws-kms-enum.md)).
|
||||
Com as permissões anteriores é possível **dar acesso a outros principals/accounts (mesmo externos)** para acessar o **secret**. Note que, para **read secrets encrypted** com uma KMS key, o usuário também precisa ter **access over the KMS key** (more info in the [KMS Enum page](../aws-services/aws-kms-enum.md)).
|
||||
```bash
|
||||
aws secretsmanager list-secrets
|
||||
aws secretsmanager get-resource-policy --secret-id <secret_name>
|
||||
|
||||
Reference in New Issue
Block a user