mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/external-recon-meth
This commit is contained in:
parent
b87103dd24
commit
8f3f1ee4a4
@ -2,18 +2,13 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
Τώρα που έχουμε δημιουργήσει τη λίστα των περιουσιακών στοιχείων του πεδίου μας, είναι καιρός να αναζητήσουμε μερικούς καρπούς OSINT που είναι εύκολα προσβάσιμοι.
|
||||
|
||||
### Πλατφόρμες που έχουν ήδη αναζητήσει διαρροές
|
||||
|
||||
- [https://trufflesecurity.com/blog/introducing-forager/](https://trufflesecurity.com/blog/introducing-forager/)
|
||||
|
||||
### Διαρροές κλειδιών API στο github
|
||||
### Εργαλεία για να βρείτε μυστικά σε git repos και το σύστημα αρχείων
|
||||
|
||||
- [https://github.com/dxa4481/truffleHog](https://github.com/dxa4481/truffleHog)
|
||||
- [https://github.com/gitleaks/gitleaks](https://github.com/gitleaks/gitleaks)
|
||||
- [https://github.com/praetorian-inc/noseyparker](https://github.com/praetorian-inc/noseyparker)
|
||||
- [https://github.com/GitGuardian/ggshield](https://github.com/GitGuardian/ggshield)
|
||||
- [https://github.com/JaimePolop/RExpository](https://github.com/JaimePolop/RExpository)
|
||||
- [https://github.com/Yelp/detect-secrets](https://github.com/Yelp/detect-secrets)
|
||||
- [https://github.com/hisxo/gitGraber](https://github.com/hisxo/gitGraber)
|
||||
- [https://github.com/eth0izzle/shhgit](https://github.com/eth0izzle/shhgit)
|
||||
|
@ -6,9 +6,9 @@
|
||||
|
||||
Το OAuth προσφέρει διάφορες εκδόσεις, με θεμελιώδεις πληροφορίες διαθέσιμες στην [OAuth 2.0 documentation](https://oauth.net/2/). Αυτή η συζήτηση επικεντρώνεται κυρίως στον ευρέως χρησιμοποιούμενο [OAuth 2.0 authorization code grant type](https://oauth.net/2/grant-types/authorization-code/), παρέχοντας ένα **πλαίσιο εξουσιοδότησης που επιτρέπει σε μια εφαρμογή να έχει πρόσβαση ή να εκτελεί ενέργειες στον λογαριασμό ενός χρήστη σε άλλη εφαρμογή** (τον εξουσιοδοτημένο διακομιστή).
|
||||
|
||||
Σκεφτείτε μια υποθετική ιστοσελίδα _**https://example.com**_, σχεδιασμένη να **παρουσιάζει όλες τις αναρτήσεις σας στα κοινωνικά δίκτυα**, συμπεριλαμβανομένων των ιδιωτικών. Για να το επιτύχει αυτό, χρησιμοποιείται το OAuth 2.0. _https://example.com_ θα ζητήσει την άδειά σας να **έχει πρόσβαση στις αναρτήσεις σας στα κοινωνικά δίκτυα**. Ως εκ τούτου, θα εμφανιστεί μια οθόνη συγκατάθεσης στο _https://socialmedia.com_, περιγράφοντας τις **άδειες που ζητούνται και τον προγραμματιστή που υποβάλλει το αίτημα**. Μετά την εξουσιοδότησή σας, το _https://example.com_ αποκτά τη δυνατότητα να **έχει πρόσβαση στις αναρτήσεις σας εκ μέρους σας**.
|
||||
Σκεφτείτε μια υποθετική ιστοσελίδα _**https://example.com**_, σχεδιασμένη να **παρουσιάζει όλες τις αναρτήσεις σας στα κοινωνικά δίκτυα**, συμπεριλαμβανομένων των ιδιωτικών. Για να το επιτύχει αυτό, χρησιμοποιείται το OAuth 2.0. _https://example.com_ θα ζητήσει την άδειά σας να **έχει πρόσβαση στις αναρτήσεις σας στα κοινωνικά δίκτυα**. Ως αποτέλεσμα, θα εμφανιστεί μια οθόνη συγκατάθεσης στο _https://socialmedia.com_, περιγράφοντας τις **άδειες που ζητούνται και τον προγραμματιστή που υποβάλλει το αίτημα**. Μετά την εξουσιοδότησή σας, το _https://example.com_ αποκτά τη δυνατότητα να **έχει πρόσβαση στις αναρτήσεις σας εκ μέρους σας**.
|
||||
|
||||
Είναι σημαντικό να κατανοήσετε τα εξής στοιχεία μέσα στο πλαίσιο του OAuth 2.0:
|
||||
Είναι σημαντικό να κατανοήσετε τα παρακάτω στοιχεία μέσα στο πλαίσιο του OAuth 2.0:
|
||||
|
||||
- **resource owner**: Εσείς, ως **χρήστης/οντότητα**, εξουσιοδοτείτε την πρόσβαση στους πόρους σας, όπως οι αναρτήσεις του λογαριασμού σας στα κοινωνικά δίκτυα.
|
||||
- **resource server**: Ο **διακομιστής που διαχειρίζεται τις αυθεντικοποιημένες αιτήσεις** αφού η εφαρμογή έχει εξασφαλίσει ένα `access token` εκ μέρους του `resource owner`, π.χ., **https://socialmedia.com**.
|
||||
@ -16,12 +16,12 @@
|
||||
- **authorization server**: Ο **διακομιστής που εκδίδει `access tokens`** στην `client application` μετά την επιτυχή αυθεντικοποίηση του `resource owner` και την εξασφάλιση εξουσιοδότησης, π.χ., **https://socialmedia.com**.
|
||||
- **client_id**: Ένας δημόσιος, μοναδικός αναγνωριστικός αριθμός για την εφαρμογή.
|
||||
- **client_secret:** Ένα εμπιστευτικό κλειδί, γνωστό μόνο στην εφαρμογή και τον εξουσιοδοτημένο διακομιστή, που χρησιμοποιείται για τη δημιουργία `access_tokens`.
|
||||
- **response_type**: Μια τιμή που καθορίζει **τον τύπο του token που ζητείται**, όπως `code`.
|
||||
- **response_type**: Μια τιμή που καθορίζει **τον τύπο του αιτούμενου token**, όπως `code`.
|
||||
- **scope**: Το **επίπεδο πρόσβασης** που ζητά η `client application` από τον `resource owner`.
|
||||
- **redirect_uri**: Η **διεύθυνση URL στην οποία ανακατευθύνεται ο χρήστης μετά την εξουσιοδότηση**. Αυτό συνήθως πρέπει να ευθυγραμμίζεται με την προεγγεγραμμένη διεύθυνση URL ανακατεύθυνσης.
|
||||
- **state**: Ένα παράμετρος για **τη διατήρηση δεδομένων κατά τη διάρκεια της ανακατεύθυνσης του χρήστη προς και από τον εξουσιοδοτημένο διακομιστή**. Η μοναδικότητά του είναι κρίσιμη για να λειτουργεί ως **μηχανισμός προστασίας CSRF**.
|
||||
- **state**: Ένα παράμετρος για **τη διατήρηση δεδομένων κατά την ανακατεύθυνση του χρήστη προς και από τον εξουσιοδοτημένο διακομιστή**. Η μοναδικότητά του είναι κρίσιμη για να λειτουργεί ως **μηχανισμός προστασίας CSRF**.
|
||||
- **grant_type**: Ένα παράμετρος που υποδεικνύει **τον τύπο χορήγησης και τον τύπο του token που θα επιστραφεί**.
|
||||
- **code**: Ο κωδικός εξουσιοδότησης από τον `authorization server`, που χρησιμοποιείται σε συνδυασμό με το `client_id` και το `client_secret` από την client application για να αποκτήσει ένα `access_token`.
|
||||
- **code**: Ο κωδικός εξουσιοδότησης από τον `authorization server`, που χρησιμοποιείται σε συνδυασμό με `client_id` και `client_secret` από την client application για να αποκτήσει ένα `access_token`.
|
||||
- **access_token**: Το **token που χρησιμοποιεί η client application για αιτήσεις API** εκ μέρους του `resource owner`.
|
||||
- **refresh_token**: Επιτρέπει στην εφαρμογή να **αποκτήσει ένα νέο `access_token` χωρίς να ζητήσει ξανά από τον χρήστη**.
|
||||
|
||||
@ -44,25 +44,25 @@ https://socialmedia.com/auth
|
||||
```
|
||||
https://example.com?code=uniqueCode123&state=randomString123
|
||||
```
|
||||
5. https://example.com χρησιμοποιεί αυτό το `code`, μαζί με το `client_id` και το `client_secret`, για να κάνει ένα αίτημα από τον διακομιστή για να αποκτήσει ένα `access_token` εκ μέρους σας, επιτρέποντας την πρόσβαση στις άδειες που συμφωνήσατε:
|
||||
5. https://example.com χρησιμοποιεί αυτό το `code`, μαζί με το `client_id` και το `client_secret`, για να κάνει ένα αίτημα από τον διακομιστή για να αποκτήσει ένα `access_token` εκ μέρους σας, επιτρέποντας την πρόσβαση στις άδειες που έχετε συμφωνήσει:
|
||||
```
|
||||
POST /oauth/access_token
|
||||
Host: socialmedia.com
|
||||
...{"client_id": "example_clientId", "client_secret": "example_clientSecret", "code": "uniqueCode123", "grant_type": "authorization_code"}
|
||||
```
|
||||
6. Τέλος, η διαδικασία ολοκληρώνεται καθώς το https://example.com χρησιμοποιεί το `access_token` σας για να κάνει μια κλήση API στα Social Media για πρόσβαση
|
||||
6. Τέλος, η διαδικασία ολοκληρώνεται καθώς το https://example.com χρησιμοποιεί το `access_token` σας για να κάνει μια κλήση API στο Social Media για πρόσβαση
|
||||
|
||||
## Ευπάθειες <a href="#id-323a" id="id-323a"></a>
|
||||
|
||||
### Ανοιχτό redirect_uri <a href="#cc36" id="cc36"></a>
|
||||
|
||||
Το `redirect_uri` είναι κρίσιμο για την ασφάλεια στις υλοποιήσεις OAuth και OpenID, καθώς καθορίζει πού αποστέλλονται ευαίσθητα δεδομένα, όπως οι κωδικοί εξουσιοδότησης, μετά την εξουσιοδότηση. Αν είναι κακοδιαμορφωμένο, μπορεί να επιτρέψει στους επιτιθέμενους να ανακατευθύνουν αυτά τα αιτήματα σε κακόβουλους διακομιστές, διευκολύνοντας την κατάληψη λογαριασμού.
|
||||
Το `redirect_uri` είναι κρίσιμο για την ασφάλεια στις υλοποιήσεις OAuth και OpenID, καθώς καθορίζει πού αποστέλλονται ευαίσθητα δεδομένα, όπως οι κωδικοί εξουσιοδότησης, μετά την εξουσιοδότηση. Εάν είναι κακώς ρυθμισμένο, μπορεί να επιτρέψει στους επιτιθέμενους να ανακατευθύνουν αυτά τα αιτήματα σε κακόβουλους διακομιστές, διευκολύνοντας την κατάληψη λογαριασμού.
|
||||
|
||||
Οι τεχνικές εκμετάλλευσης ποικίλλουν ανάλογα με τη λογική επικύρωσης του διακομιστή εξουσιοδότησης. Μπορεί να κυμαίνονται από αυστηρή αντιστοίχιση διαδρομών έως αποδοχή οποιασδήποτε διεύθυνσης URL εντός του καθορισμένου τομέα ή υποκαταλόγου. Κοινές μέθοδοι εκμετάλλευσης περιλαμβάνουν ανοιχτές ανακατευθύνσεις, διαδρομές διασύνδεσης, εκμετάλλευση αδύναμων regex και HTML injection για κλοπή διακριτικών.
|
||||
Οι τεχνικές εκμετάλλευσης ποικίλλουν ανάλογα με τη λογική επικύρωσης του διακομιστή εξουσιοδότησης. Μπορεί να κυμαίνονται από αυστηρή αντιστοίχιση διαδρομών έως αποδοχή οποιασδήποτε διεύθυνσης URL εντός του καθορισμένου τομέα ή υποκαταλόγου. Κοινές μέθοδοι εκμετάλλευσης περιλαμβάνουν ανοιχτές ανακατευθύνσεις, διαδρομές διαδρομής, εκμετάλλευση αδύναμων regex και HTML injection για κλοπή διακριτικών.
|
||||
|
||||
Εκτός από το `redirect_uri`, άλλες παράμετροι OAuth και OpenID όπως `client_uri`, `policy_uri`, `tos_uri` και `initiate_login_uri` είναι επίσης ευάλωτες σε επιθέσεις ανακατεύθυνσης. Αυτές οι παράμετροι είναι προαιρετικές και η υποστήριξή τους ποικίλλει μεταξύ των διακομιστών.
|
||||
|
||||
Για εκείνους που στοχεύουν σε έναν διακομιστή OpenID, το endpoint ανακάλυψης (`**.well-known/openid-configuration**`) συχνά παραθέτει πολύτιμες λεπτομέρειες διαμόρφωσης όπως `registration_endpoint`, `request_uri_parameter_supported` και "`require_request_uri_registration`. Αυτές οι λεπτομέρειες μπορούν να βοηθήσουν στην αναγνώριση του endpoint εγγραφής και άλλων λεπτομερειών διαμόρφωσης του διακομιστή.
|
||||
Για εκείνους που στοχεύουν σε έναν διακομιστή OpenID, το endpoint ανακάλυψης (`**.well-known/openid-configuration**`) συχνά παραθέτει πολύτιμες λεπτομέρειες ρύθμισης όπως `registration_endpoint`, `request_uri_parameter_supported` και "`require_request_uri_registration`. Αυτές οι λεπτομέρειες μπορούν να βοηθήσουν στην αναγνώριση του endpoint εγγραφής και άλλων λεπτομερειών ρύθμισης του διακομιστή.
|
||||
|
||||
### XSS στην υλοποίηση ανακατεύθυνσης <a href="#bda5" id="bda5"></a>
|
||||
|
||||
@ -72,9 +72,9 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
|
||||
```
|
||||
### CSRF - Improper handling of state parameter <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Στις υλοποιήσεις OAuth, η κακή χρήση ή η παράλειψη της **`state` παραμέτρου** μπορεί να αυξήσει σημαντικά τον κίνδυνο επιθέσεων **Cross-Site Request Forgery (CSRF)**. Αυτή η ευπάθεια προκύπτει όταν η `state` παράμετρος είναι είτε **μη χρησιμοποιούμενη, χρησιμοποιούμενη ως στατική τιμή, ή μη σωστά επικυρωμένη**, επιτρέποντας στους επιτιθέμενους να παρακάμψουν τις προστασίες CSRF.
|
||||
Στις υλοποιήσεις OAuth, η κακή χρήση ή η παράλειψη της **`state` παραμέτρου** μπορεί να αυξήσει σημαντικά τον κίνδυνο επιθέσεων **Cross-Site Request Forgery (CSRF)**. Αυτή η ευπάθεια προκύπτει όταν η `state` παράμετρος είναι είτε **μη χρησιμοποιούμενη, χρησιμοποιούμενη ως στατική τιμή, ή μη σωστά επικυρωμένη ή συσχετισμένη με τη συνεδρία του χρήστη** κατά την είσοδο, επιτρέποντας στους επιτιθέμενους να παρακάμψουν τις προστασίες CSRF.
|
||||
|
||||
Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό το γεγονός παρεμβαίνοντας στη διαδικασία εξουσιοδότησης για να συνδέσουν τον λογαριασμό τους με τον λογαριασμό ενός θύματος, οδηγώντας σε πιθανές **καταλήψεις λογαριασμών**. Αυτό είναι ιδιαίτερα κρίσιμο σε εφαρμογές όπου το OAuth χρησιμοποιείται για **σκοπούς αυθεντικοποίησης**.
|
||||
Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό το γεγονός παρεμβαίνοντας στη διαδικασία εξουσιοδότησης για να συνδέσουν τον λογαριασμό τους με τον λογαριασμό ενός θύματος, οδηγώντας σε πιθανές **καταλήψεις λογαριασμών** κάνοντάς τον χρήστη να συνδεθεί με μια σχεδόν ολοκληρωμένη ροή oauth που ανήκει στον επιτιθέμενο. Αυτό είναι ιδιαίτερα κρίσιμο σε εφαρμογές όπου το OAuth χρησιμοποιείται για **σκοπούς αυθεντικοποίησης**.
|
||||
|
||||
Πραγματικά παραδείγματα αυτής της ευπάθειας έχουν καταγραφεί σε διάφορες **CTF προκλήσεις** και **πλατφόρμες hacking**, αναδεικνύοντας τις πρακτικές της επιπτώσεις. Το ζήτημα επεκτείνεται επίσης σε ενσωματώσεις με τρίτες υπηρεσίες όπως **Slack**, **Stripe**, και **PayPal**, όπου οι επιτιθέμενοι μπορούν να ανακατευθύνουν ειδοποιήσεις ή πληρωμές στους λογαριασμούς τους.
|
||||
|
||||
@ -82,14 +82,14 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
|
||||
|
||||
### Pre Account Takeover <a href="#ebe4" id="ebe4"></a>
|
||||
|
||||
1. **Χωρίς Επικύρωση Email κατά τη Δημιουργία Λογαριασμού**: Οι επιτιθέμενοι μπορούν προληπτικά να δημιουργήσουν έναν λογαριασμό χρησιμοποιώντας το email του θύματος. Εάν το θύμα αργότερα χρησιμοποιήσει μια τρίτη υπηρεσία για σύνδεση, η εφαρμογή μπορεί ακούσια να συνδέσει αυτόν τον τρίτο λογαριασμό με τον προδημιουργημένο λογαριασμό του επιτιθέμενου, οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση.
|
||||
2. **Εκμετάλλευση Χαλαρής Επικύρωσης Email στο OAuth**: Οι επιτιθέμενοι μπορεί να εκμεταλλευτούν υπηρεσίες OAuth που δεν επικυρώνουν τα emails, εγγραφόμενοι με την υπηρεσία τους και στη συνέχεια αλλάζοντας το email του λογαριασμού στο email του θύματος. Αυτή η μέθοδος κινδυνεύει επίσης με μη εξουσιοδοτημένη πρόσβαση στον λογαριασμό, παρόμοια με το πρώτο σενάριο αλλά μέσω διαφορετικού επιθετικού καναλιού.
|
||||
1. **Χωρίς Επικύρωση Email κατά τη Δημιουργία Λογαριασμού**: Οι επιτιθέμενοι μπορούν προληπτικά να δημιουργήσουν έναν λογαριασμό χρησιμοποιώντας το email του θύματος. Εάν το θύμα αργότερα χρησιμοποιήσει μια τρίτη υπηρεσία για είσοδο, η εφαρμογή μπορεί ακούσια να συνδέσει αυτόν τον τρίτο λογαριασμό με τον προδημιουργημένο λογαριασμό του επιτιθέμενου, οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση.
|
||||
2. **Εκμετάλλευση Χαλαρής Επικύρωσης Email OAuth**: Οι επιτιθέμενοι μπορεί να εκμεταλλευτούν υπηρεσίες OAuth που δεν επικυρώνουν τα emails, εγγραφόμενοι με την υπηρεσία τους και στη συνέχεια αλλάζοντας το email του λογαριασμού στο email του θύματος. Αυτή η μέθοδος κινδυνεύει επίσης με μη εξουσιοδοτημένη πρόσβαση στον λογαριασμό, παρόμοια με το πρώτο σενάριο αλλά μέσω διαφορετικού επιθετικού διαύλου.
|
||||
|
||||
### Disclosure of Secrets <a href="#e177" id="e177"></a>
|
||||
|
||||
Η αναγνώριση και η προστασία των μυστικών παραμέτρων OAuth είναι κρίσιμη. Ενώ η **`client_id`** μπορεί να αποκαλυφθεί με ασφάλεια, η αποκάλυψη της **`client_secret`** ενέχει σημαντικούς κινδύνους. Εάν η `client_secret` παραβιαστεί, οι επιτιθέμενοι μπορούν να εκμεταλλευτούν την ταυτότητα και την εμπιστοσύνη της εφαρμογής για να **κλέψουν τα `access_tokens` χρηστών** και ιδιωτικές πληροφορίες.
|
||||
|
||||
Μια κοινή ευπάθεια προκύπτει όταν οι εφαρμογές χειρίζονται κατά λάθος την ανταλλαγή του κωδικού εξουσιοδότησης για ένα `access_token` στην πλευρά του πελάτη αντί στην πλευρά του διακομιστή. Αυτό το λάθος οδηγεί στην έκθεση της `client_secret`, επιτρέποντας στους επιτιθέμενους να δημιουργούν `access_tokens` υπό την κάλυψη της εφαρμογής. Επιπλέον, μέσω κοινωνικής μηχανικής, οι επιτιθέμενοι θα μπορούσαν να κλιμακώσουν τα προνόμια προσθέτοντας επιπλέον πεδία στην εξουσιοδότηση OAuth, εκμεταλλευόμενοι περαιτέρω την εμπιστοσύνη της εφαρμογής.
|
||||
Μια κοινή ευπάθεια προκύπτει όταν οι εφαρμογές χειρίζονται κατά λάθος την ανταλλαγή του `code` εξουσιοδότησης για ένα `access_token` στην πλευρά του πελάτη αντί για την πλευρά του διακομιστή. Αυτό το λάθος οδηγεί στην έκθεση της `client_secret`, επιτρέποντας στους επιτιθέμενους να δημιουργούν `access_tokens` υπό την κάλυψη της εφαρμογής. Επιπλέον, μέσω κοινωνικής μηχανικής, οι επιτιθέμενοι θα μπορούσαν να κλιμακώσουν τα προνόμια προσθέτοντας επιπλέον πεδία στην εξουσιοδότηση OAuth, εκμεταλλευόμενοι περαιτέρω την εμπιστοσύνη της εφαρμογής.
|
||||
|
||||
### Client Secret Bruteforce
|
||||
|
||||
@ -122,11 +122,11 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
|
||||
|
||||
### Happy Paths, XSS, Iframes & Post Messages to leak code & state values
|
||||
|
||||
[**Check this post**](https://labs.detectify.com/writeups/account-hijacking-using-dirty-dancing-in-sign-in-oauth-flows/#gadget-2-xss-on-sandbox-third-party-domain-that-gets-the-url)
|
||||
[**Δείτε αυτή την ανάρτηση**](https://labs.detectify.com/writeups/account-hijacking-using-dirty-dancing-in-sign-in-oauth-flows/#gadget-2-xss-on-sandbox-third-party-domain-that-gets-the-url)
|
||||
|
||||
### AWS Cognito <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Σε αυτή την αναφορά bug bounty: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) μπορείτε να δείτε ότι το **token** που **επιστρέφει η AWS Cognito** στον χρήστη μπορεί να έχει **αρκετές άδειες για να αντικαταστήσει τα δεδομένα του χρήστη**. Επομένως, αν μπορείτε να **αλλάξετε το email του χρήστη για ένα διαφορετικό email χρήστη**, μπορεί να είστε σε θέση να **αναλάβετε** άλλους λογαριασμούς.
|
||||
Σε αυτή την αναφορά bug bounty: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) μπορείτε να δείτε ότι το **token** που επιστρέφει ο **AWS Cognito** στον χρήστη μπορεί να έχει **αρκετές άδειες για να αντικαταστήσει τα δεδομένα του χρήστη**. Επομένως, αν μπορείτε να **αλλάξετε το email του χρήστη για ένα διαφορετικό email χρήστη**, μπορεί να είστε σε θέση να **αναλάβετε** άλλους λογαριασμούς.
|
||||
```bash
|
||||
# Read info of the user
|
||||
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
|
||||
@ -151,73 +151,95 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticat
|
||||
|
||||
### Εκμετάλλευση άλλων tokens εφαρμογών <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Όπως [**αναφέρεται σε αυτή τη μελέτη**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), οι ροές OAuth που αναμένουν να λάβουν το **token** (και όχι έναν κωδικό) θα μπορούσαν να είναι ευάλωτες αν δεν ελέγχουν ότι το token ανήκει στην εφαρμογή.
|
||||
Όπως [**αναφέρεται σε αυτή τη γραφή**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), οι ροές OAuth που αναμένουν να λάβουν το **token** (και όχι έναν κωδικό) θα μπορούσαν να είναι ευάλωτες αν δεν ελέγχουν ότι το token ανήκει στην εφαρμογή.
|
||||
|
||||
Αυτό συμβαίνει επειδή ένας **επιτιθέμενος** θα μπορούσε να δημιουργήσει μια **εφαρμογή που υποστηρίζει OAuth και να συνδεθεί με το Facebook** (για παράδειγμα) στην δική του εφαρμογή. Στη συνέχεια, μόλις ένα θύμα συνδεθεί με το Facebook στην **εφαρμογή του επιτιθέμενου**, ο επιτιθέμενος θα μπορούσε να αποκτήσει το **OAuth token του χρήστη που δόθηκε στην εφαρμογή του και να το χρησιμοποιήσει για να συνδεθεί στην εφαρμογή OAuth του θύματος χρησιμοποιώντας το token του χρήστη του θύματος**.
|
||||
|
||||
> [!CAUTION]
|
||||
> Επομένως, αν ο επιτιθέμενος καταφέρει να αποκτήσει πρόσβαση στην δική του OAuth εφαρμογή, θα είναι σε θέση να αναλάβει τον λογαριασμό του θύματος σε εφαρμογές που αναμένουν ένα token και δεν ελέγχουν αν το token έχει παραχωρηθεί στο ID της εφαρμογής τους.
|
||||
> Επομένως, αν ο επιτιθέμενος καταφέρει να αποκτήσει πρόσβαση στην δική του OAuth εφαρμογή, θα είναι σε θέση να αναλάβει τον λογαριασμό του θύματος σε εφαρμογές που αναμένουν ένα token και δεν ελέγχουν αν το token παραχωρήθηκε στο ID της εφαρμογής τους.
|
||||
|
||||
### Δύο σύνδεσμοι & cookie <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Σύμφωνα με [**αυτή τη μελέτη**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), ήταν δυνατό να κάνετε ένα θύμα να ανοίξει μια σελίδα με ένα **returnUrl** που δείχνει στον host του επιτιθέμενου. Αυτή η πληροφορία θα **αποθηκευόταν σε ένα cookie (RU)** και σε ένα **μετέπειτα βήμα** το **prompt** θα **ρωτούσε** τον **χρήστη** αν θέλει να δώσει πρόσβαση σε αυτόν τον host του επιτιθέμενου.
|
||||
Σύμφωνα με [**αυτή τη γραφή**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), ήταν δυνατό να κάνετε ένα θύμα να ανοίξει μια σελίδα με ένα **returnUrl** που δείχνει στον διακομιστή του επιτιθέμενου. Αυτή η πληροφορία θα **αποθηκευόταν σε ένα cookie (RU)** και σε ένα **μετέπειτα βήμα** το **prompt** θα **ρωτούσε** τον **χρήστη** αν θέλει να δώσει πρόσβαση σε αυτόν τον διακομιστή του επιτιθέμενου.
|
||||
|
||||
Για να παρακαμφθεί αυτό το prompt, ήταν δυνατό να ανοίξει μια καρτέλα για να ξεκινήσει τη **ροή Oauth** που θα ρύθμιζε αυτό το cookie RU χρησιμοποιώντας το **returnUrl**, να κλείσει την καρτέλα πριν εμφανιστεί το prompt και να ανοίξει μια νέα καρτέλα χωρίς αυτή την τιμή. Στη συνέχεια, το **prompt δεν θα ενημερώσει για τον host του επιτιθέμενου**, αλλά το cookie θα ρυθμιστεί σε αυτόν, έτσι το **token θα σταλεί στον host του επιτιθέμενου** κατά την ανακατεύθυνση.
|
||||
Για να παρακαμφθεί αυτό το prompt, ήταν δυνατό να ανοίξει μια καρτέλα για να ξεκινήσει τη **ροή Oauth** που θα ρύθμιζε αυτό το cookie RU χρησιμοποιώντας το **returnUrl**, να κλείσει την καρτέλα πριν εμφανιστεί το prompt και να ανοίξει μια νέα καρτέλα χωρίς αυτή την τιμή. Στη συνέχεια, το **prompt δεν θα ενημερώσει για τον διακομιστή του επιτιθέμενου**, αλλά το cookie θα ρυθμιστεί σε αυτόν, έτσι το **token θα σταλεί στον διακομιστή του επιτιθέμενου** κατά την ανακατεύθυνση.
|
||||
|
||||
### Παράκαμψη αλληλεπίδρασης prompt <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Όπως εξηγείται [**σε αυτό το βίντεο**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), ορισμένες υλοποιήσεις OAuth επιτρέπουν να δηλωθεί η παράμετρος **`prompt`** GET ως None (**`&prompt=none`**) για να **αποτραπεί η ερώτηση στους χρήστες να επιβεβαιώσουν** την παραχωρηθείσα πρόσβαση σε ένα prompt στο διαδίκτυο αν είναι ήδη συνδεδεμένοι στην πλατφόρμα.
|
||||
Όπως εξηγείται σε [**αυτό το βίντεο**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), ορισμένες υλοποιήσεις OAuth επιτρέπουν να υποδεικνύεται η παράμετρος **`prompt`** GET ως None (**`&prompt=none`**) για να **αποτραπεί η ερώτηση στους χρήστες να επιβεβαιώσουν** την παραχωρηθείσα πρόσβαση σε ένα prompt στο διαδίκτυο αν είναι ήδη συνδεδεμένοι στην πλατφόρμα.
|
||||
|
||||
### response_mode
|
||||
|
||||
Όπως [**εξηγείται σε αυτό το βίντεο**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), μπορεί να είναι δυνατό να δηλωθεί η παράμετρος **`response_mode`** για να δηλώσετε πού θέλετε να παρασχεθεί ο κωδικός στην τελική διεύθυνση URL:
|
||||
Όπως [**εξηγείται σε αυτό το βίντεο**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), μπορεί να είναι δυνατό να υποδειχθεί η παράμετρος **`response_mode`** για να δηλώσετε πού θέλετε να παρασχεθεί ο κωδικός στην τελική διεύθυνση URL:
|
||||
|
||||
- `response_mode=query` -> Ο κωδικός παρέχεται μέσα σε μια GET παράμετρο: `?code=2397rf3gu93f`
|
||||
- `response_mode=query` -> Ο κωδικός παρέχεται μέσα σε μια παράμετρο GET: `?code=2397rf3gu93f`
|
||||
- `response_mode=fragment` -> Ο κωδικός παρέχεται μέσα στην παράμετρο τμήματος της διεύθυνσης URL `#code=2397rf3gu93f`
|
||||
- `response_mode=form_post` -> Ο κωδικός παρέχεται μέσα σε μια POST φόρμα με μια είσοδο που ονομάζεται `code` και την τιμή
|
||||
- `response_mode=form_post` -> Ο κωδικός παρέχεται μέσα σε μια φόρμα POST με μια είσοδο που ονομάζεται `code` και την τιμή
|
||||
- `response_mode=web_message` -> Ο κωδικός αποστέλλεται σε ένα μήνυμα post: `window.opener.postMessage({"code": "asdasdasd...`
|
||||
|
||||
### Ροή OAuth ROPC - Παράκαμψη 2 FA <a href="#b440" id="b440"></a>
|
||||
|
||||
Σύμφωνα με [**αυτή την ανάρτηση blog**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), αυτή είναι μια ροή OAuth που επιτρέπει τη σύνδεση στο OAuth μέσω **ονόματος χρήστη** και **κωδικού πρόσβασης**. Αν κατά τη διάρκεια αυτής της απλής ροής επιστραφεί ένα **token** με πρόσβαση σε όλες τις ενέργειες που μπορεί να εκτελέσει ο χρήστης, τότε είναι δυνατό να παρακαμφθεί η 2FA χρησιμοποιώντας αυτό το token.
|
||||
Σύμφωνα με [**αυτή την ανάρτηση στο blog**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), αυτή είναι μια ροή OAuth που επιτρέπει τη σύνδεση στο OAuth μέσω **όνομα χρήστη** και **κωδικού πρόσβασης**. Αν κατά τη διάρκεια αυτής της απλής ροής επιστραφεί ένα **token** με πρόσβαση σε όλες τις ενέργειες που μπορεί να εκτελέσει ο χρήστης, τότε είναι δυνατό να παρακαμφθεί η 2FA χρησιμοποιώντας αυτό το token.
|
||||
|
||||
### ATO σε ιστοσελίδα που ανακατευθύνει με βάση το open redirect στον παραπομπέα <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Αυτή η [**ανάρτηση blog**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) σχολιάζει πώς ήταν δυνατό να εκμεταλλευτεί κανείς ένα **open redirect** στην τιμή από τον **παραπομπέα** για να εκμεταλλευτεί το OAuth για ATO. Η επίθεση ήταν:
|
||||
Αυτή η [**ανάρτηση στο blog**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) σχολιάζει πώς ήταν δυνατό να εκμεταλλευτείτε ένα **open redirect** στην τιμή από τον **παραπομπέα** για να εκμεταλλευτείτε το OAuth για ATO. Η επίθεση ήταν:
|
||||
|
||||
1. Το θύμα αποκτά πρόσβαση στην ιστοσελίδα του επιτιθέμενου
|
||||
2. Το θύμα ανοίγει τον κακόβουλο σύνδεσμο και ένας opener ξεκινά τη ροή Google OAuth με `response_type=id_token,code&prompt=none` ως πρόσθετες παραμέτρους χρησιμοποιώντας ως **παραπομπέα την ιστοσελίδα του επιτιθέμενου**.
|
||||
3. Στον opener, αφού ο πάροχος εξουσιοδοτήσει το θύμα, το στέλνει πίσω στην τιμή της παραμέτρου `redirect_uri` (ιστοσελίδα θύματος) με κωδικό 30X που διατηρεί ακόμα την ιστοσελίδα του επιτιθέμενου στον παραπομπέα.
|
||||
4. Η ιστοσελίδα του θύματος **ενεργοποιεί το open redirect με βάση τον παραπομπέα** ανακατευθύνοντας τον χρήστη του θύματος στην ιστοσελίδα του επιτιθέμενου, καθώς το **`respose_type`** ήταν **`id_token,code`**, ο κωδικός θα σταλεί πίσω στον επιτιθέμενο στο **τμήμα** της διεύθυνσης URL επιτρέποντάς του να αναλάβει τον λογαριασμό του χρήστη μέσω Google στην ιστοσελίδα του θύματος.
|
||||
4. Η **ιστοσελίδα του θύματος ενεργοποιεί το open redirect με βάση τον παραπομπέα** ανακατευθύνοντας τον χρήστη του θύματος στην ιστοσελίδα του επιτιθέμενου, καθώς το **`respose_type`** ήταν **`id_token,code`**, ο κωδικός θα σταλεί πίσω στον επιτιθέμενο στο **τμήμα** της διεύθυνσης URL επιτρέποντάς του να αναλάβει τον λογαριασμό του χρήστη μέσω Google στην ιστοσελίδα του θύματος.
|
||||
|
||||
### Παράμετροι SSRFs <a href="#bda5" id="bda5"></a>
|
||||
|
||||
[**Ελέγξτε αυτή την έρευνα**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Για περισσότερες λεπτομέρειες σχετικά με αυτή την τεχνική.**
|
||||
|
||||
Η Δυναμική Εγγραφή Πελάτη στο OAuth λειτουργεί ως λιγότερο προφανής αλλά κρίσιμη διαδρομή για ευπάθειες ασφαλείας, ειδικότερα για επιθέσεις **Server-Side Request Forgery (SSRF)**. Αυτό το endpoint επιτρέπει στους διακομιστές OAuth να λαμβάνουν λεπτομέρειες σχετικά με τις εφαρμογές πελατών, συμπεριλαμβανομένων ευαίσθητων URL που θα μπορούσαν να εκμεταλλευτούν.
|
||||
Η Δυναμική Εγγραφή Πελάτη στο OAuth λειτουργεί ως λιγότερο προφανής αλλά κρίσιμος παράγοντας για ευπάθειες ασφαλείας, ειδικότερα για επιθέσεις **Server-Side Request Forgery (SSRF)**. Αυτό το endpoint επιτρέπει στους διακομιστές OAuth να λαμβάνουν λεπτομέρειες σχετικά με τις εφαρμογές πελατών, συμπεριλαμβανομένων ευαίσθητων URLs που θα μπορούσαν να εκμεταλλευτούν.
|
||||
|
||||
**Κύρια Σημεία:**
|
||||
|
||||
- Η **Δυναμική Εγγραφή Πελάτη** συχνά αντιστοιχεί στο `/register` και δέχεται λεπτομέρειες όπως `client_name`, `client_secret`, `redirect_uris`, και URLs για λογότυπα ή JSON Web Key Sets (JWKs) μέσω POST αιτημάτων.
|
||||
- Η **Δυναμική Εγγραφή Πελάτη** συχνά αντιστοιχεί στο `/register` και δέχεται λεπτομέρειες όπως `client_name`, `client_secret`, `redirect_uris`, και URLs για λογότυπα ή JSON Web Key Sets (JWKs) μέσω αιτημάτων POST.
|
||||
- Αυτή η δυνατότητα συμμορφώνεται με τις προδιαγραφές που καθορίζονται στο **RFC7591** και **OpenID Connect Registration 1.0**, οι οποίες περιλαμβάνουν παραμέτρους που ενδέχεται να είναι ευάλωτες σε SSRF.
|
||||
- Η διαδικασία εγγραφής μπορεί ακούσια να εκθέσει τους διακομιστές σε SSRF με διάφορους τρόπους:
|
||||
- **`logo_uri`**: Ένα URL για το λογότυπο της εφαρμογής πελάτη που μπορεί να ανακτηθεί από τον διακομιστή, προκαλώντας SSRF ή οδηγώντας σε XSS αν το URL δεν διαχειριστεί σωστά.
|
||||
- **`jwks_uri`**: Ένα URL στο έγγραφο JWK του πελάτη, το οποίο αν κατασκευαστεί κακόβουλα, μπορεί να προκαλέσει στον διακομιστή να κάνει εξωτερικά αιτήματα σε έναν διακομιστή που ελέγχεται από τον επιτιθέμενο.
|
||||
- **`jwks_uri`**: Ένα URL στο έγγραφο JWK του πελάτη, το οποίο αν κατασκευαστεί κακόβουλα, μπορεί να προκαλέσει στον διακομιστή να κάνει εξωτερικά αιτήματα σε έναν διακομιστή ελεγχόμενο από τον επιτιθέμενο.
|
||||
- **`sector_identifier_uri`**: Αναφέρεται σε έναν πίνακα JSON των `redirect_uris`, τον οποίο ο διακομιστής μπορεί να ανακτήσει, δημιουργώντας μια ευκαιρία SSRF.
|
||||
- **`request_uris`**: Λίστα επιτρεπόμενων URI αιτημάτων για τον πελάτη, που μπορεί να εκμεταλλευτεί αν ο διακομιστής ανακτήσει αυτές τις URI στην αρχή της διαδικασίας εξουσιοδότησης.
|
||||
- **`request_uris`**: Λίστα επιτρεπόμενων URI αιτημάτων για τον πελάτη, που μπορεί να εκμεταλλευτεί αν ο διακομιστής ανακτήσει αυτά τα URI στην αρχή της διαδικασίας εξουσιοδότησης.
|
||||
|
||||
**Στρατηγική Εκμετάλλευσης:**
|
||||
|
||||
- Το SSRF μπορεί να ενεργοποιηθεί καταχωρώντας έναν νέο πελάτη με κακόβουλα URLs σε παραμέτρους όπως `logo_uri`, `jwks_uri`, ή `sector_identifier_uri`.
|
||||
- Ενώ η άμεση εκμετάλλευση μέσω `request_uris` μπορεί να μετριαστεί από ελέγχους whitelist, η παροχή μιας προεγγεγραμμένης, ελεγχόμενης από τον επιτιθέμενο `request_uri` μπορεί να διευκολύνει το SSRF κατά τη διάρκεια της φάσης εξουσιοδότησης.
|
||||
- Ενώ η άμεση εκμετάλλευση μέσω `request_uris` μπορεί να μετριαστεί από ελέγχους whitelist, η παροχή ενός προεγγεγραμμένου, ελεγχόμενου από τον επιτιθέμενο `request_uri` μπορεί να διευκολύνει το SSRF κατά τη διάρκεια της φάσης εξουσιοδότησης.
|
||||
|
||||
## Συνθήκες Αγώνα Παρόχων OAuth
|
||||
|
||||
Αν η πλατφόρμα που δοκιμάζετε είναι πάροχος OAuth [**διαβάστε αυτό για να δοκιμάσετε πιθανές Συνθήκες Αγώνα**](race-condition.md).
|
||||
|
||||
## Επίθεση Mutable Claims
|
||||
|
||||
Στο OAuth, το πεδίο sub προσδιορίζει μοναδικά έναν χρήστη, αλλά η μορφή του διαφέρει ανάλογα με τον Διακομιστή Εξουσιοδότησης. Για να τυποποιήσουν την αναγνώριση χρηστών, ορισμένοι πελάτες χρησιμοποιούν email ή χειριστές χρηστών. Ωστόσο, αυτό είναι επικίνδυνο επειδή:
|
||||
|
||||
- Ορισμένοι Διακομιστές Εξουσιοδότησης δεν διασφαλίζουν ότι αυτές οι ιδιότητες (όπως το email) παραμένουν αμετάβλητες.
|
||||
- Σε ορισμένες υλοποιήσεις—όπως το **"Σύνδεση με Microsoft"**—ο πελάτης βασίζεται στο πεδίο email, το οποίο είναι **ελεγχόμενο από τον χρήστη στο Entra ID** και δεν επαληθεύεται.
|
||||
- Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτό δημιουργώντας τη δική του οργάνωση Azure AD (π.χ. doyensectestorg) και χρησιμοποιώντας την για να πραγματοποιήσει μια σύνδεση Microsoft.
|
||||
- Παρόλο που το Object ID (αποθηκευμένο στο sub) είναι αμετάβλητο και ασφαλές, η εξάρτηση από ένα μεταβλητό πεδίο email μπορεί να επιτρέψει μια ανάληψη λογαριασμού (για παράδειγμα, η κατάληψη ενός λογαριασμού όπως το victim@gmail.com).
|
||||
|
||||
## Επίθεση Client Confusion
|
||||
|
||||
Σε μια **Επίθεση Client Confusion**, μια εφαρμογή που χρησιμοποιεί τη Ροή OAuth Implicit αποτυγχάνει να επαληθεύσει ότι το τελικό access token έχει παραχθεί ειδικά για το δικό της Client ID. Ένας επιτιθέμενος δημιουργεί μια δημόσια ιστοσελίδα που χρησιμοποιεί τη Ροή OAuth Implicit της Google, εξαπατώντας χιλιάδες χρήστες να συνδεθούν και έτσι συλλέγοντας access tokens που προορίζονται για την ιστοσελίδα του επιτιθέμενου. Αν αυτοί οι χρήστες έχουν επίσης λογαριασμούς σε άλλη ευάλωτη ιστοσελίδα που δεν επαληθεύει το Client ID του token, ο επιτιθέμενος μπορεί να επαναχρησιμοποιήσει τα συλλεγμένα tokens για να προσποιηθεί τους θύματα και να αναλάβει τους λογαριασμούς τους.
|
||||
|
||||
## Επίθεση Scope Upgrade
|
||||
|
||||
Ο τύπος **Authorization Code Grant** περιλαμβάνει ασφαλή επικοινωνία server-to-server για τη μετάδοση δεδομένων χρηστών. Ωστόσο, αν ο **Authorization Server** εμπιστεύεται έμμεσα μια παράμετρο scope στην Αίτηση Access Token (μια παράμετρο που δεν ορίζεται στο RFC), μια κακόβουλη εφαρμογή θα μπορούσε να αναβαθμίσει τα προνόμια ενός κωδικού εξουσιοδότησης ζητώντας ένα υψηλότερο scope. Αφού παραχθεί το **Access Token**, ο **Resource Server** πρέπει να το επαληθεύσει: για τα JWT tokens, αυτό περιλαμβάνει τον έλεγχο της υπογραφής JWT και την εξαγωγή δεδομένων όπως client_id και scope, ενώ για τα tokens τυχαίων συμβολοσειρών, ο διακομιστής πρέπει να ρωτήσει τον Authorization Server για να ανακτήσει τις λεπτομέρειες του token.
|
||||
|
||||
## Hijacking Σχεδίου Ανακατεύθυνσης
|
||||
|
||||
Σε υλοποιήσεις OAuth για κινητά, οι εφαρμογές χρησιμοποιούν **προσαρμοσμένα URI schemes** για να λαμβάνουν ανακατευθύνσεις με Κωδικούς Εξουσιοδότησης. Ωστόσο, επειδή πολλές εφαρμογές μπορούν να καταχωρήσουν το ίδιο scheme σε μια συσκευή, η υπόθεση ότι μόνο ο νόμιμος πελάτης ελέγχει το URI ανακατεύθυνσης παραβιάζεται. Στο Android, για παράδειγμα, ένα Intent URI όπως `com.example.app://` oauth συλλαμβάνεται με βάση το scheme και τις προαιρετικές φίλτρα που ορίζονται στο intent-filter μιας εφαρμογής. Δεδομένου ότι η επίλυση προθέσεων του Android μπορεί να είναι ευρεία—ειδικά αν μόνο το scheme καθορίζεται—ένας επιτιθέμενος μπορεί να καταχωρήσει μια κακόβουλη εφαρμογή με ένα προσεκτικά κατασκευασμένο intent filter για να ανακατευθύνει τον κωδικό εξουσιοδότησης. Αυτό μπορεί να **επιτρέψει μια ανάληψη λογαριασμού** είτε μέσω αλληλεπίδρασης χρήστη (όταν πολλές εφαρμογές είναι επιλέξιμες να χειριστούν την πρόθεση) είτε μέσω τεχνικών παράκαμψης που εκμεταλλεύονται υπερβολικά συγκεκριμένα φίλτρα, όπως περιγράφεται από το διάγραμμα ροής αξιολόγησης του Ostorlab.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [**https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1**](https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1)
|
||||
- [**https://portswigger.net/research/hidden-oauth-attack-vectors**](https://portswigger.net/research/hidden-oauth-attack-vectors)
|
||||
- [**https://blog.doyensec.com/2025/01/30/oauth-common-vulnerabilities.html**](https://blog.doyensec.com/2025/01/30/oauth-common-vulnerabilities.html)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -8,9 +8,9 @@
|
||||
|
||||
## Κανονικοποίηση Unicode
|
||||
|
||||
Η κανονικοποίηση Unicode συμβαίνει όταν **οι χαρακτήρες unicode κανονικοποιούνται σε χαρακτήρες ascii**.
|
||||
Η κανονικοποίηση Unicode συμβαίνει όταν οι **χαρακτήρες unicode κανονικοποιούνται σε χαρακτήρες ascii**.
|
||||
|
||||
Ένα κοινό σενάριο αυτού του τύπου ευπάθειας συμβαίνει όταν το σύστημα **τροποποιεί** με κάποιο τρόπο την **είσοδο** του χρήστη **μετά την επαλήθευσή της**. Για παράδειγμα, σε ορισμένες γλώσσες μια απλή κλήση για να γίνει η **είσοδος κεφαλαία ή πεζά** θα μπορούσε να κανονικοποιήσει την δεδομένη είσοδο και το **unicode θα μετατραπεί σε ASCII** δημιουργώντας νέους χαρακτήρες.\
|
||||
Ένα κοινό σενάριο αυτού του τύπου ευπάθειας συμβαίνει όταν το σύστημα **τροποποιεί** με κάποιο τρόπο την **είσοδο** του χρήστη **μετά την επαλήθευσή της**. Για παράδειγμα, σε ορισμένες γλώσσες μια απλή κλήση για να γίνει η **είσοδος κεφαλαία ή πεζά** θα μπορούσε να κανονικοποιήσει την δεδομένη είσοδο και οι **unicode θα μετατραπούν σε ASCII** δημιουργώντας νέους χαρακτήρες.\
|
||||
Για περισσότερες πληροφορίες δείτε:
|
||||
|
||||
{{#ref}}
|
||||
@ -19,8 +19,8 @@ unicode-normalization.md
|
||||
|
||||
## `\u` σε `%`
|
||||
|
||||
Οι χαρακτήρες Unicode συνήθως αναπαρίστανται με το **πρόθεμα `\u`**. Για παράδειγμα, ο χαρακτήρας `㱋` είναι `\u3c4b`([ελέγξτε το εδώ](https://unicode-explorer.com/c/3c4B)). Εάν ένα backend **μετασχηματίσει** το πρόθεμα **`\u` σε `%`**, η προκύπτουσα συμβολοσειρά θα είναι `%3c4b`, η οποία αποκωδικοποιημένη URL είναι: **`<4b`**. Και, όπως μπορείτε να δείτε, ένας **χαρακτήρας `<` έχει εισαχθεί**.\
|
||||
Μπορείτε να χρησιμοποιήσετε αυτή την τεχνική για να **εισάγετε οποιονδήποτε τύπο χαρακτήρα** εάν το backend είναι ευάλωτο.\
|
||||
Οι χαρακτήρες Unicode συνήθως αναπαρίστανται με το **πρόθεμα `\u`**. Για παράδειγμα, ο χαρακτήρας `㱋` είναι `\u3c4b`([δείτε το εδώ](https://unicode-explorer.com/c/3c4B)). Εάν ένα backend **μετασχηματίσει** το πρόθεμα **`\u` σε `%`**, η προκύπτουσα συμβολοσειρά θα είναι `%3c4b`, η οποία αποκωδικοποιημένη URL είναι: **`<4b`**. Και, όπως μπορείτε να δείτε, ένας **χαρακτήρας `<` έχει εισαχθεί**.\
|
||||
Μπορείτε να χρησιμοποιήσετε αυτή την τεχνική για να **εισάγετε οποιονδήποτε τύπο χαρακτήρα** αν το backend είναι ευάλωτο.\
|
||||
Δείτε [https://unicode-explorer.com/](https://unicode-explorer.com/) για να βρείτε τους χαρακτήρες που χρειάζεστε.
|
||||
|
||||
Αυτή η ευπάθεια προέρχεται από μια ευπάθεια που βρήκε ένας ερευνητής, για μια πιο λεπτομερή εξήγηση δείτε [https://www.youtube.com/watch?v=aUsAHb0E7Cg](https://www.youtube.com/watch?v=aUsAHb0E7Cg)
|
||||
@ -42,9 +42,23 @@ $str = iconv("UTF-8", "ASCII//TRANSLIT", $str);
|
||||
|
||||
echo "String: " . $str;
|
||||
```
|
||||
Λίστες Emoji:
|
||||
Emoji λίστες:
|
||||
|
||||
- [https://github.com/iorch/jakaton_feminicidios/blob/master/data/emojis.csv](https://github.com/iorch/jakaton_feminicidios/blob/master/data/emojis.csv)
|
||||
- [https://unicode.org/emoji/charts-14.0/full-emoji-list.html](https://unicode.org/emoji/charts-14.0/full-emoji-list.html)
|
||||
|
||||
## Windows Best-Fit/Worst-fit
|
||||
|
||||
Όπως εξηγείται σε **[αυτή τη σπουδαία ανάρτηση](https://blog.orange.tw/posts/2025-01-worstfit-unveiling-hidden-transformers-in-windows-ansi/)**, τα Windows έχουν μια δυνατότητα που ονομάζεται **Best-Fit** η οποία θα **αντικαταστήσει χαρακτήρες unicode** που δεν μπορούν να εμφανιστούν σε ASCII mode με έναν παρόμοιο. Αυτό μπορεί να οδηγήσει σε **αναπάντεχες συμπεριφορές** όταν το backend **αναμένει έναν συγκεκριμένο χαρακτήρα** αλλά λαμβάνει έναν διαφορετικό.
|
||||
|
||||
Είναι δυνατόν να βρείτε χαρακτήρες best-fit σε **[https://worst.fit/mapping/](https://worst.fit/mapping/)**.
|
||||
|
||||
Καθώς τα Windows συνήθως θα μετατρέπουν τις συμβολοσειρές unicode σε ascii συμβολοσειρές ως ένα από τα τελευταία μέρη της εκτέλεσης (συνήθως πηγαίνοντας από μια API με κατάληξη "W" σε μια API με κατάληξη "A" όπως `GetEnvironmentVariableA` και `GetEnvironmentVariableW`), αυτό θα επέτρεπε στους επιτιθέμενους να παρακάμψουν τις προστασίες στέλνοντας χαρακτήρες unicode που θα μετατραπούν τελευταίοι σε ASCII χαρακτήρες που θα εκτελούν αναπάντεχες ενέργειες.
|
||||
|
||||
Στην ανάρτηση του blog προτείνονται μέθοδοι για να παρακαμφθούν οι ευπάθειες που διορθώθηκαν χρησιμοποιώντας μια **μαύρη λίστα χαρακτήρων**, εκμεταλλευόμενοι **path traversals** χρησιμοποιώντας [χαρακτήρες που αντιστοιχούν σε “/“ (0x2F)](https://worst.fit/mapping/#to%3A0x2f) και [χαρακτήρες που αντιστοιχούν σε “\“ (0x5C)](https://worst.fit/mapping/#to%3A0x5c) ή ακόμα και παρακάμπτοντας τις προστασίες escape shell όπως το `escapeshellarg` της PHP ή το `subprocess.run` της Python χρησιμοποιώντας μια λίστα, αυτό έγινε για παράδειγμα χρησιμοποιώντας **fullwidth διπλά εισαγωγικά (U+FF02)** αντί για διπλά εισαγωγικά, έτσι στο τέλος αυτό που φαινόταν σαν 1 επιχείρημα μετατράπηκε σε 2 επιχειρήματα.
|
||||
|
||||
**Σημειώστε ότι για μια εφαρμογή να είναι ευάλωτη πρέπει να χρησιμοποιεί "W" Windows APIs αλλά να καλεί τελικά μια "A" Windows api ώστε να δημιουργηθεί το "Best-fit" της συμβολοσειράς unicode.**
|
||||
|
||||
**Πολλές ανακαλυφθείσες ευπάθειες δεν θα διορθωθούν καθώς οι άνθρωποι δεν συμφωνούν ποιος θα πρέπει να διορθώσει αυτό το ζήτημα.**
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user