Cognito User Pools
Last updated
Last updated
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)
Kullanıcı havuzu, Amazon Cognito'daki bir kullanıcı dizinidir. Bir kullanıcı havuzu ile kullanıcılarınız Amazon Cognito üzerinden web veya mobil uygulamanıza giriş yapabilir veya üçüncü taraf bir kimlik sağlayıcısı (IdP) aracılığıyla federasyon yapabilir. Kullanıcılarınız doğrudan veya bir üçüncü taraf aracılığıyla giriş yapsa da, kullanıcı havuzunun tüm üyeleri, bir SDK aracılığıyla erişebileceğiniz bir dizin profiline sahiptir.
Kullanıcı havuzları şunları sağlar:
Kayıt ve giriş hizmetleri.
Kullanıcıları giriş yaptırmak için yerleşik, özelleştirilebilir bir web arayüzü.
Facebook, Google, Amazon ile Giriş ve Apple ile Giriş gibi sosyal girişler ve kullanıcı havuzunuzdan SAML ve OIDC kimlik sağlayıcıları aracılığıyla.
Kullanıcı dizini yönetimi ve kullanıcı profilleri.
Çok faktörlü kimlik doğrulama (MFA), ele geçirilmiş kimlik bilgileri için kontroller, hesap ele geçirme koruması ve telefon ve e-posta doğrulaması gibi güvenlik özellikleri.
AWS Lambda tetikleyicileri aracılığıyla özelleştirilmiş iş akışları ve kullanıcı göçü.
Uygulamaların kaynak kodu genellikle kullanıcı havuzu kimliği ve istemci uygulama kimliği (ve bazen uygulama sırrı?) içerir; bunlar bir kullanıcının Cognito Kullanıcı Havuzuna giriş yapması için gereklidir.
Kayıt: Varsayılan olarak bir kullanıcı kendini kaydedebilir, bu nedenle kendisi için bir kullanıcı oluşturabilir.
Kullanıcı numarası belirleme: Kayıt işlevi, zaten var olan kullanıcı adlarını bulmak için kullanılabilir. Bu bilgi, brute-force saldırısı için yararlı olabilir.
Giriş brute-force: Kimlik Doğrulama bölümünde bir kullanıcının giriş yapması için tüm yöntemleri bulabilirsiniz, bunları brute-force ile deneyerek geçerli kimlik bilgilerini bulmaya çalışabilirsiniz.
Pacu, artık bir hesapta tüm Cognito varlıklarının sayımını otomatikleştiren ve zayıf yapılandırmaları, erişim kontrolü için kullanılan kullanıcı özniteliklerini vb. işaretleyen cognito__enum
ve cognito__attack
modüllerini içeriyor ve ayrıca kullanıcı oluşturmayı (MFA desteği dahil) ve değiştirilebilir özel özniteliklere, kullanılabilir kimlik havuzu kimlik bilgilerine, id token'larındaki üstlenilebilir rollere dayalı ayrıcalık yükseltmeyi otomatikleştiriyor.
Modüllerin işlevleri hakkında bilgi için blog yazısının 2. kısmına bakın. Kurulum talimatları için ana Pacu sayfasına bakın.
Cognito Scanner, istenmeyen hesap oluşturma ve hesap oracle'ı dahil olmak üzere Cognito'ya farklı saldırılar uygulayan bir Python CLI aracıdır. Daha fazla bilgi için bu bağlantıya bakın.
CognitoAttributeEnum: Bu script, kullanıcılar için geçerli nitelikleri listelemeye olanak tanır.
User Pools, varsayılan olarak yeni kullanıcıların kaydolmasına izin verir.
Kullanıcı hakkında daha fazla ayrıntı sağlamanız gerektiğini belirten bir hata bulabilirsiniz:
Aşağıdaki gibi bir JSON ile gerekli bilgileri sağlayabilirsiniz:
Bu işlevselliği mevcut kullanıcıları listelemek için de kullanabilirsiniz. O isimle zaten bir kullanıcı varsa hata mesajı:
Önceki komutta özel niteliklerin "custom:" ile başladığını not edin. Ayrıca, kayıt sırasında kullanıcı için yeni özel nitelikler oluşturamayacağınızı bilin. Sadece varsayılan niteliklere (gerekli olmasalar bile) ve belirtilen özel niteliklere değer verebilirsiniz.
Ya da sadece bir istemci kimliğinin var olup olmadığını test etmek için. İstemci kimliği yoksa bu hata:
Bu hatayı bulacaksınız ve kullanıcıları kaydedemeyecek veya listeleyemeyeceksiniz:
Cognito, yeni bir kullanıcıyı e-posta veya telefon numarasını doğrulayarak doğrulamaya olanak tanır. Bu nedenle, bir kullanıcı oluştururken genellikle en az kullanıcı adı ve şifre ile birlikte e-posta ve/veya telefon numarası istenecektir. Sadece kontrol ettiğiniz birini ayarlayın, böylece yeni oluşturduğunuz kullanıcı hesabınızı doğrulamak için kodu alacaksınız:
Aynı e-posta ve telefon numarasını kullanabiliyormuş gibi görünse de, oluşturulan kullanıcıyı doğrulamanız gerektiğinde Cognito aynı bilgilerin kullanılmasına itiraz edecek ve hesabı doğrulamanıza izin vermeyecek.
Varsayılan olarak bir kullanıcı özelliklerinin değerini değiştirebilir gibi bir şeyle:
Özel nitelikler (örneğin isAdmin
) kullanıldığını görebilirsiniz, çünkü varsayılan olarak kendi niteliklerinizin değerlerini değiştirebilirsiniz, bu nedenle değeri kendiniz değiştirerek yetki yükseltme yapabilirsiniz!
Bir kullanıcının e-posta ve telefon numarasını değiştirmek için bunu kullanabilirsiniz, ancak o zaman, hesap doğrulanmış kalsa bile, bu nitelikler doğrulanmamış durumda ayarlanır (tekrar doğrulamanız gerekir).
E-posta veya telefon numarası ile giriş yapamayacaksınız ta ki onları doğrulayana kadar, ancak kullanıcı adı ile giriş yapabileceksiniz.
E-posta değiştirilmiş ve doğrulanmamış olsa bile, email
alanında ID Token içinde görünecektir ve email_verified
alanı false olacaktır, ancak uygulama bunu kontrol etmiyorsa diğer kullanıcıları taklit edebilirsiniz.
Ayrıca, name alanına sadece name niteliğini değiştirerek istediğiniz her şeyi koyabileceğinizi unutmayın. Eğer bir uygulama o alanı bir nedenle email
(veya başka bir nitelik) yerine kontrol ediyorsa, diğer kullanıcıları taklit edebilirsiniz.
Her neyse, e-posta adresinizi örneğin erişebileceğiniz yeni bir e-posta ile değiştirdiyseniz, o e-posta adresinde aldığınız kod ile e-postayı onaylayabilirsiniz:
telefon_numarası
yerine email
kullanarak yeni bir telefon numarasını değiştire/doğrulamak.
Yönetici, kullanıcının tercih ettiği kullanıcı adıyla giriş yapma seçeneğini de etkinleştirebilir. Bu değeri, farklı bir kullanıcıyı taklit etmek için zaten kullanılan herhangi bir kullanıcı adı veya tercih edilen_kullanıcı_adı olarak değiştiremeyeceğinizi unutmayın.
Bir şifreyi kurtarmak, sadece kullanıcı adını (veya email veya telefon kabul edilir) bilmek ve oraya bir kod gönderileceği için buna erişim sağlamak mümkündür:
Sunucunun yanıtı her zaman olumlu olacak, sanki kullanıcı adı varmış gibi. Bu yöntemi kullanıcıları listelemek için kullanamazsınız.
Aşağıdaki kod ile şifreyi değiştirebilirsiniz:
Şifreyi değiştirmek için önceki şifreyi bilmeniz gerekir:
Bir kullanıcı havuzu farklı kimlik doğrulama yöntemlerini destekler. Eğer bir kullanıcı adı ve şifre varsa, giriş yapmak için de farklı yöntemler desteklenir. Ayrıca, bir kullanıcı Havuzda kimlik doğrulandığında 3 tür token verilir: ID Token, Erişim token ve Yenileme token.
ID Token: Bu, kimliği doğrulanmış kullanıcının name
, email
ve phone_number
gibi iddialarını içerir. ID token, ayrıca kullanıcıları kaynak sunucularınıza veya sunucu uygulamalarınıza kimlik doğrulamak için de kullanılabilir. Dış uygulamalarda kullanıyorsanız, ID token içindeki herhangi bir iddiayı güvenilir kılmadan önce imzayı doğrulamalısınız.
ID Token, kullanıcının özellik değerlerini içeren token'dır, hatta özel olanları bile.
Erişim Token: Bu, kimliği doğrulanmış kullanıcı hakkında iddialar, kullanıcının gruplarının listesi ve kapsamların listesi içerir. Erişim token'ın amacı, kullanıcı havuzundaki kullanıcı bağlamında API işlemlerini yetkilendirmektir. Örneğin, erişim token'ını kullanarak kullanıcınıza kullanıcı özelliklerini ekleme, değiştirme veya silme izni verebilirsiniz.
Yenileme Token: Yenileme token'ları ile kullanıcı için yeni ID Token ve Erişim Token alabilirsiniz, ta ki yenileme token geçersiz olana kadar. Varsayılan olarak, yenileme token'ı, uygulama kullanıcınız kullanıcı havuzunuza giriş yaptığında 30 gün sonra süresi dolmaktadır. Kullanıcı havuzunuz için bir uygulama oluşturduğunuzda, uygulamanın yenileme token süresini 60 dakika ile 10 yıl arasında herhangi bir değere ayarlayabilirsiniz.
Bu, sunucu tarafı kimlik doğrulama akışıdır:
Sunucu tarafı uygulama, AdminInitiateAuth
API işlemini çağırır ( InitiateAuth
yerine). Bu işlem, cognito-idp:AdminInitiateAuth
ve cognito-idp:AdminRespondToAuthChallenge
izinlerini içeren AWS kimlik bilgileri gerektirir. İşlem, gerekli kimlik doğrulama parametrelerini döndürür.
Sunucu tarafı uygulama kimlik doğrulama parametrelerine sahip olduktan sonra, AdminRespondToAuthChallenge
API işlemini çağırır. AdminRespondToAuthChallenge
API işlemi yalnızca AWS kimlik bilgilerini sağladığınızda başarılı olur.
Bu yöntem varsayılan olarak etkin değildir.
Giriş yapmak için şunları bilmeniz gerekir:
kullanıcı havuzu kimliği
istemci kimliği
kullanıcı adı
şifre
istemci sırrı (sadece uygulama bir sır kullanacak şekilde yapılandırılmışsa)
Bu yöntemle giriş yapabilmek için uygulamanın ALLOW_ADMIN_USER_PASSWORD_AUTH
ile giriş yapmaya izin vermesi gerekir.
Ayrıca, bu işlemi gerçekleştirmek için cognito-idp:AdminInitiateAuth
ve cognito-idp:AdminRespondToAuthChallenge
izinlerine sahip kimlik bilgilerine ihtiyacınız vardır.