Permisos sobre políticas
Lab: IAM vulnerable
Es crucial restringir los permisos en las políticas de AWS tanto como limitar los permisos de los usuarios en sus cuentas y en las de otros usuarios. Las políticas son las que conceden los permisos a los usuarios, ya sea como parte de un grupo o al asumir roles. Los permisos se asignan a través de las políticas aplicadas a esos grupos y roles. Por lo tanto, los administradores deben ser muy cuidadosos al otorgar permisos a los usuarios en relación a las políticas. Específicamente, los siguientes permisos de política pueden conducir a una escalada de privilegios:
iam:CreatePolicyVersion
iam:SetDefaultPolicyVersion
iam:AttachUserPolicy
iam:AttachGroupPolicy
iam:AttachRolePolicy
iam:PutUserPolicy
iam:PutGroupPolicy
iam:PutRolePolicy
El permiso para crear una nueva versión de la política le permite a un usuario reemplazar completamente los permisos en una política. Si esta política se aplica a ellos, esto abre la puerta para que el usuario simplemente se asigne privilegios administrativos completos de AWS. Adjuntar una política o crear una nueva política para un usuario, grupo o función puede aumentar de manera similar los permisos aplicados al usuario.
IAM:CreatePolicyVersion
Si un atacante tiene el permiso iam:CreatePolicyVersion en AWS, puede crear una nueva versión de una política ya existente. Esto significa que podrían crear una política que permita más permisos de los que tienen actualmente, lo que podría comprometer la seguridad del sistema.
Pasos:
Listar políticas existentes
Crear y establecer por defecto una política con mayores permisos
Configuración inicial
Usuario del laboratorio: privesc1-CreateNewPolicyVersion-user

Encada política existen versiones y donde cada versión puede cambia de forma drástica, se tiene que checar cual es la política por defecto:

Después crear unas llaves de acceso para utilizar el usuario con AWS CLI. Las llaves de acceso se crean por medio de un usuario administrador, y se simula que se obtuvieron mediante algúna brecha dentro de una auditoría.
aws sts assume-role --role-arn arn:aws:iam::651927172911:role/privesc1- CreateNewPolicyVersion-role --role-session-name privesc1


Checar que la configuración esté correcta con:
aws sts get-caller-identity --profile privesc1

Explotación
En este tipo de explotación, se tiene que crear un archivo JSON con las políticas que se quieren agregar. Por ejemplo la política de permitir todo:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
Despues, subir el archivo con el el uso de la política IAM:CreatePolicyVersion
aws iam create-policy-version --policy-arn arn:aws:iam::651927172911:policy/privesc1- CreateNewPolicyVersion --policy-document file://admin_politica.json --set-as-default --profile privesc1

IAM:SetDefaultPolicyVersion
_Al modificar una política, AWS crea una nueva versión con todos los cambios, estos cambios se pueden hacer rollback. L_os usuarios con el permiso iam:SetDefaultPolicyVersion pueden establecer qué versión de la política es la versión predeterminada (activa). Entonces si en el pasadó existió una política con demaciados permisiso, este comando puede regresar a un punto en el tiempo para obtener mayores privilegios.
Pasos de explotación:
Identificar políticas y versiones
Identificar la versión con mas permisos
Usar set-default-policy-version a la versión con mayores permisos
Configuración inicial
Usuario del laboratorio: privesc2-SetExistingDefaultPolicyVersion-
user

Posterior mente generar llaves e acceso desde cuenta administrador para interactuar con el usuario en AWS CLI y configurar un perfil.
Explotación
Primero se tiene que listar las versiones de una política y luego listar cuales permisos tienen cada versionado. Para esto se tiene que identificar cual política es la afectada y luego listar las versiones con el siguiente comando:
aws iam list-policy-versions --policy-arn arn:aws:iam::651927172911:policy/privesc2- SetExistingDefaultPolicyVersion

Como se observa en la imagen anterior, la versión 1 es la que está por defecto y que existe otra versión la numero 2, se procede a compara cual versión tiene mas privilegios
aws iam get-policy-version --policy-arn arn:aws:aim::some:some --version-id v3 --profile privesc2

Se ve que la política que no está por defecto, tiene mas permisos que la política actual
aws iam get-policy --policy-arn arn:aws:iam::651927172911:policy/privesc2- SetExistingDefaultPolicyVersion

Finalmente, se procede a realizar el cambio de la política por la versión con más permisos
aws iam set-default-policy-version --policy-arn arn:aws:iam::651927172911:policy/privesc2- SetExistingDefaultPolicyVersion --version-id v2 --profile privesc2

IAM:AttachUserPolicy
Un atacante con el permiso iam:AttachUserPolicy puede aumentar los privilegios existentes adjuntando una política a un usuario al que tiene acceso, agregando los permisos de esa política al atacante.
Este Permiso fue explotado contra la empresa Expel en abril del 2022 por medio de credenciales encontradas en un repositorio de código público.
Configuración inicial
Usuario del laboratorio: privesc7-AttachUserPolicy-user con el siguiente rol:

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

Explotación
Para esta explotación, se necesita conocer si existe una política que con mayores permisos, se tiene que hace un listado de políticas por algún medio o utilizar las políticas por defecto de AWS, en este caso se usara la política AdminsitratorAccess que viene por defecto en AWS y se sabe que existe. Después, solo se utiliza el comando attach-user-policy indicando a cual usuario con cual ARN de política se va a agregar.
aws iam attach-user-policy --user-name privesc7-AttachUserPolicy-user --policy-arn arn:aws:iam::aws:policy/AdministratorAccess --profile privesc7

Como se ve en la salida de los comandos anteriores, se hizo correctamente la adición de una política de administradores, escalando privilegios.
IAM:AttachGroupPolicy
Equivalente al anterior método, este permiso permite aumentar los privilegios de un grupo adjuntado políticas al grupo, no afecta a las políticas propias del usuario
Este método de ataque, añade políticas a un grupo si varios usuarios se encuentran en el grupo, todos ellos tendrán elevación de privilegios.
Configuración inicial
Usuario del laboratorio: privesc8-AttachGroupPolicy-user con el rol:

Posterior mente generar llaves e acceso desde cuenta administrador para interactuar con el usuario en AWS CLI y configurar un perfil.
Explotación
Dado que los miembros de un grupo heredan los permisos de las políticas asociadas al grupo, solo se tiene que saber el grupo al cual pertenece el usuario y la política que se va a agregar al grupo:

En este caso el nombre del grupo se sacó por medio web, se puede realiza el comando aws iam list-groups-for-user --user-name <User>
pero requiere permisos de IAM de list.
Finalmente se agrega la política con permisos avanzados al grupo seleccionado
aws iam attach-group-policy --group-name privesc8-AttachGroupPolicy-group --policy-arn arn:aws:iam::aws:policy/AdministratorAccess --profile privesc8

IAM:AttachRolePolicy
Un atacante con el permiso iam:AttachRolePolicy puede aumentar los privilegios adjuntando una política a una función a la que tiene acceso, agregando los permisos de esa política al atacante.
Configuración inicial
Usuario del laboratorio: privesc9-AttachRolePolicy-user con el rol:

Posterior mente generar llaves e acceso desde cuenta administrador para interactuar con el usuario en AWS CLI y configurar un perfil.
Explotación
Parecida a la explotación de Attach User Policy, se tiene que saber el nombre del rol al cual se le va añadir una política, esto se hace con el siguiente comando:
aws iam attach-role-policy --role-name privesc9-AttachRolePolicy-role --policy-arn arn:aws:iam::aws:policy/AdministratorAccess --profile privesc9

Se recomienda en la fase de enumeración, conocer los roles existentes, los roles asociados al usuario a elevar privilegios, y conocer las políticas que podemos añadir al rol.
Despues a veces se tiene que asumir el rol afectado el cual dará nuevos datos de acceso:
aws sts assume-role --role-arn arn:aws:iam::123123:role/Rolename --role-session-name privesc9 --profile privesc9

Normalmente asumir un rol, genera un token de sesión, se tiene que agregar dentro del archivo de credentials
Acceso InicialLuego configurar las llaves con AWS configure y se tendrá acceso administrador.
IAM:PutUserPolicy
Un atacante con el permiso iam:PutUserPolicy puede aumentar los privilegios creando o actualizando una política en línea para un usuario al que tiene acceso, agregando los permisos de esa política al atacante.
Configuración inicial
Usuario del laboratorio:privesc10-PutUserPolicy-user con el rol:

Posterior mente generar llaves e acceso desde cuenta administrador para interactuar con el usuario en AWS CLI y configurar un perfil.
Explotación
Este ataque consiste en agregar una serie de políticas a un usuario dado un archivo.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
Después, se procede a utilizar el comando siguiente para asignar la política al usuario
aws iam put-user-policy --user-name privesc10-PutUserPolicy-user --policy-name politica-PrivEsc-Spartan --policy-document file://admin_politica.json --profile privesc10

IAM:PutGroupPolicy
Un atacante con el permiso iam:PutGroupPolicy puede aumentar los privilegios creando o actualizando una política en línea para un grupo del que forma parte, agregando los permisos de esa política al atacante.
Configuración inicial
Todo
Usuario del laboratorio: privesc11-PutGroupPolicy-user con el rol:

Posterior mente generar llaves e acceso desde cuenta administrador para interactuar con el usuario en AWS CLI y configurar un perfil.
Explotación
Como en el caso anterior, se tiene que generar una política para agregar a un grupo de usuarios
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
Finalmente, se procede con asignar la política a un grupo, requiere de conocer el grupo a cual asignar la política:
aws iam put-group-policy --group-name privesc11- PutGroupPolicy-group --policy-name politica-PrivEsc2- Spartan --policy-document file://admin_politica.json -- profile privesc11

IAM:PutRolePolicy
Un atacante con el permiso iam:PutRolePolicy puede aumentar los privilegios creando o actualizando una política en línea para un rol al que tiene acceso, agregando los permisos de esa política al atacante.
Configuración inicial
Todo
Usuario del laboratorio: privesc12-PutRolePolicy-user con el rol:

Posterior mente generar llaves e acceso desde cuenta administrador para interactuar con el usuario en AWS CLI y configurar un perfil.
Explotación
Como en el caso anterior, se tiene que generar una política para agregar a un rol
{
"Version": "202-03-12",
"Statement": [
{
"Sid": "PermitirTodo",
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
Finalmente, se tiene que conocer el nombre del rol al cual se le va asignar la política:
aws iam put-role-policy --role-name privesc12- PutRolePolicy-role --policy-name politica-PrivEsc3- Spartan --policy-document file://admin_politica.json --profile privesc12

Si revisamos ahora las políticas insertadas a nuestro rol, lograremos apreciar que hemos adjuntado exitosamente la política de administrador a nuestro usuario inicial por medio del rol.

Última actualización