# AWS - Codepipeline Privesc

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

## codepipeline

Pour plus d'informations sur codepipeline, consultez :

{{#ref}}
../aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md
{{#endref}}

### `iam:PassRole`, `codepipeline:CreatePipeline`, `codebuild:CreateProject, codepipeline:StartPipelineExecution`

Lors de la création d'un code pipeline, vous pouvez indiquer un **rôle IAM codepipeline à exécuter**, vous pourriez donc les compromettre.

En plus des autorisations précédentes, vous auriez besoin **d'accès à l'endroit où le code est stocké** (S3, ECR, github, bitbucket...)

J'ai testé cela en effectuant le processus sur la page web, les autorisations indiquées précédemment ne sont pas celles de List/Get nécessaires pour créer un codepipeline, mais pour le créer sur le web, vous aurez également besoin de : `codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:<plusieurs>`

Lors de la **création du projet de build**, vous pouvez indiquer une **commande à exécuter** (rev shell ?) et exécuter la phase de build en tant que **utilisateur privilégié**, c'est la configuration dont l'attaquant a besoin pour compromettre :

![](<../../../images/image (276).png>)

![](<../../../images/image (181).png>)

### ?`codebuild:UpdateProject, codepipeline:UpdatePipeline, codepipeline:StartPipelineExecution`

Il pourrait être possible de modifier le rôle utilisé et la commande exécutée sur un codepipeline avec les autorisations précédentes.

### `codepipeline:pollforjobs`

[AWS mentionne](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html) :

> Lorsque cette API est appelée, CodePipeline **renvoie des identifiants temporaires pour le bucket S3** utilisé pour stocker les artefacts du pipeline, si l'action nécessite un accès à ce bucket S3 pour les artefacts d'entrée ou de sortie. Cette API **renvoie également toutes les valeurs secrètes définies pour l'action**.

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