AWS - Cognito Privesc
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)
Για περισσότερες πληροφορίες σχετικά με το Cognito, ελέγξτε:
AWS - Cognito EnumΚαθώς το Cognito μπορεί να χορηγήσει IAM role credentials σε authenticated και unauthenticated users, αν εντοπίσετε το Identity Pool ID μιας εφαρμογής (θα πρέπει να είναι σκληρά κωδικοποιημένο σε αυτήν), μπορείτε να αποκτήσετε νέες πιστοποιήσεις και επομένως privesc (μέσα σε έναν λογαριασμό AWS όπου πιθανώς δεν είχατε καν καμία πιστοποίηση προηγουμένως).
Για περισσότερες πληροφορίες ελέγξτε αυτή τη σελίδα.
Potential Impact: Άμεσο privesc στους ρόλους υπηρεσιών που συνδέονται με τους ανώνυμους χρήστες (και πιθανώς και με αυτούς που συνδέονται με τους αυθεντικοποιημένους χρήστες).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Με αυτήν την άδεια μπορείτε να χορηγήσετε οποιονδήποτε ρόλο cognito στους αυθεντικοποιημένους/ανώνυμους χρήστες της εφαρμογής cognito.
Αν η εφαρμογή cognito δεν έχει ενεργοποιημένους τους μη αυθεντικοποιημένους χρήστες, μπορεί να χρειαστείτε επίσης την άδεια cognito-identity:UpdateIdentityPool
για να την ενεργοποιήσετε.
Πιθανές Επιπτώσεις: Άμεση privesc σε οποιονδήποτε ρόλο cognito.
cognito-identity:update-identity-pool
Ένας επιτιθέμενος με αυτή την άδεια θα μπορούσε να ρυθμίσει, για παράδειγμα, μια Cognito User Pool υπό τον έλεγχό του ή οποιονδήποτε άλλο πάροχο ταυτότητας όπου μπορεί να συνδεθεί ως τρόπος πρόσβασης σε αυτή την Cognito Identity Pool. Στη συνέχεια, απλά συνδεόμενος σε αυτόν τον πάροχο χρηστών θα του επιτρέψει να έχει πρόσβαση στον ρυθμισμένο αυθεντικοποιημένο ρόλο στην Identity Pool.
Είναι επίσης δυνατό να καταχραστεί αυτή η άδεια για να επιτραπεί η βασική αυθεντικοποίηση:
Πιθανές Επιπτώσεις: Συμβιβασμός του διαμορφωμένου αυθεντικοποιημένου IAM ρόλου μέσα στην πισίνα ταυτότητας.
cognito-idp:AdminAddUserToGroup
Αυτή η άδεια επιτρέπει να προσθέσετε έναν χρήστη Cognito σε μια ομάδα Cognito, επομένως ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτή την άδεια για να προσθέσει έναν χρήστη υπό τον έλεγχό του σε άλλες ομάδες με καλύτερες προνόμια ή διαφορετικούς IAM ρόλους:
Πιθανές Επιπτώσεις: Privesc σε άλλες ομάδες Cognito και IAM ρόλους που συνδέονται με τις Ομάδες Χρηστών.
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
Ένας επιτιθέμενος με αυτές τις άδειες θα μπορούσε να δημιουργήσει/ενημερώσει ομάδες με κάθε IAM ρόλο που μπορεί να χρησιμοποιηθεί από έναν συμβιβασμένο Παροχέα Ταυτότητας Cognito και να κάνει έναν συμβιβασμένο χρήστη μέλος της ομάδας, αποκτώντας πρόσβαση σε όλους αυτούς τους ρόλους:
Πιθανές Επιπτώσεις: Privesc σε άλλους ρόλους IAM του Cognito.
cognito-idp:AdminConfirmSignUp
Αυτή η άδεια επιτρέπει να επιβεβαιωθεί μια εγγραφή. Από προεπιλογή, οποιοσδήποτε μπορεί να συνδεθεί σε εφαρμογές Cognito. Αν αυτό αφεθεί, ένας χρήστης θα μπορούσε να δημιουργήσει έναν λογαριασμό με οποιαδήποτε δεδομένα και να τον επιβεβαιώσει με αυτή την άδεια.
Πιθανές Επιπτώσεις: Έμμεση privesc στον ρόλο IAM της πιστοποίησης ταυτότητας για τους αυθεντικοποιημένους χρήστες αν μπορείτε να εγγραφείτε ως νέος χρήστης. Έμμεση privesc σε άλλες λειτουργίες της εφαρμογής που επιτρέπουν την επιβεβαίωση οποιουδήποτε λογαριασμού.
cognito-idp:AdminCreateUser
Αυτή η άδεια θα επέτρεπε σε έναν επιτιθέμενο να δημιουργήσει έναν νέο χρήστη μέσα στην πισίνα χρηστών. Ο νέος χρήστης δημιουργείται ως ενεργός, αλλά θα χρειαστεί να αλλάξει τον κωδικό πρόσβασής του.
Πιθανές Επιπτώσεις: Άμεσο privesc στο ρόλο IAM της πιστοποίησης ταυτότητας για πιστοποιημένους χρήστες. Έμμεσο privesc σε άλλες λειτουργίες της εφαρμογής που επιτρέπουν τη δημιουργία οποιουδήποτε χρήστη.
cognito-idp:AdminEnableUser
Αυτές οι άδειες μπορούν να βοηθήσουν σε μια πολύ ακραία περίπτωση όπου ένας επιτιθέμενος βρήκε τα διαπιστευτήρια ενός απενεργοποιημένου χρήστη και χρειάζεται να τον ενεργοποιήσει ξανά.
Πιθανές Επιπτώσεις: Έμμεσο privesc στον ρόλο IAM της πιστωτικής δεξαμενής για αυθεντικοποιημένους χρήστες και δικαιώματα του χρήστη αν ο επιτιθέμενος είχε διαπιστευτήρια για έναν απενεργοποιημένο χρήστη.
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
Αυτή η άδεια επιτρέπει την είσοδο με τη μέθοδο ADMIN_USER_PASSWORD_AUTH. Για περισσότερες πληροφορίες ακολουθήστε τον σύνδεσμο.
cognito-idp:AdminSetUserPassword
Αυτή η άδεια θα επέτρεπε σε έναν επιτιθέμενο να αλλάξει τον κωδικό πρόσβασης οποιουδήποτε χρήστη, καθιστώντας τον ικανό να προσποιηθεί οποιονδήποτε χρήστη (που δεν έχει ενεργοποιημένο MFA).
Πιθανές Επιπτώσεις: Άμεσο privesc σε δυνητικά οποιονδήποτε χρήστη, έτσι πρόσβαση σε όλες τις ομάδες στις οποίες είναι μέλος κάθε χρήστης και πρόσβαση στον ρόλο IAM που πιστοποιείται από την Identity Pool.
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: Ένας επιτιθέμενος θα μπορούσε δυνητικά να καταχραστεί αυτή την άδεια για να ορίσει ένα κινητό τηλέφωνο υπό τον έλεγχό του ως SMS MFA ενός χρήστη.
SetUserMFAPreference: Παρόμοια με την προηγούμενη, αυτή η άδεια μπορεί να χρησιμοποιηθεί για να ρυθμίσει τις προτιμήσεις MFA ενός χρήστη για να παρακάμψει την προστασία MFA.
SetUserPoolMfaConfig: Παρόμοια με την προηγούμενη, αυτή η άδεια μπορεί να χρησιμοποιηθεί για να ρυθμίσει τις προτιμήσεις MFA μιας ομάδας χρηστών για να παρακάμψει την προστασία MFA.
UpdateUserPool: Είναι επίσης δυνατό να ενημερώσετε την πισίνα χρηστών για να αλλάξετε την πολιτική MFA. Δείτε το cli εδώ.
Potential Impact: Έμμεσο privesc σε οποιονδήποτε χρήστη γνωρίζει τα διαπιστευτήρια του επιτιθέμενου, αυτό θα μπορούσε να επιτρέψει την παράκαμψη της προστασίας MFA.
cognito-idp:AdminUpdateUserAttributes
Ένας επιτιθέμενος με αυτή την άδεια θα μπορούσε να αλλάξει το email ή τον αριθμό τηλεφώνου ή οποιοδήποτε άλλο χαρακτηριστικό ενός χρήστη υπό τον έλεγχό του για να προσπαθήσει να αποκτήσει περισσότερα προνόμια σε μια υποκείμενη εφαρμογή. Αυτό επιτρέπει την αλλαγή ενός email ή αριθμού τηλεφώνου και την ρύθμισή του ως επαληθευμένο.
Πιθανές Επιπτώσεις: Πιθανή έμμεση privesc στην υποκείμενη εφαρμογή που χρησιμοποιεί το Cognito User Pool και δίνει προνόμια με βάση τα χαρακτηριστικά του χρήστη.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
Ένας επιτιθέμενος με αυτή την άδεια θα μπορούσε να δημιουργήσει έναν νέο User Pool Client λιγότερο περιορισμένο από τους ήδη υπάρχοντες pool clients. Για παράδειγμα, ο νέος client θα μπορούσε να επιτρέπει οποιοδήποτε είδος μεθόδου για αυθεντικοποίηση, να μην έχει κανένα μυστικό, να έχει απενεργοποιημένη την ανάκληση token, να επιτρέπει τα tokens να είναι έγκυρα για μεγαλύτερο χρονικό διάστημα...
Το ίδιο μπορεί να γίνει αν αντί να δημιουργηθεί ένας νέος client, τροποποιηθεί ένας υπάρχων.
Στη γραμμή εντολών (ή στην ενημέρωση) μπορείτε να δείτε όλες τις επιλογές, ελέγξτε το!
Πιθανές Επιπτώσεις: Πιθανή έμμεση privesc στον εξουσιοδοτημένο χρήστη της Identity Pool που χρησιμοποιείται από την User Pool δημιουργώντας έναν νέο πελάτη που χαλαρώνει τα μέτρα ασφαλείας και καθιστά δυνατό σε έναν επιτιθέμενο να συνδεθεί με έναν χρήστη που ήταν σε θέση να δημιουργήσει.
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
Ένας επιτιθέμενος θα μπορούσε να καταχραστεί αυτή την άδεια για να δημιουργήσει χρήστες ανεβάζοντας ένα csv με νέους χρήστες.
(Στην περίπτωση που δημιουργήσετε μια νέα εργασία εισαγωγής, μπορεί επίσης να χρειαστείτε την άδεια iam passrole, δεν το έχω δοκιμάσει ακόμα).
Πιθανές Επιπτώσεις: Άμεση privesc στον ρόλο IAM της πιστοποίησης ταυτότητας για τους αυθεντικοποιημένους χρήστες. Έμμεση privesc σε άλλες λειτουργίες της εφαρμογής που επιτρέπουν τη δημιουργία οποιουδήποτε χρήστη.
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
Ένας επιτιθέμενος θα μπορούσε να δημιουργήσει έναν νέο πάροχο ταυτότητας για να μπορέσει στη συνέχεια να συνδεθεί μέσω αυτού του παρόχου.
Πιθανές Επιπτώσεις: Άμεση privesc στον ρόλο IAM της πισίνας ταυτοτήτων για αυθεντικοποιημένους χρήστες. Έμμεση privesc σε άλλες λειτουργίες της εφαρμογής που επιτρέπουν τη δημιουργία οποιουδήποτε χρήστη.
Αυτή είναι μια πολύ κοινή άδεια από προεπιλογή στους ρόλους των Πισινών Ταυτοτήτων Cognito. Ακόμα και αν ένα wildcard σε άδειες φαίνεται πάντα κακό (ειδικά από την AWS), οι δοθείσες άδειες δεν είναι πολύ χρήσιμες από την οπτική γωνία ενός επιτιθέμενου.
Αυτή η άδεια επιτρέπει την ανάγνωση πληροφοριών χρήσης των Πισινών Ταυτοτήτων και των Ταυτοτήτων μέσα στις Πισίνες Ταυτοτήτων (που δεν είναι ευαίσθητες πληροφορίες). Οι Ταυτότητες μπορεί να έχουν Datasets που τους έχουν ανατεθεί, οι οποίες είναι πληροφορίες των συνεδριών (η AWS το ορίζει ως αποθηκευμένο παιχνίδι). Είναι πιθανό αυτό να περιέχει κάποιο είδος ευαίσθητης πληροφορίας (αλλά η πιθανότητα είναι αρκετά χαμηλή). Μπορείτε να βρείτε στη σελίδα αρίθμησης πώς να αποκτήσετε πρόσβαση σε αυτές τις πληροφορίες.
Ένας επιτιθέμενος θα μπορούσε επίσης να χρησιμοποιήσει αυτές τις άδειες για να εγγραφεί σε ένα ρεύμα Cognito που δημοσιεύει αλλαγές σε αυτά τα datasets ή σε μια lambda που ενεργοποιείται σε γεγονότα cognito. Δεν έχω δει να χρησιμοποιείται αυτό, και δεν θα περίμενα ευαίσθητες πληροφορίες εδώ, αλλά δεν είναι αδύνατο.
Pacu, το πλαίσιο εκμετάλλευσης AWS, περιλαμβάνει τώρα τα modules "cognito__enum" και "cognito__attack" που αυτοματοποιούν την αρίθμηση όλων των περιουσιακών στοιχείων Cognito σε έναν λογαριασμό και επισημαίνουν αδύναμες ρυθμίσεις, χαρακτηριστικά χρηστών που χρησιμοποιούνται για έλεγχο πρόσβασης, κ.λπ., και επίσης αυτοματοποιούν τη δημιουργία χρηστών (συμπεριλαμβανομένης της υποστήριξης MFA) και την κλιμάκωση προνομίων με βάση τροποποιήσιμα προσαρμοσμένα χαρακτηριστικά, χρησιμοποιήσιμα διαπιστευτήρια πισίνας ταυτοτήτων, ρόλους που μπορούν να αναληφθούν σε ταυτότητες tokens, κ.λπ.
Για περιγραφή των λειτουργιών των modules δείτε το μέρος 2 της ανάρτησης στο blog. Για οδηγίες εγκατάστασης δείτε τη κύρια σελίδα Pacu.
Δείγμα χρήσης cognito__attack για να προσπαθήσετε να δημιουργήσετε χρήστη και όλους τους privesc διαύλους κατά μιας δεδομένης πισίνας ταυτοτήτων και πελάτη πισίνας χρηστών:
Δείγμα χρήσης cognito__enum για τη συλλογή όλων των πισινών χρηστών, πελατών πισινών χρηστών, πισινών ταυτοτήτων, χρηστών κ.λπ. που είναι ορατές στον τρέχοντα λογαριασμό AWS:
Cognito Scanner είναι ένα εργαλείο CLI σε python που υλοποιεί διάφορες επιθέσεις στο Cognito, συμπεριλαμβανομένης της κλιμάκωσης δικαιωμάτων.
Για περισσότερες πληροφορίες ελέγξτε https://github.com/padok-team/cognito-scanner
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)