AWS - Codepipeline Privesc
codepipeline
Pour plus d'infos sur codepipeline, consultez :
iam:PassRole
, codepipeline:CreatePipeline
, codebuild:CreateProject, codepipeline:StartPipelineExecution
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 permissions 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 permissions 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 :
?codebuild:UpdateProject, codepipeline:UpdatePipeline, codepipeline:StartPipelineExecution
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 permissions précédentes.
codepipeline:pollforjobs
codepipeline:pollforjobs
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.
Last updated