AWS - Cognito Privesc
Cognito
Für weitere Informationen zu Cognito siehe:
AWS - Cognito EnumSammeln von Anmeldeinformationen aus dem Identitäts-Pool
Da Cognito IAM-Rollenanmeldeinformationen sowohl an authentifizierte als auch an nicht authentifizierte Benutzer vergeben kann, können Sie, wenn Sie die Identitäts-Pool-ID einer Anwendung finden (die wahrscheinlich fest codiert ist), neue Anmeldeinformationen erhalten und somit Privilege Escalation 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 Privilege Escalation zur Dienstrolle, die an nicht authentifizierte Benutzer angehängt ist (und wahrscheinlich auch an diejen die an authentifizierte Benutzer angehängt ist).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Mit dieser Berechtigung können Sie jede Cognito-Rolle den authentifizierten/nicht authentifizierten Benutzern der Cognito-App zuweisen.
Wenn die Cognito-App nicht über unauthentifizierte Benutzer aktiviert ist, 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
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 anmelden kann, als Möglichkeit zum Zugriff auf diesen Cognito Identity Pool verwenden. Dann wird das Anmelden bei diesem Benutzeranbieter ihm ermöglichen, auf die konfigurierte authentifizierte Rolle im Identitätspool zuzugreifen.
Es ist auch möglich, diese Berechtigung zu missbrauchen, um die Basic-Authentifizierung zu ermöglichen:
Potenzielle Auswirkungen: Kompromittierung der konfigurierten authentifizierten IAM-Rolle innerhalb des Identitätspools.
cognito-idp:AdminAddUserToGroup
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:
Potenzielle Auswirkungen: Privilege Escalation zu anderen Cognito-Gruppen und IAM-Rollen, die den Benutzerpoolgruppen zugeordnet sind.
(cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
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-Identitätsanbieter verwendet werden kann, und einen kompromittierten Benutzer Teil der Gruppe machen, um auf all diese Rollen zuzugreifen:
Potenzielle Auswirkungen: Privilege Escalation zu anderen Cognito IAM-Rollen.
cognito-idp:AdminConfirmSignUp
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.
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 zu anderen App-Funktionalitäten, indem ein beliebiges Konto bestätigt werden kann.
cognito-idp:AdminCreateUser
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.
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
cognito-idp:AdminEnableUser
Diese Berechtigungen können in einem sehr speziellen Szenario helfen, in dem ein Angreifer die Anmeldeinformationen eines deaktivierten Benutzers gefunden hat und ihn wieder aktivieren muss.
Potenzielle Auswirkungen: Indirekte Privilege Escalation auf die 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
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
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).
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
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.
SetUserMFAPreference: Ähnlich wie zuvor kann diese Berechtigung verwendet werden, um die MFA-Präferenzen eines Benutzers zu setzen und die MFA-Schutzmaßnahmen zu umgehen.
SetUserPoolMfaConfig: Ähnlich wie zuvor kann diese Berechtigung verwendet werden, um die MFA-Präferenzen eines Benutzerpools zu setzen und somit den MFA-Schutz zu umgehen.
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
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.
Potenzielle Auswirkungen: Potenzielle indirekte Privilegieneskalation in der zugrunde liegenden Anwendung unter Verwendung von Cognito User Pool, die Berechtigungen basierend auf Benutzerattributen vergibt.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
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 Geheimcode 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.
Im Befehlszeilenmodus (oder im Aktualisierungsmodus) können Sie alle Optionen sehen, überprüfen Sie es!.
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
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.
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
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
Ein Angreifer könnte einen neuen Identitätsanbieter erstellen, um sich dann über diesen Anbieter anzumelden.
Potenzielle Auswirkungen: Direktes Privilege Escalation zur IAM-Rolle des Identitätspools für authentifizierte Benutzer. Indirektes Privilege Escalation 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 Informationen dazu, 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, für den Zugriffskontrolle verwendete Benutzerattribute usw. kennzeichnen, außerdem automatisieren sie die Benutzererstellung (einschließlich MFA-Unterstützung) und Privilege Escalation basierend auf änderbaren benutzerdefinierten Attributen, verwendbaren Identitätspool-Anmeldeinformationen, übernehmbaren Rollen in ID-Token usw.
Für eine Beschreibung der Funktionen 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 Privilege-Escalation-Vektoren gegen einen bestimmten Identitätspool und Benutzerpool-Client durchzuführen:
Beispiel für die Verwendung von cognito__enum zum Sammeln aller Benutzerpools, Benutzerpool-Clients, Identitätspools, Benutzer usw., die im aktuellen AWS-Konto sichtbar sind:
Cognito Scanner ist ein CLI-Tool in Python, das verschiedene Angriffe auf Cognito implementiert, einschließlich einer Privilege Escalation.
Installation
Verwendung
Für weitere Informationen siehe https://github.com/padok-team/cognito-scanner
Last updated