AWS - Cognito Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Cognito hakkında daha fazla bilgi için kontrol edin:
AWS - Cognito EnumCognito, kimlik doğrulanmış ve kimlik doğrulanmamış kullanıcılara IAM rol kimlik bilgileri verebildiğinden, bir uygulamanın Kimlik Havuzu ID'sini bulursanız (uygulamada sabit kodlanmış olmalıdır) yeni kimlik bilgileri elde edebilir ve dolayısıyla privesc (muhtemelen daha önce hiçbir kimlik bilgisine sahip olmadığınız bir AWS hesabında).
Daha fazla bilgi için bu sayfayı kontrol edin.
Olası Etki: Kimlik doğrulanmamış kullanıcılara bağlı hizmetler rolüne doğrudan privesc (ve muhtemelen kimlik doğrulanmış kullanıcılara bağlı olanına).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Bu izinle, kimlik doğrulanmış/kimlik doğrulanmamış kullanıcılarına herhangi bir cognito rolü verebilirsiniz.
Eğer cognito uygulaması kimlik doğrulaması yapılmamış kullanıcıları etkinleştirmemişse, bunu etkinleştirmek için cognito-identity:UpdateIdentityPool
iznine de ihtiyacınız olabilir.
Olası Etki: Herhangi bir cognito rolüne doğrudan yetki yükseltme.
cognito-identity:update-identity-pool
Bu izne sahip bir saldırgan, örneğin kontrolü altında bir Cognito Kullanıcı Havuzu veya giriş yapabileceği başka bir kimlik sağlayıcısı ayarlayabilir ve bu Cognito Kimlik Havuzuna erişim sağlamak için bir yol olarak kullanabilir. Ardından, sadece o kullanıcı sağlayıcısında giriş yapmak, Kimlik Havuzundaki yapılandırılmış kimlik doğrulamalı role erişmesine izin verecektir.
Bu izni temel kimlik doğrulamasını sağlamak için kötüye kullanmak da mümkündür:
Potansiyel Etki: Kimlik havuzundaki yapılandırılmış kimlik doğrulamalı IAM rolünü tehlikeye atma.
cognito-idp:AdminAddUserToGroup
Bu izin, bir Cognito kullanıcısını bir Cognito grubuna eklemeye olanak tanır, 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:
Olası Etki: Diğer Cognito gruplarına ve Kullanıcı Havuzu Gruplarına bağlı IAM rollerine privesc.
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
Bu izinlere sahip bir saldırgan, **herhangi bir ihlal edilmiş Cognito Kimlik Sağlayıcısı tarafından kullanılabilecek IAM rolü ile gruplar oluşturup/güncelleyebilir ve ihlal edilmiş bir kullanıcıyı grubun parçası yaparak bu rollere erişebilir:
Olası Etki: Diğer Cognito IAM rollerine privesc.
cognito-idp:AdminConfirmSignUp
Bu izin, bir kaydı doğrulamaya olanak tanır. Varsayılan olarak, herkes Cognito uygulamalarına giriş yapabilir; eğer bu bırakılırsa, bir kullanıcı herhangi bir veriyle bir hesap oluşturabilir ve bu izinle doğrulayabilir.
Potansiyel Etki: Yeni bir kullanıcı kaydedebiliyorsanız, kimlik havuzundaki IAM rolüne dolaylı yetki yükseltme. Herhangi bir hesabı onaylayarak diğer uygulama işlevlerine dolaylı yetki yükseltme.
cognito-idp:AdminCreateUser
Bu izin, bir saldırganın kullanıcı havuzunda yeni bir kullanıcı oluşturmasına olanak tanır. Yeni kullanıcı etkin olarak oluşturulur, ancak şifresini değiştirmesi gerekecektir.
Potansiyel Etki: Kimlik havuzundaki IAM rolüne doğrulanmış kullanıcılar için doğrudan yetki yükseltme. Herhangi bir kullanıcı oluşturma yeteneği ile diğer uygulama işlevlerine dolaylı yetki yükseltme.
cognito-idp:AdminEnableUser
Bu izin, bir saldırganın devre dışı bırakılmış bir kullanıcının kimlik bilgilerini bulduğu ve onu tekrar etkinleştirmesi gerektiği çok uç bir senaryoda yardımcı olabilir.
Potansiyel Etki: Saldırganın devre dışı bırakılmış bir kullanıcı için kimlik bilgileri varsa, kimlik havuzundaki IAM rolüne dolaylı privesc ve kullanıcının izinleri.
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
Bu izin, YÖNTEM ADMIN_USER_PASSWORD_AUTH** ile giriş yapmayı sağlar.** Daha fazla bilgi için bağlantıyı takip edin.
cognito-idp:AdminSetUserPassword
Bu izin, bir saldırgana herhangi bir kullanıcının şifresini değiştirme yetkisi vererek, çok faktörlü kimlik doğrulama (MFA) etkin olmayan herhangi bir kullanıcıyı taklit etmesine olanak tanır.
Potansiyel Etki: Doğrudan privesc, potansiyel olarak herhangi bir kullanıcıya, bu nedenle her kullanıcının üyesi olduğu tüm gruplara erişim ve Kimlik Havuzu kimlik doğrulamalı IAM rolüne erişim sağlar.
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: Bir saldırgan, bu izni kötüye kullanarak kontrolü altındaki bir cep telefonunu bir kullanıcının SMS MFA'sı olarak ayarlayabilir.
SetUserMFAPreference: Öncekine benzer şekilde, bu izin bir kullanıcının MFA tercihlerini ayarlamak için kullanılabilir ve MFA korumasını atlatabilir.
SetUserPoolMfaConfig: Öncekine benzer şekilde, bu izin bir kullanıcı havuzunun MFA tercihlerini ayarlamak için kullanılabilir ve MFA korumasını atlatabilir.
UpdateUserPool: Kullanıcı havuzunu MFA politikasını değiştirmek için güncellemek de mümkündür. CLI'yi buradan kontrol edin.
Potential Impact: Saldırganın kimlik bilgilerini bildiği herhangi bir kullanıcıya dolaylı privesc, bu MFA korumasını atlamaya 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 niteliğ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ştirmeye ve bunu doğrulanmış olarak ayarlamaya olanak tanır.
Potansiyel Etki: Kullanıcı özelliklerine dayalı ayrıcalıklar veren Cognito Kullanıcı Havuzu altında potansiyel dolaylı ayrıcalık yükseltme.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
Bu izne sahip bir saldırgan, zaten mevcut havuz istemcilerinden daha az kısıtlı yeni bir Kullanıcı Havuzu İstemcisi oluşturabilir. Örneğin, yeni istemci herhangi bir kimlik doğrulama yöntemine izin verebilir, herhangi bir gizli anahtar içermeyebilir, token iptalini devre dışı bırakabilir, tokenların daha uzun süre geçerli olmasına izin verebilir...
Aynı şey, yeni bir istemci oluşturmak yerine, mevcut birinin değiştirilmesiyle de yapılabilir.
komut satırında (veya güncelleme için) tüm seçenekleri görebilirsiniz, kontrol edin!.
Potansiyel Etki: Kullanıcı Havuzu tarafından kullanılan Kimlik Havuzu yetkilendirilmiş kullanıcısına potansiyel dolaylı yetki yükseltme, güvenlik önlemlerini gevşeten ve bir saldırganın oluşturabildiği bir kullanıcı ile giriş yapmasını mümkün kılan yeni bir istemci oluşturarak.
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
Bir saldırgan, yeni kullanıcılarla bir csv yükleyerek kullanıcılar oluşturmak için bu izni kötüye kullanabilir.
(Yeni bir içe aktarma işi oluşturduğunuzda, iam passrole iznine de ihtiyacınız olabilir, henüz test etmedim).
Potansiyel Etki: Kimlik havuzundaki IAM rolüne doğrudan privesc, kimliği doğrulanmış kullanıcılar için. Herhangi bir kullanıcı oluşturma yeteneği ile diğer uygulama işlevlerine dolaylı privesc.
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
Bir saldırgan, bu sağlayıcı aracılığıyla giriş yapabilmek için yeni bir kimlik sağlayıcısı oluşturabilir.
Potansiyel Etki: Kimlik havuzundaki IAM rolüne kimlik doğrulama yapılmış kullanıcılar için doğrudan yetki yükseltme. Herhangi bir kullanıcı oluşturma yeteneği ile diğer uygulama işlevlerine dolaylı yetki yükseltme.
Bu, Cognito Kimlik Havuzları'ndaki roller için varsayılan olarak çok yaygın bir izindir. İzinlerde bir joker karakterin her zaman kötü görünmesi (özellikle AWS'den geliyorsa) rağmen, verilen izinler bir saldırganın bakış açısında çok faydalı değildir.
Bu izin, Kimlik Havuzları içindeki kimlik bilgilerini ve Kimlik ID'lerini okumaya olanak tanır (bu hassas bilgi değildir). Kimlik ID'lerine atanmış Veri Setleri olabilir, bu da oturum bilgilerini içerir (AWS bunu kaydedilmiş oyun olarak tanımlar). Bunun bazı hassas bilgileri içermesi mümkün olabilir (ancak olasılık oldukça düşüktür). Bu bilgilere erişim için numaralandırma sayfasında nasıl erişileceğini bulabilirsiniz.
Bir saldırgan bu izinleri, bu veri setlerinde değişiklikleri yayınlayan bir Cognito akışına kendini kaydetmek veya cognito olaylarında tetiklenen bir lambda kullanmak için de kullanabilir. Bunun kullanıldığını görmedim ve burada hassas bilgi beklemiyorum, ancak imkansız değil.
Pacu, AWS istismar çerçevesi, artık bir hesapta tüm Cognito varlıklarının numaralandırılmasını otomatikleştiren ve zayıf yapılandırmaları, erişim kontrolü için kullanılan kullanıcı niteliklerini vb. işaret eden "cognito__enum" ve "cognito__attack" modüllerini içermektedir. Ayrıca, kullanıcı oluşturmayı (MFA desteği dahil) ve değiştirilebilir özel niteliklere, kullanılabilir kimlik havuzu kimlik bilgilerine, id token'larındaki üstlenilebilir rollere dayalı yetki yükseltmeyi otomatikleştirir.
Modüllerin işlevlerinin açıklaması için blog yazısının 2. kısmına bakın. Kurulum talimatları için ana Pacu sayfasına bakın.
Belirli bir kimlik havuzu ve kullanıcı havuzu istemcisi karşısında kullanıcı oluşturma ve tüm yetki yükseltme vektörlerini denemek için örnek cognito__attack kullanımı:
Cognito__enum kullanımına örnek, mevcut AWS hesabında görünen tüm kullanıcı havuzlarını, kullanıcı havuzu istemcilerini, kimlik havuzlarını, kullanıcıları vb. toplamak için:
Cognito Scanner , privesc yükseltmesi de dahil olmak üzere Cognito'ya farklı saldırılar uygulayan bir python CLI aracıdır.
Daha fazla bilgi için https://github.com/padok-team/cognito-scanner adresini kontrol edin.
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)