Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation

This commit is contained in:
Translator
2025-10-06 09:59:43 +00:00
parent bfc12ff1dc
commit 277914c440
2 changed files with 67 additions and 18 deletions

View File

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

View File

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