AWS - STS Privesc
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.
STS
sts:AssumeRole
Кожна роль створюється з політикою довіри до ролі, ця політика вказує хто може прийняти створену роль. Якщо роль з того ж облікового запису говорить, що обліковий запис може її прийняти, це означає, що обліковий запис зможе отримати доступ до ролі (і потенційно privesc).
Наприклад, наступна політика довіри до ролі вказує, що будь-хто може її прийняти, отже, будь-який користувач зможе privesc до дозволів, пов'язаних з цією роллю.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}
Ви можете видати себе за роль, яка виконує:
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname
Потенційний вплив: Привілейоване підвищення до ролі.
caution
Зверніть увагу, що в цьому випадку дозвіл sts:AssumeRole
потрібно вказати в ролі для зловживання і не в політиці, що належить атакуючому.
З одним винятком, для того щоб прийняти роль з іншого облікового запису, обліковий запис атакуючого також повинен мати sts:AssumeRole
над роллю.
sts:GetFederationToken
З цим дозволом можливо згенерувати облікові дані для видавання себе за будь-якого користувача:
aws sts get-federation-token --name <username>
Ось як ці дозволи можуть бути надані безпечно, не надаючи доступу до імітації інших користувачів:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}"
}
]
}
sts:AssumeRoleWithSAML
Політика довіри з цією роллю надає користувачам, аутентифікованим через SAML, доступ до наслідування ролі.
Приклад політики довіри з цим дозволом:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OneLogin",
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::290594632123:saml-provider/OneLogin"
},
"Action": "sts:AssumeRoleWithSAML",
"Condition": {
"StringEquals": {
"SAML:aud": "https://signin.aws.amazon.com/saml"
}
}
}
]
}
Щоб згенерувати облікові дані для імітації ролі, ви можете використовувати щось на зразок:
aws sts assume-role-with-saml --role-arn <value> --principal-arn <value>
Але постачальники можуть мати власні інструменти, щоб спростити це, такі як onelogin-aws-assume-role:
onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600
Потенційний вплив: Привласнення прав до ролі.
sts:AssumeRoleWithWebIdentity
Ця дозволяє отримати набір тимчасових облікових даних безпеки для користувачів, які були автентифіковані в мобільному, веб-додатку, EKS... з постачальником веб-ідентичності. Дізнайтеся більше тут.
Наприклад, якщо обліковий запис служби EKS повинен мати можливість видавати себе за IAM роль, він матиме токен у /var/run/secrets/eks.amazonaws.com/serviceaccount/token
і може прийняти роль і отримати облікові дані, виконавши щось на зразок:
aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/<role_name> --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
# The role name can be found in the metadata of the configuration of the pod
Federation Abuse
IAM Roles Anywhere Privesc
AWS IAM RolesAnywhere дозволяє навантаженням поза AWS приймати IAM ролі, використовуючи X.509 сертифікати. Але коли політики довіри не мають належних обмежень, їх можна зловживати для ескалації привілеїв.
Ця політика не має обмежень на те, які атрибути довірчого якоря або сертифіката дозволені. В результаті будь-який сертифікат, пов'язаний з будь-яким довірчим якорем в обліковому записі, може бути використаний для прийняття цієї ролі.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rolesanywhere.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity",
"sts:TagSession"
]
}
]
}
Для підвищення привілеїв, aws_signing_helper
потрібен з https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html
Потім, використовуючи дійсний сертифікат, зловмисник може перейти до ролі з вищими привілеями.
aws_signing_helper credential-process \
--certificate readonly.pem \
--private-key readonly.key \
--trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/ta-id \
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \
--role-arn arn:aws:iam::123456789012:role/Admin
Посилання
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.