AWS - STS Privesc

Support HackTricks

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

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

Зверніть увагу, що в цьому випадку дозвіл 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

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

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

Зловживання федерацією

Підтримайте HackTricks

Last updated