AWS - Cognito Privesc
Last updated
Last updated
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Für weitere Informationen zu Cognito siehe:
AWS - Cognito EnumDa Cognito IAM-Rollenanmeldeinformationen sowohl an authentifizierte als auch an unauthentifizierte Benutzer vergeben kann, können Sie, wenn Sie die Identity Pool ID einer Anwendung finden (sollte im Code festgelegt sein), neue Anmeldeinformationen erhalten und somit privesc (innerhalb eines AWS-Kontos, in dem Sie wahrscheinlich zuvor keine Anmeldeinformationen hatten).
Für weitere Informationen sehen Sie diese Seite.
Potenzielle Auswirkungen: Direkte privesc zu der Dienstrolle, die an unauth Benutzer angehängt ist (und wahrscheinlich auch an die, die an auth Benutzer angehängt ist).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Mit dieser Berechtigung können Sie jede Cognito-Rolle an die authentifizierten/unauthentifizierten Benutzer der Cognito-App vergeben.
Wenn die Cognito-App keine nicht authentifizierten Benutzer aktiviert hat, benötigen Sie möglicherweise auch die Berechtigung cognito-identity:UpdateIdentityPool
, um dies zu aktivieren.
Potenzielle Auswirkungen: Direkte Privilegieneskalation zu jeder Cognito-Rolle.
cognito-identity:update-identity-pool
Ein Angreifer mit dieser Berechtigung könnte beispielsweise einen Cognito-Benutzerpool unter seiner Kontrolle oder einen anderen Identitätsanbieter festlegen, bei dem er sich anmelden kann, um auf diesen Cognito-Identitätspool zuzugreifen. Dann wird einfach die Anmeldung bei diesem Benutzeranbieter ihm den Zugriff auf die konfigurierte authentifizierte Rolle im Identitätspool ermöglichen.
Es ist auch möglich, diese Berechtigung zu missbrauchen, um die Basisauthentifizierung zu ermöglichen:
Potenzielle Auswirkungen: Kompromittierung der konfigurierten authentifizierten IAM-Rolle innerhalb des Identitätspools.
cognito-idp:AdminAddUserToGroup
Diese Berechtigung erlaubt 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 besseren Berechtigungen oder anderen IAM-Rollen hinzuzufügen:
Potenzielle Auswirkungen: Privesc zu anderen Cognito-Gruppen und IAM-Rollen, die an Benutzerpoolgruppen angehängt sind.
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
Ein Angreifer mit diesen Berechtigungen könnte Gruppen erstellen/aktualisieren mit jeder IAM-Rolle, die von einem kompromittierten Cognito Identity Provider verwendet werden kann, und einen kompromittierten Benutzer Teil der Gruppe machen, wodurch auf all diese Rollen zugegriffen werden kann:
Potenzielle Auswirkungen: Privesc 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 bleibt, könnte ein Benutzer ein Konto mit beliebigen Daten erstellen und es mit dieser Berechtigung bestätigen.
Potenzielle Auswirkungen: Indirekte Privilegieneskalation zur IAM-Rolle des Identitätspools für authentifizierte Benutzer, wenn Sie einen neuen Benutzer registrieren können. Indirekte Privilegieneskalation zu anderen App-Funktionalitäten, indem Sie jedes Konto bestätigen können.
cognito-idp:AdminCreateUser
Diese Berechtigung würde es 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: Direkte Privilegieneskalation zur IAM-Rolle des Identitätspools für authentifizierte Benutzer. Indirekte Privilegieneskalation zu anderen App-Funktionalitäten, indem er in der Lage ist, jeden Benutzer zu erstellen.
cognito-idp:AdminEnableUser
Diese Berechtigungen können in einem sehr speziellen Szenario hilfreich sein, in dem ein Angreifer die Anmeldeinformationen eines deaktivierten Benutzers gefunden hat und er ihn wieder aktivieren muss.
Potenzielle Auswirkungen: Indirekte Privilegieneskalation zur IAM-Rolle des Identitätspools für authentifizierte Benutzer und Berechtigungen des Benutzers, wenn der Angreifer über Anmeldeinformationen für einen deaktivierten Benutzer verfügt.
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
Diese Berechtigung ermöglicht die Anmeldung mit der Methode ADMIN_USER_PASSWORD_AUTH. Für weitere Informationen folgen Sie dem Link.
cognito-idp:AdminSetUserPassword
Diese Berechtigung würde es einem Angreifer ermöglichen, das Passwort eines beliebigen Benutzers zu ändern, wodurch er in der Lage wäre, sich als beliebiger Benutzer auszugeben (der keine MFA aktiviert hat).
Potenzielle Auswirkungen: Direkte Privilegieneskalation zu potenziell jedem Benutzer, sodass Zugriff auf alle Gruppen, in denen jeder Benutzer Mitglied ist, und Zugriff auf die authentifizierte IAM-Rolle des Identity Pools besteht.
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: Ein Angreifer könnte diese Berechtigung potenziell missbrauchen, um ein Mobiltelefon unter seiner Kontrolle als SMS MFA eines Benutzers festzulegen.
SetUserMFAPreference: Ähnlich wie die vorherige Berechtigung kann diese Berechtigung verwendet werden, um die MFA-Präferenzen eines Benutzers festzulegen, um den MFA-Schutz zu umgehen.
SetUserPoolMfaConfig: Ähnlich wie die vorherige Berechtigung kann diese Berechtigung verwendet werden, um die MFA-Präferenzen eines Benutzerpools festzulegen, um den MFA-Schutz zu umgehen.
UpdateUserPool: Es ist auch möglich, den Benutzerpool zu aktualisieren, um die MFA-Richtlinie zu ändern. Überprüfen Sie die CLI hier.
Potenzielle Auswirkungen: Indirekte Privilegieneskalation zu potenziell jedem Benutzer, dessen Anmeldeinformationen der Angreifer 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 es, eine E-Mail-Adresse oder Telefonnummer zu ändern und sie als verifiziert festzulegen.
Potenzielle Auswirkungen: Potenzieller indirekter Privilegienausbau in der zugrunde liegenden Anwendung, die den Cognito User Pool verwendet und Privilegien basierend auf Benutzerattributen gewährt.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
Ein Angreifer mit dieser Berechtigung könnte einen neuen User Pool Client erstellen, der weniger eingeschränkt ist als bereits vorhandene Pool-Clients. Zum Beispiel könnte der neue Client jede Art von Methode zur Authentifizierung zulassen, kein Geheimnis haben, die Token-Widerrufung deaktiviert haben und Tokens für einen längeren Zeitraum gültig sein lassen...
Das gleiche kann getan werden, wenn anstatt einen neuen Client zu erstellen, ein bestehender modifiziert wird.
In der Befehlszeile (oder dem Update) können Sie alle Optionen sehen, überprüfen Sie es!
Potenzielle Auswirkungen: Potenzieller indirekter Privilegienausstieg zum Identity Pool autorisierter Benutzer, der vom User Pool verwendet wird, 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 mit neuen Benutzern hochlädt.
(Im Falle, dass Sie einen neuen Importauftrag erstellen, benötigen Sie möglicherweise auch die iam passrole-Berechtigung, ich habe es noch nicht getestet).
Potenzielle Auswirkungen: Direkte Privilegieneskalation zur IAM-Rolle des Identitätspools für authentifizierte Benutzer. Indirekte Privilegieneskalation zu anderen App-Funktionalitäten, indem Sie jeden Benutzer erstellen können.
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
Ein Angreifer könnte einen neuen Identitätsanbieter erstellen, um dann über diesen Anbieter einloggen zu können.
Potenzielle Auswirkungen: Direkte Privilegieneskalation zur IAM-Rolle des Identitätspools für authentifizierte Benutzer. Indirekte Privilegieneskalation zu anderen App-Funktionalitäten, indem beliebige Benutzer erstellt werden können.
Dies ist eine sehr häufige Berechtigung, die standardmäßig in Rollen von Cognito Identity Pools vorhanden ist. Auch wenn ein Wildcard in Berechtigungen immer schlecht aussieht (insbesondere von AWS), sind die gegebenen Berechtigungen aus der Sicht eines Angreifers nicht besonders nützlich.
Diese Berechtigung erlaubt das Lesen von Benutzerinformationen der Identity Pools und Identity IDs innerhalb der Identity Pools (was keine sensiblen Informationen sind). Identity IDs könnten Datasets zugewiesen sein, die Informationen über die Sitzungen enthalten (AWS definiert dies als gespeichertes Spiel). Es könnte möglich sein, dass dies eine Art von sensiblen Informationen enthält (aber die Wahrscheinlichkeit ist ziemlich gering). Sie können auf der Aufzählungsseite nachlesen, wie Sie auf diese Informationen zugreifen können.
Ein Angreifer könnte auch diese Berechtigungen nutzen, um sich selbst in einen Cognito-Stream einzuschreiben, der Änderungen an diesen Datasets veröffentlicht oder eine Lambda-Funktion, die bei Cognito-Ereignissen ausgelöst wird. Ich habe nicht gesehen, dass dies verwendet wird, und ich würde hier keine sensiblen Informationen erwarten, aber es ist nicht unmöglich.
Pacu, das AWS-Ausbeutungs-Framework, enthält jetzt die Module "cognito__enum" und "cognito__attack", die die Aufzählung aller Cognito-Ressourcen in einem Konto automatisieren und schwache Konfigurationen, Benutzerattribute, die für die Zugriffskontrolle verwendet werden, usw. kennzeichnen, sowie die Benutzererstellung (einschließlich MFA-Unterstützung) und Privilegieneskalation basierend auf modifizierbaren benutzerdefinierten Attributen, verwendbaren Identitätspool-Anmeldeinformationen, übernehmbaren Rollen in ID-Token usw. automatisieren.
Für eine Beschreibung der Funktionen der Module siehe Teil 2 des Blogbeitrags. Für Installationsanweisungen siehe die Hauptseite von Pacu.
Beispiel für die Verwendung von cognito__attack, um die Benutzererstellung und alle Privilegieneskalationsvektoren gegen einen bestimmten Identitätspool und Benutzerpool-Client zu versuchen:
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:
Cognito Scanner ist ein CLI-Tool in Python, das verschiedene Angriffe auf Cognito implementiert, einschließlich einer Privilegieneskalation.
Für weitere Informationen besuchen Sie https://github.com/padok-team/cognito-scanner
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)