Cognito Identity Pools
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)
Identity Pools spielen eine entscheidende Rolle, indem sie es Ihren Benutzern ermöglichen, temporäre Anmeldeinformationen zu erwerben. Diese Anmeldeinformationen sind unerlässlich für den Zugriff auf verschiedene AWS-Dienste, einschließlich, aber nicht beschränkt auf Amazon S3 und DynamoDB. Ein bemerkenswertes Merkmal von Identity Pools ist die Unterstützung sowohl für anonyme Gastbenutzer als auch für eine Reihe von Identitätsanbietern zur Benutzerauthentifizierung. Die unterstützten Identitätsanbieter umfassen:
Amazon Cognito Benutzerpools
Soziale Anmeldeoptionen wie Facebook, Google, Login mit Amazon und Anmelden mit Apple
Anbieter, die mit OpenID Connect (OIDC) konform sind
SAML (Security Assertion Markup Language) Identitätsanbieter
Entwickler-authentifizierte Identitäten
Um Identity Pool-Sitzungen zu generieren, müssen Sie zuerst eine Identity ID generieren. Diese Identity ID ist die Identifikation der Sitzung dieses Benutzers. Diese Identifikationen können bis zu 20 Datensätze haben, die bis zu 1 MB an Schlüssel-Wert-Paaren speichern können.
Dies ist nützlich, um Informationen eines Benutzers zu speichern (der immer dieselbe Identity ID verwenden wird).
Darüber hinaus ist der Dienst cognito-sync der Dienst, der es ermöglicht, diese Informationen zu verwalten und zu synchronisieren (in den Datensätzen, Informationen in Streams und SNS-Nachrichten zu senden...).
Pacu, das AWS-Exploitation-Framework, umfasst jetzt die Module "cognito__enum" und "cognito__attack", die die Enumeration 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 die Privilegieneskalation basierend auf modifizierbaren benutzerdefinierten Attributen, verwendbaren Identity Pool-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 Nutzung von cognito__attack, um die Benutzererstellung und alle Privilegieneskalationsvektoren gegen einen bestimmten Identity Pool 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 unerwünschter Kontoerstellung und Identitätspool-Eskalation.
Für weitere Informationen siehe https://github.com/padok-team/cognito-scanner
Das einzige, was ein Angreifer wissen muss, um AWS-Anmeldeinformationen in einer Cognito-App als unauthentifizierter Benutzer zu erhalten, ist die Identity Pool ID, und diese ID muss im Web-/Mobilanwendung fest codiert sein, damit sie verwendet werden kann. Eine ID sieht so aus: eu-west-1:098e5341-8364-038d-16de-1865e435da3b
(sie ist nicht bruteforcebar).
Die IAM Cognito unauthentifizierte Rolle, die erstellt wurde, heißt standardmäßig Cognito_<Identity Pool name>Unauth_Role
Wenn Sie eine Identity Pools ID finden, die fest codiert ist und unauthentifizierte Benutzer zulässt, können Sie AWS-Anmeldeinformationen mit:
Oder Sie könnten die folgenden aws cli-Befehle verwenden:
Beachten Sie, dass ein nicht authentifizierter Cognito Benutzer standardmäßig KEINE Berechtigungen hat, selbst wenn diese über eine Richtlinie zugewiesen wurden. Überprüfen Sie den folgenden Abschnitt.
Der vorherige Abschnitt folgte dem standardmäßigen verbesserten Authentifizierungsfluss. Dieser Fluss setzt eine einschränkende Sitzungsrichtlinie für die generierte IAM-Rollen-Sitzung. Diese Richtlinie erlaubt es der Sitzung nur, die Dienste aus dieser Liste zu nutzen (auch wenn die Rolle Zugriff auf andere Dienste hatte).
Es gibt jedoch eine Möglichkeit, dies zu umgehen. Wenn der Identitätspool den "Basis (Klassischen) Fluss" aktiviert hat, kann der Benutzer eine Sitzung mit diesem Fluss erhalten, die keine einschränkende Sitzungsrichtlinie hat.
Wenn Sie diesen Fehler erhalten, liegt das daran, dass der Basisfluss nicht aktiviert ist (Standard)
Ein Fehler ist aufgetreten (InvalidParameterException) beim Aufruf der GetOpenIdToken-Operation: Basis (klassischer) Fluss ist nicht aktiviert, bitte verwenden Sie den erweiterten Fluss.
Wenn Sie über ein Set von IAM-Anmeldeinformationen verfügen, sollten Sie überprüfen, auf welchen Zugriff Sie haben und versuchen, Berechtigungen zu eskalieren.
Denken Sie daran, dass authentifizierte Benutzer wahrscheinlich unterschiedliche Berechtigungen erhalten, also wenn Sie sich in der App anmelden können, versuchen Sie das und erhalten Sie die neuen Anmeldeinformationen.
Es könnten auch Rollen für authentifizierte Benutzer, die auf den Identity Pool zugreifen, verfügbar sein.
Dafür müssen Sie möglicherweise Zugriff auf den Identitätsanbieter haben. Wenn das ein Cognito User Pool ist, können Sie möglicherweise das Standardverhalten ausnutzen und selbst einen neuen Benutzer erstellen.
Die IAM Cognito authentifizierte Rolle, die über erstellt wird, heißt standardmäßig Cognito_<Identity Pool name>Auth_Role
Jedenfalls erwartet das folgende Beispiel, dass Sie sich bereits in einem Cognito User Pool angemeldet haben, der verwendet wird, um auf den Identity Pool zuzugreifen (vergessen Sie nicht, dass auch andere Arten von Identitätsanbietern konfiguriert sein könnten).
Es ist möglich, verschiedene IAM-Rollen je nach Identitätsanbieter zu konfigurieren, bei dem der Benutzer angemeldet ist, oder sogar nur abhängig vom Benutzer (unter Verwendung von Ansprüchen). Daher könnte es lohnenswert sein, sich anzumelden und auf die IAM-Rollen von allen zuzugreifen.
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)