Files
hacktricks-cloud/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md

2.1 KiB

AWS - Codepipeline Privesc

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

codepipeline

Per ulteriori informazioni su codepipeline controlla:

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

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

Quando crei una pipeline di codice puoi indicare un ruolo IAM di codepipeline da eseguire, quindi potresti comprometterli.

Oltre ai permessi precedenti avresti bisogno di accesso al luogo dove è memorizzato il codice (S3, ECR, github, bitbucket...)

Ho testato questo eseguendo il processo nella pagina web, i permessi indicati precedentemente non sono quelli di List/Get necessari per creare una codepipeline, ma per crearla nel web avrai anche bisogno di: codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:<several>

Durante la creazione del progetto di build puoi indicare un comando da eseguire (rev shell?) e far eseguire la fase di build come utente privilegiato, questa è la configurazione di cui l'attaccante ha bisogno per compromettere:

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

Potrebbe essere possibile modificare il ruolo utilizzato e il comando eseguito su una codepipeline con i permessi precedenti.

codepipeline:pollforjobs

AWS menziona:

Quando questa API viene chiamata, CodePipeline restituisce credenziali temporanee per il bucket S3 utilizzato per memorizzare gli artefatti per la pipeline, se l'azione richiede accesso a quel bucket S3 per artefatti di input o output. Questa API restituisce anche eventuali valori segreti definiti per l'azione.

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