From 01d582ba7ef33e4af9483e3059416925b88a7649 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 29 Sep 2025 22:40:46 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat --- .../aws-sts-post-exploitation.md | 31 ++++++---- .../aws-sts-privesc.md | 59 ++++++++----------- 2 files changed, 44 insertions(+), 46 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md index c17ddbb2a..a9625d7a2 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md @@ -4,20 +4,19 @@ ## STS -Для отримання додаткової інформації: +Для додаткової інформації: {{#ref}} ../aws-services/aws-iam-enum.md {{#endref}} -### Від IAM облікових даних до консолі +### From IAM Creds to Console -Якщо вам вдалося отримати деякі IAM облікові дані, ви можете бути зацікавлені в **доступі до веб-консолі** за допомогою наступних інструментів.\ -Зверніть увагу, що користувач/роль повинні мати дозвіл **`sts:GetFederationToken`**. +Якщо вам вдалося отримати деякі IAM credentials, можливо, вас зацікавить **доступ до веб-консолі** за допомогою наведених інструментів.\ Зауважте, що користувач/роль має мати дозвіл **`sts:GetFederationToken`**. #### Користувацький скрипт -Наступний скрипт використовуватиме профіль за замовчуванням та стандартне місцезнаходження AWS (не gov і не cn), щоб надати вам підписане URL, яке ви можете використовувати для входу в веб-консолі: +Наведений скрипт використає профіль за замовчуванням і стандартний регіон AWS (не gov і не cn), щоб згенерувати підписаний URL, який ви можете використати для входу в веб-консоль: ```bash # Get federated creds (you must indicate a policy or they won't have any perms) ## Even if you don't have Admin access you can indicate that policy to make sure you get all your privileges @@ -55,7 +54,7 @@ echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.co ``` #### aws_consoler -Ви можете **згенерувати посилання на веб-консоль** з [https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler). +Ви можете **згенерувати посилання на веб-консоль** за допомогою [https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler). ```bash cd /tmp python3 -m venv env @@ -64,22 +63,22 @@ pip install aws-consoler aws_consoler [params...] #This will generate a link to login into the console ``` > [!WARNING] -> Переконайтеся, що у користувача IAM є дозвіл `sts:GetFederationToken`, або надайте роль для прийняття. +> Переконайтеся, що IAM користувач має дозвіл `sts:GetFederationToken`, або надайте роль, яку можна прийняти. #### aws-vault -[**aws-vault**](https://github.com/99designs/aws-vault) - це інструмент для безпечного зберігання та доступу до облікових даних AWS у середовищі розробки. +[**aws-vault**](https://github.com/99designs/aws-vault) — це інструмент для безпечного зберігання та доступу до облікових даних AWS у середовищі розробки. ```bash aws-vault list aws-vault exec jonsmith -- aws s3 ls # Execute aws cli with jonsmith creds aws-vault login jonsmith # Open a browser logged as jonsmith ``` > [!NOTE] -> Ви також можете використовувати **aws-vault** для отримання **сесії консолі браузера** +> Ви також можете використати **aws-vault** для отримання **сеансу веб-консолі в браузері** ### **Обхід обмежень User-Agent з Python** -Якщо існує **обмеження на виконання певних дій на основі user agent** (наприклад, обмеження використання бібліотеки python boto3 на основі user agent), можливо використовувати попередню техніку для **підключення до веб-консолі через браузер**, або ви можете безпосередньо **змінити user-agent boto3**, виконавши: +Якщо існує **обмеження на виконання певних дій залежно від використовуваного User-Agent** (наприклад, обмеження використання python boto3 library на основі User-Agent), можна скористатися попередньою технікою, щоб **підключитися до веб-консолі через браузер**, або безпосередньо **змінити boto3 user-agent**, зробивши: ```bash # Shared by ex16x41 # Create a client @@ -92,4 +91,16 @@ client.meta.events.register( 'before-call.secretsmanager.GetSecretValue', lambda # Perform the action response = client.get_secret_value(SecretId="flag_secret") print(response['SecretString']) ``` +### **`sts:GetFederationToken`** + +З цим дозволом можна створити федеративну ідентичність для користувача, який виконує цю дію, обмежену дозволами, якими володіє цей користувач. +```bash +aws sts get-federation-token --name +``` +Токен, повернутий sts:GetFederationToken, належить федеративній ідентичності користувача, який викликав запит, але має обмежені дозволи. + +Навіть якщо користувач має права адміністратора, певні дії, такі як перелік користувачів IAM або приєднання політик, не можуть бути виконані через федеративний токен. + +Крім того, цей метод дещо більш малопомітний, оскільки федеративний користувач не відображається в AWS Portal; його можна побачити лише через логи CloudTrail або інструменти моніторингу. + {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md index 5a99a66d2..af2c2b3ec 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md @@ -6,9 +6,9 @@ ### `sts:AssumeRole` -Кожна роль створюється з **політикою довіри до ролі**, ця політика вказує **хто може прийняти створену роль**. Якщо роль з **того ж облікового запису** говорить, що обліковий запис може її прийняти, це означає, що обліковий запис зможе отримати доступ до ролі (і потенційно **privesc**). +Кожна роль створюється з **політикою довіри ролі**, ця політика вказує **хто може прийняти створену роль**. Якщо роль з **того самого акаунту** вказує, що акаунт може її приймати, це означає, що цей акаунт зможе отримати доступ до ролі (і потенційно **privesc**). -Наприклад, наступна політика довіри до ролі вказує, що будь-хто може її прийняти, отже, **будь-який користувач зможе privesc** до дозволів, пов'язаних з цією роллю. +Наприклад, наступна політика довіри ролі вказує, що будь-хто може її прийняти, отже **будь-який користувач зможе здійснити privesc** до дозволів, пов'язаних з цією роллю. ```json { "Version": "2012-10-17", @@ -23,39 +23,20 @@ ] } ``` -Ви можете видати себе за роль, яка виконує: +Ви можете видаватися за роль, запустивши: ```bash aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname ``` -**Потенційний вплив:** Привілейоване підвищення до ролі. +**Потенційний вплив:** Privesc до ролі. > [!CAUTION] -> Зверніть увагу, що в цьому випадку дозвіл `sts:AssumeRole` потрібно **вказати в ролі для зловживання** і не в політиці, що належить атакуючому.\ -> З одним винятком, для того щоб **прийняти роль з іншого облікового запису**, обліковий запис атакуючого **також повинен** мати **`sts:AssumeRole`** над роллю. +> Зауважте, що в цьому випадку дозвіл `sts:AssumeRole` має бути **вказаний у ролі, яку збираються зловживати**, а не в політиці, що належить зловмиснику.\ +> За одним винятком, щоб **прийняти роль з іншого облікового запису** обліковий запис зловмисника **також повинен** мати **`sts:AssumeRole`** щодо цієї ролі. -### **`sts:GetFederationToken`** -З цим дозволом можливо згенерувати облікові дані для видавання себе за будь-якого користувача: -```bash -aws sts get-federation-token --name -``` -Ось як ці дозволи можуть бути надані безпечно, не надаючи доступу до імітації інших користувачів: -```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, доступ до наслідування ролі.** +Політика довіри для цієї ролі надає **користувачам, автентифікованим через SAML, можливість діяти від імені ролі.** Приклад політики довіри з цим дозволом: ```json @@ -78,21 +59,21 @@ aws sts get-federation-token --name ] } ``` -Щоб згенерувати облікові дані для імітації ролі, ви можете використовувати щось на зразок: +Щоб згенерувати облікові дані для імітації ролі, можна використати щось на кшталт: ```bash aws sts assume-role-with-saml --role-arn --principal-arn ``` -Але **постачальники** можуть мати **власні інструменти**, щоб спростити це, такі як [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): +Але **провайдери** можуть мати **власні інструменти**, щоб полегшити це, наприклад [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): ```bash onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600 ``` -**Потенційний вплив:** Привласнення прав до ролі. +**Потенційний вплив:** Privesc to the role. ### `sts:AssumeRoleWithWebIdentity` -Ця дозволяє отримати набір тимчасових облікових даних безпеки для **користувачів, які були автентифіковані в мобільному, веб-додатку, EKS...** з постачальником веб-ідентичності. [Дізнайтеся більше тут.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) +Цей дозвіл дає можливість отримати набір тимчасових облікових даних безпеки для **користувачів, які були автентифіковані у мобільному, веб-застосунку, EKS...** з використанням провайдера web identity. [Learn more here.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) -Наприклад, якщо **обліковий запис служби EKS** повинен мати можливість **видавати себе за IAM роль**, він матиме токен у **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** і може **прийняти роль і отримати облікові дані**, виконавши щось на зразок: +Наприклад, якщо **EKS service account** має мати можливість **impersonate an IAM role**, він матиме токен у **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** і може **assume the role and get credentials**, виконавши щось на кшталт: ```bash aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/ --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 @@ -105,9 +86,9 @@ aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/ ### IAM Roles Anywhere Privesc -AWS IAM RolesAnywhere дозволяє навантаженням поза AWS приймати IAM ролі, використовуючи X.509 сертифікати. Але коли політики довіри не мають належних обмежень, їх можна зловживати для ескалації привілеїв. +AWS IAM RolesAnywhere дозволяє робочим навантаженням поза AWS assume IAM roles за допомогою X.509 certificates. Але коли trust policies не належним чином обмежені, їх можна зловживати для privilege escalation. -Ця політика не має обмежень на те, які атрибути довірчого якоря або сертифіката дозволені. В результаті будь-який сертифікат, пов'язаний з будь-яким довірчим якорем в обліковому записі, може бути використаний для прийняття цієї ролі. +Ця policy не містить обмежень щодо того, який trust anchor або які certificate attributes дозволені. В результаті будь-який certificate, пов'язаний з будь-яким trust anchor в акаунті, може бути використаний, щоб assume this role. ```json { "Version": "2012-10-17", @@ -127,9 +108,9 @@ AWS IAM RolesAnywhere дозволяє навантаженням поза AWS } ``` -Для підвищення привілеїв, `aws_signing_helper` потрібен з https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html +Щоб виконати privesc, `aws_signing_helper` потрібен з https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html -Потім, використовуючи дійсний сертифікат, зловмисник може перейти до ролі з вищими привілеями. +Потім, використовуючи дійсний сертифікат, зловмисник може pivot у role з вищими привілеями ```bash aws_signing_helper credential-process \ --certificate readonly.pem \ @@ -138,7 +119,13 @@ aws_signing_helper credential-process \ --profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \ --role-arn arn:aws:iam::123456789012:role/Admin ``` -### Посилання +Точка довіри перевіряє, що клієнтський сертифікат `readonly.pem` походить від його авторизованого CA; коли точку довіри створювали, був включений публічний сертифікат CA (який тепер використовується для валідації `readonly.pem`). Усередині `readonly.pem` міститься відкритий ключ, який AWS використовує для перевірки того, що підпис було зроблено відповідним приватним ключем `readonly.key`. + +Сертифікат також підтверджує ідентичність і надає атрибути (наприклад CN або OU), які профіль `default` перетворює на теги — політика довіри ролі може використовувати ці теги, щоб вирішити, чи надавати доступ; якщо в політиці довіри немає умов, ці теги ігноруються і будь-хто з дійсним сертифікатом допускається. + +Щоб ця атака була можливою, і точка довіри, і профіль `default` повинні бути активними. + +### References - [https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation](https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation)