AWS - IAM & STS Unauthenticated Enum

htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları:

Bir hesapta Rolleri ve Kullanıcı Adlarını Sıralama

Rolü Zorla Kullanma

Bu teknik artık çalışmıyor çünkü rol var veya yok, her zaman bu 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-balanceasdas

Bunu çalıştırarak test edebilirsiniz:

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

Gerekli izinlere sahip olmadan bir rolü kullanmaya çalışmak, AWS'de bir hata mesajı tetikler. Örneğin, yetkisiz ise, AWS şunu 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 var olduğunu doğrular, ancak assume role politikasının senin assumption yapmana izin vermediğini belirtir. Buna karşılık, var olmayan bir rolü assume etmeye çalışmak farklı bir hata ile sonuçlanır:

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

İlginç bir şekilde, mevcut ve mevcut olmayan roller arasındaki ayrımı belirleme yöntemi, farklı AWS hesapları arasında bile uygulanabilir. Geçerli bir AWS hesap kimliği ve hedeflenen bir kelime listesi ile hesapta bulunan rolleri sınırsız bir şekilde sıralayabilirsiniz.

Bu sorunu istismar etmek için bu betiği kullanabilirsiniz potansiyel yetkilileri sıralamak için.

Güven Politikaları: Cross Account rolleri ve kullanıcıları Brute-Force etmek

Bir IAM rolünün güven politikasını yapılandırmak veya güncellemek, o rolü almak ve geçici kimlik bilgilerini elde etmek için hangi AWS kaynaklarının veya hizmetlerin izin verildiğini tanımlamayı içerir. Belirtilen kaynak politikada varsa, güven politikası başarıyla kaydedilir. Ancak, kaynak mevcut değilse, geçersiz bir yetkilendirme sağlandığına dair bir hata oluşur.

Bu kaynakta bir cross account rolü veya kullanıcıyı belirtebilirsiniz:

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

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

İşte bir politika örneği:

{
"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. Rol varsa, politika hata olmadan kaydedilecektir. (Hata güncelleme için olsa da, oluştururken de çalışır)

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 süreci https://github.com/carlospolop/aws_tools ile otomatikleştirebilirsiniz.

  • 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.txt

  • run iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt

  • Örnekte kullanılan admin rolü, pacu tarafından taklit edilmek için hesabınızda bir rol olup, numaralandırma için oluşturması gereken politikaları oluşturmak için kullanılır.

Privilege Escalation

Eğer rol yanlış yapılandırılmış ve herhangi bir kişinin bunu üstlenebilmesine izin veriyorsa:

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

Saldırgan sadece varsayabilir.

Üçüncü Taraf OIDC Federasyonu

Bir Github Actions iş akışını okumayı başardığınızı düşünün, bu iş akışı bir AWS içindeki bir role erişiyor. Bu güven, aşağıdaki güven politikasına sahip bir role erişim sağlayabilir:

{
"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 güven politikası doğru olabilir, ancak daha fazla koşulun eksikliği size güvenmemeniz gerektiğini gösterir. Bu, önceki rolün Github Actions'dan HERHANGİ BİRİ tarafından alınabileceği anlamına gelir! Koşullarda ayrıca org adı, repo adı, env, branch gibi diğer şeyleri de belirtmelisiniz...

Başka bir potansiyel yanlış yapılandırma ise aşağıdaki gibi bir koşul eklemektir:

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

Not: iki nokta üst üste (*) ile iki nokta (:)'dan önce. org_name1 gibi bir org oluşturabilir ve Github Action'dan rolü assume edebilirsiniz.

Referanslar

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları:

Last updated