AWS - IAM & STS Unauthenticated Enum
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:
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:
İ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:
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
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:
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:
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:
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
Last updated