AWS - IAM & STS Neautentifikovana Enumeracija

Reading time: 6 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Enumeracija Uloga i Korisničkih Imena u nalogu

Pretpostavi Ulogu Brute-Force

caution

Ova tehnika više ne funkcioniše jer, bez obzira na to da li uloga postoji ili ne, uvek dobijate ovu grešku:

Došlo je do greške (AccessDenied) prilikom pozivanja AssumeRole operacije: Korisnik: arn:aws:iam::947247140022:user/testenv nije ovlašćen da izvrši: sts:AssumeRole na resursu: arn:aws:iam::429217632764:role/account-balanceasdas

Možete testirati ovo pokretanjem:

aws sts assume-role --role-arn arn:aws:iam::412345678909:role/superadmin --role-session-name s3-access-example

Pokušaj da pretpostavite ulogu bez potrebnih dozvola izaziva AWS poruku o grešci. Na primer, ako niste ovlašćeni, AWS može vratiti:

ruby
An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::012345678901:user/MyUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::111111111111:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS

Ova poruka potvrđuje postojanje uloge, ali ukazuje da njena politika preuzimanja uloge ne dozvoljava vaše preuzimanje. Nasuprot tome, pokušaj da se preuzme nepostojeća uloga dovodi do druge greške:

less
An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole

Zanimljivo je da je ova metoda razlikovanja između postojećih i nepostojećih uloga primenljiva čak i između različitih AWS naloga. Sa važećim AWS ID-jem naloga i ciljanom listom reči, može se enumerisati uloge prisutne u nalogu bez suočavanja sa bilo kakvim inherentnim ograničenjima.

Možete koristiti ovaj script za enumeraciju potencijalnih principala zloupotrebljavajući ovaj problem.

Politike poverenja: Brute-Force Cross Account uloge i korisnici

Konfigurisanje ili ažuriranje politike poverenja IAM uloge uključuje definisanje koji AWS resursi ili usluge su dozvoljeni da preuzmu tu ulogu i dobiju privremene akreditive. Ako navedeni resurs u politici postoji, politika poverenja se uspešno čuva. Međutim, ako resurs ne postoji, javlja se greška, koja ukazuje na to da je pružen nevažeći principal.

warning

Imajte na umu da u tom resursu možete navesti cross account ulogu ili korisnika:

  • arn:aws:iam::acc_id:role/role_name
  • arn:aws:iam::acc_id:user/user_name

Ovo je primer politike:

json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::216825089941:role/Test"
},
"Action": "sts:AssumeRole"
}
]
}

GUI

To je greška koju ćete pronaći ako koristite ulogu koja ne postoji. Ako uloga postoji, politika će biti sačuvana bez grešaka. (Greška se odnosi na ažuriranje, ali takođe funkcioniše i prilikom kreiranja)

CLI

bash
### You could also use: aws iam update-assume-role-policy
# When it works
aws iam create-role --role-name Test-Role --assume-role-policy-document file://a.json
{
"Role": {
"Path": "/",
"RoleName": "Test-Role",
"RoleId": "AROA5ZDCUJS3DVEIYOB73",
"Arn": "arn:aws:iam::947247140022:role/Test-Role",
"CreateDate": "2022-05-03T20:50:04Z",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::316584767888:role/account-balance"
},
"Action": [
"sts:AssumeRole"
]
}
]
}
}
}

# When it doesn't work
aws iam create-role --role-name Test-Role2 --assume-role-policy-document file://a.json
An error occurred (MalformedPolicyDocument) when calling the CreateRole operation: Invalid principal in policy: "AWS":"arn:aws:iam::316584767888:role/account-balanceefd23f2"

Možete automatizovati ovaj proces sa https://github.com/carlospolop/aws_tools

  • bash unauth_iam.sh -t user -i 316584767888 -r TestRole -w ./unauth_wordlist.txt

Naš korišćenje Pacu:

  • run iam__enum_users --role-name admin --account-id 229736458923 --word-list /tmp/names.txt
  • run iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt
  • Uloga admin korišćena u primeru je uloga u vašem nalogu koja će biti imitirana od strane pacu da kreira politike koje su mu potrebne za enumeraciju

Privesc

U slučaju da je uloga loše konfigurisana i omogućava bilo kome da je preuzme:

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

Napadač bi mogao samo da pretpostavi to.

Treća strana OIDC federacija

Zamislite da ste uspeli da pročitate Github Actions workflow koji pristupa rolu unutar AWS.
Ova poverenja može omogućiti pristup roli sa sledećom politikom poverenja:

json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<acc_id>:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
}
}
}
]
}

Ova politika poverenja može biti tačna, ali nedostatak više uslova treba da vas navede da joj ne verujete.
To je zato što prethodnu ulogu može preuzeti BILO KO sa Github Actions! Trebalo bi da navedete u uslovima i druge stvari kao što su naziv organizacije, naziv repozitorijuma, okruženje, grana...

Još jedna potencijalna pogrešna konfiguracija je da dodate uslov kao što je sledeći:

json
"StringLike": {
"token.actions.githubusercontent.com:sub": "repo:org_name*:*"
}

Napomena da wildcard (*) pre dvojne tačke (:). Možete kreirati organizaciju kao što je org_name1 i pretpostaviti ulogu iz Github akcije.

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks