AWS - Cognito Privesc
Last updated
Last updated
Cognito hakkında daha fazla bilgi için:
Cognito, kimlik doğrulama yapılmış ve kimlik doğrulama yapılmamış kullanıcılara IAM rol kimlik bilgileri verebildiği için, bir uygulamanın Kimlik Havuzu Kimliği'ni (bu genellikle uygulamada sabitlenmiştir) bulursanız, yeni kimlik bilgilerini elde edebilir ve dolayısıyla yetkilendirme yükseltme yapabilirsiniz (muhtemelen daha önce hiçbir kimlik bilginizin olmadığı bir AWS hesabında).
Daha fazla bilgi için bu sayfayı kontrol edin.
Potansiyel Etki: Kimlik doğrulama yapılmamış kullanıcılara bağlı hizmetler rolüne doğrudan yetkilendirme yükseltme (ve muhtemelen kimlik doğrulama yapılmış kullanıcılara bağlı olanına da).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Bu izinle, cognito uygulamasının kimlik doğrulama yapılmış/kimlik doğrulama yapılmamış kullanıcılarına herhangi bir cognito rolü verebilirsiniz.
Eğer cognito uygulamasında kimliği doğrulanmamış kullanıcılar etkinleştirilmemişse, bunu etkinleştirmek için cognito-identity:UpdateIdentityPool
iznine de ihtiyacınız olabilir.
Potansiyel Etki: Herhangi bir cognito rolüne doğrudan ayrıcalık yükseltme.
cognito-identity:update-identity-pool
Bu izne sahip bir saldırgan, örneğin kendi kontrolü altındaki bir Cognito Kullanıcı Havuzu veya giriş yapabileceği başka bir kimlik sağlayıcıyı ayarlayabilir ve böylece bu Cognito Kimlik Havuzuna erişim sağlama yolunu elde edebilir. Ardından, sadece o kullanıcı sağlayıcıya giriş yapmak, yapılandırılmış kimlik havuzundaki doğrulanmış rolüne erişimine izin verecektir.
Bu izni kötüye kullanarak temel yetkilendirmeyi etkinleştirmek de mümkündür:
Potansiyel Etki: Kimlik havuzundaki yapılandırılmış yetkilendirilmiş IAM rolünü tehlikeye atar.
cognito-idp:AdminAddUserToGroup
Bu izin, bir Cognito kullanıcısını Cognito grubuna eklemeye izin verir, bu nedenle bir saldırgan bu izni kötüye kullanarak kontrolü altındaki bir kullanıcıyı daha iyi ayrıcalıklara veya farklı IAM rollerine sahip diğer gruplara ekleyebilir:
Potansiyel Etki: Diğer Cognito gruplarına ve Kullanıcı Havuzu Gruplarına bağlı IAM rollerine ayrıcalık yükseltme.
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
Bu izinlere sahip bir saldırgan, kompromize edilmiş bir Cognito Kimlik Sağlayıcısı tarafından kullanılabilecek her IAM rolüyle grupları oluşturabilir/güncelleyebilir ve kompromize edilmiş bir kullanıcıyı gruba dahil ederek tüm bu rolleri erişebilir:
Potansiyel Etki: Diğer Cognito IAM rollerine ayrıcalık yükseltme.
cognito-idp:AdminConfirmSignUp
Bu izin, bir kaydı doğrulamaya izin verir. Varsayılan olarak, herhangi biri Cognito uygulamalarına giriş yapabilir, eğer bu izin bırakılırsa, bir kullanıcı herhangi bir veriyle bir hesap oluşturabilir ve bunu bu izinle doğrulayabilir.
Potansiyel Etki: Yeni bir kullanıcı kaydedebilirseniz, kimlik havuzu IAM rolünde kimlik doğrulama yapmış kullanıcılara dolaylı bir ayrıcalık yükseltme yapabilirsiniz. Herhangi bir hesabı onaylayabilme yeteneğiyle diğer uygulama işlevlerine dolaylı bir ayrıcalık yükseltme yapabilirsiniz.
cognito-idp:AdminCreateUser
Bu izin, saldırganın kullanıcı havuzunda yeni bir kullanıcı oluşturmasına izin verir. Yeni kullanıcı etkin olarak oluşturulur, ancak şifresini değiştirmesi gerekecektir.
Potansiyel Etki: Kimlik havuzu IAM rolünde doğrudan ayrıcalık yükseltme. Herhangi bir kullanıcı oluşturabilme yeteneği ile diğer uygulama işlevlerine dolaylı ayrıcalık yükseltme.
cognito-idp:AdminEnableUser
Bu izinler, bir saldırganın devre dışı bırakılmış bir kullanıcının kimlik bilgilerini bulduğu ve tekrar etkinleştirmesi gerektiği çok nadir bir senaryoda yardımcı olabilir.
Potansiyel Etki: Yetkilendirilmiş kullanıcılar için kimlik havuzu IAM rolüne dolaylı olarak ayrıcalık yükseltme ve saldırganın devre dışı bırakılmış bir kullanıcının kimlik bilgilerine sahip olması durumunda kullanıcının izinlerine erişme.
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
Bu izin, ADMIN_USER_PASSWORD_AUTH** yöntemiyle giriş yapmaya izin verir**. Daha fazla bilgi için bağlantıyı takip edin.
cognito-idp:AdminSetUserPassword
Bu izin, bir saldırganın herhangi bir kullanıcının şifresini değiştirmesine olanak tanır, böylece herhangi bir kullanıcının yerine geçebilir (MFA etkin olmayan kullanıcılar için).
Potansiyel Etki: Potansiyel olarak herhangi bir kullanıcıya doğrudan ayrıcalık kazanma, her kullanıcının üye olduğu tüm gruplara erişim ve Kimlik Havuzu kimlik doğrulama IAM rolüne erişim.
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: Bir saldırgan, bu izni kullanarak bir kullanıcının SMS MFA'sı olarak kontrolü altındaki bir mobil telefonu ayarlayabilir.
SetUserMFAPreference: Öncekiyle benzer şekilde, bu izin kullanıcıların MFA tercihlerini ayarlamak için kullanılabilir ve MFA korumasını atlamak için kullanılabilir.
SetUserPoolMfaConfig: Öncekiyle benzer şekilde, bu izin kullanıcı havuzunun MFA tercihlerini ayarlamak için kullanılabilir ve MFA korumasını atlamak için kullanılabilir.
UpdateUserPool: Kullanıcı havuzunu güncelleyerek MFA politikasını değiştirmek mümkündür. Buradan cli'yi kontrol edin.
Potansiyel Etki: Saldırganın kimlik bilgilerini bildiği herhangi bir kullanıcıya dolaylı olarak yetki yükseltme yapabilmesi, MFA korumasını atlamasına izin verebilir.
cognito-idp:AdminUpdateUserAttributes
Bu izne sahip bir saldırgan, kontrolü altındaki bir kullanıcının e-posta veya telefon numarasını veya başka bir özniteliğini değiştirerek altta yatan bir uygulamada daha fazla ayrıcalık elde etmeye çalışabilir. Bu, bir e-posta veya telefon numarasını değiştirip doğrulanmış olarak ayarlamayı sağlar.
Potansiyel Etki: Kullanıcı özniteliklerine dayalı yetkilere sahip olan Cognito Kullanıcı Havuzu kullanarak, altta yatan uygulamada potansiyel dolaylı yetki yükseltme.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
Bu izne sahip bir saldırgan, zaten mevcut havuz istemcilerinden daha az kısıtlamalı bir yeni bir Kullanıcı Havuzu İstemcisi oluşturabilir. Örneğin, yeni istemci herhangi bir kimlik doğrulama yöntemine izin verebilir, herhangi bir gizli anahtara sahip olmayabilir, belirteç iptalini devre dışı bırakabilir, belirteçlerin daha uzun süre geçerli olmasına izin verebilir...
Aynı şey, mevcut bir istemcinin değiştirilmesi durumunda da yapılabilir.
Komut satırında (veya güncelleme komutunda) tüm seçenekleri görebilirsiniz, kontrol edin!.
Potansiyel Etki: Kullanıcı Havuzu tarafından kullanılan Kimlik Havuzu yetkilendirilmiş kullanıcısına dolaylı bir ayrıcalık yükseltme potansiyeli, güvenlik önlemlerini gevşeten ve saldırganın oluşturabildiği bir kullanıcıyla giriş yapmasına olanak tanıyan yeni bir istemci oluşturarak.
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
Bir saldırgan, bu izni kötüye kullanarak yeni kullanıcıları içeren bir CSV yükleyerek kullanıcılar oluşturabilir.
(Eğer yeni bir içe aktarma işlemi oluşturursanız, henüz test etmedim ama iam passrole iznine ihtiyacınız olabilir).
Potansiyel Etki: Kimlik havuzu IAM rolüne doğrudan ayrıcalık yükseltme. Herhangi bir kullanıcı oluşturabilme yeteneğiyle diğer uygulama işlevlerine dolaylı ayrıcalık yükseltme.
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
Saldırgan, yeni bir kimlik sağlayıcı oluşturarak bu sağlayıcı aracılığıyla giriş yapabilir.
Potansiyel Etki: Kimlik havuzu IAM rolünde doğrudan ayrıcalık yükseltme. Herhangi bir kullanıcı oluşturabilme yeteneğiyle dolaylı olarak diğer uygulama işlevlerine ayrıcalık yükseltme.
Bu, Cognito Kimlik Havuzlarının rollerinde varsayılan olarak çok yaygın bir izindir. İzinlerdeki joker karakter her zaman kötü görünse de (özellikle AWS'den geliyorsa), saldırgan perspektifinden verilen izinler çok kullanışlı değildir.
Bu izin, Kimlik Havuzlarının ve Kimlik Havuzları içindeki Kimlik Kimliklerinin kullanıcı bilgilerini okumaya izin verir (bu hassas bilgi değildir). Kimlik Kimlikleri, kendilerine atanan Veri Setlerini içerebilir, bunlar oturumların bilgileridir (AWS bunu bir kaydedilmiş oyun gibi tanımlar). Bu verilerin bazı hassas bilgiler içermesi mümkündür (ancak olasılık oldukça düşüktür). Bu bilgilere nasıl erişileceğini enumarasyon sayfasında bulabilirsiniz.
Bir saldırgan, bu izinleri ayrıca bu veri setlerindeki değişiklikleri yayınlayan bir Cognito akışına kendini kaydedebilir veya cognito olayları üzerinde tetiklenen bir lambda kullanabilir. Bunu kullanıldığını görmedim ve burada hassas bilgi beklemem, ancak imkansız değil.
Pacu, AWS istismar çerçevesi, artık bir hesaptaki tüm Cognito varlıklarının enumarasyonunu otomatikleştiren "cognito__enum" ve "cognito__attack" modüllerini içerir ve zayıf yapılandırmaları, erişim kontrolü için kullanılan kullanıcı özniteliklerini vb. belirler ve değiştirilebilir özel özniteliklere dayalı kullanıcı oluşturmayı (MFA desteği de dahil olmak üzere) ve değiştirilebilir kimlik havuzu kimlik bilgilerini, kimlik belirteçlerindeki kabul edilebilir rolleri otomatikleştirir.
Modüllerin işlevlerinin açıklaması için blog yazısının ikinci bölümüne bakın. Kurulum talimatları için ana Pacu sayfasına bakın.
Belirli bir kimlik havuzu ve kullanıcı havuzu istemcisi için kullanıcı oluşturma ve tüm ayrıcalık yükseltme vektörlerini denemek için örnek cognito__attack kullanımı:
Mevcut AWS hesabında görünen tüm kullanıcı havuzları, kullanıcı havuzu istemcileri, kimlik havuzları, kullanıcılar vb. bilgileri toplamak için kullanılan örnek cognito__enum kullanımı:
Bu komut, AWS hesabında bulunan tüm kullanıcı havuzlarını, kullanıcı havuzu istemcilerini, kimlik havuzlarını, kullanıcıları vb. listeleyecektir.
Cognito Scanner, Cognito üzerinde farklı saldırıları, bir privilage escalation (ayrıcalık yükseltme) dahil olmak üzere uygulayan Python tabanlı bir CLI aracıdır.
Bu araç, AWS Cognito hizmetinde ayrıcalık yükseltme saldırıları gerçekleştirmek için kullanılır. Saldırganın, hedef kullanıcının kimlik bilgilerine (erişim anahtarı ve gizli anahtar) ve hedef kullanıcı havuzunun kimlik bilgilerine (kullanıcı havuzu kimlik bilgisi ve bölge) erişimi olmalıdır.
Bu örnekte, saldırganın erişim anahtarı "ABCDEFGHIJKLMNOPQRST" ve gizli anahtarı "1234567890abcdefghijklmnopqrstuvwxyz1234" olarak kabul edilir. Hedef kullanıcı havuzu kimlik bilgisi "us-west-2" bölgesinde bulunan bir kullanıcı havuzunu temsil eder.
Daha fazla bilgi için https://github.com/padok-team/cognito-scanner adresini kontrol edin.