AWS - Codepipeline Privesc
codepipeline
Per maggiori informazioni su codepipeline controlla:
AWS - DataPipeline, CodePipeline & CodeCommit Enumiam:PassRole
, codepipeline:CreatePipeline
, codebuild:CreateProject, codepipeline:StartPipelineExecution
iam:PassRole
, codepipeline:CreatePipeline
, codebuild:CreateProject, codepipeline:StartPipelineExecution
Quando crei una code pipeline puoi indicare un codepipeline IAM Role 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 processo nella pagina web, i permessi indicati precedentemente non sono quelli 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 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
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
codepipeline:pollforjobs
Quando viene chiamata questa API, CodePipeline restituisce credenziali temporanee per il bucket S3 utilizzato per memorizzare gli artefatti per la pipeline, se l'azione richiede l'accesso a quel bucket S3 per artefatti di input o output. Questa API restituisce anche eventuali valori segreti definiti per l'azione.
Last updated