FixVibe
Covered by FixVibehigh

CORS Εσφαλμένη διαμόρφωση: Κίνδυνοι υπερβολικά επιτρεπόμενων πολιτικών

Το Cross-Origin Resource Sharing (CORS) είναι ένας μηχανισμός προγράμματος περιήγησης που έχει σχεδιαστεί για να χαλαρώνει την Πολιτική ίδιας προέλευσης (SOP). Αν και είναι απαραίτητο για τις σύγχρονες εφαρμογές ιστού, η ακατάλληλη εφαρμογή—όπως η επανάληψη της κεφαλίδας Προέλευσης του αιτούντος ή η επιτρεπόμενη προσθήκη της «μηδενικής» προέλευσης—μπορεί να επιτρέψει σε κακόβουλους ιστότοπους να εκμεταλλεύονται ιδιωτικά δεδομένα χρήστη.

CWE-942

Αντίκτυπος

Ένας εισβολέας μπορεί να κλέψει ευαίσθητα, επαληθευμένα δεδομένα από χρήστες μιας ευάλωτης εφαρμογής [S2]. Εάν ένας χρήστης επισκεφτεί έναν κακόβουλο ιστότοπο ενώ είναι συνδεδεμένος στην ευάλωτη εφαρμογή, ο κακόβουλος ιστότοπος μπορεί να υποβάλει αιτήματα πολλαπλής προέλευσης στο API της εφαρμογής και να διαβάσει τις απαντήσεις [S1][S2]. Αυτό μπορεί να οδηγήσει σε κλοπή προσωπικών πληροφοριών, συμπεριλαμβανομένων των προφίλ χρηστών, των διακριτικών CSRF ή των προσωπικών μηνυμάτων [S2].

Ριζική αιτία

Το CORS είναι ένας μηχανισμός που βασίζεται σε κεφαλίδες HTTP που επιτρέπει στους διακομιστές να προσδιορίζουν ποιες προελεύσεις (τομέας, σχήμα ή θύρα) επιτρέπεται να φορτώνουν πόρους [S1]. Τα τρωτά σημεία προκύπτουν συνήθως όταν η πολιτική CORS ενός διακομιστή είναι πολύ ευέλικτη ή δεν εφαρμόζεται σωστά [S2]:

  • Κεφαλίδα ανακλώμενης προέλευσης: Ορισμένοι διακομιστές διαβάζουν την κεφαλίδα Origin από ένα αίτημα πελάτη και την επαναλαμβάνουν στην κεφαλίδα απόκρισης Access-Control-Allow-Origin (ACAO) [S2]. Αυτό επιτρέπει ουσιαστικά σε οποιονδήποτε ιστότοπο να έχει πρόσβαση στον πόρο [S2].
  • Εσφαλμένες μπαλαντέρ: Ενώ ο χαρακτήρας μπαλαντέρ * επιτρέπει σε οποιαδήποτε πηγή να έχει πρόσβαση σε έναν πόρο, δεν μπορεί να χρησιμοποιηθεί για αιτήματα που απαιτούν διαπιστευτήρια (όπως cookie ή κεφαλίδες εξουσιοδότησης) [S3]. Οι προγραμματιστές συχνά προσπαθούν να το παρακάμψουν δημιουργώντας δυναμικά την κεφαλίδα ACAO με βάση το αίτημα [S2].
  • Στη λίστα επιτρεπόμενων "null": Ορισμένες εφαρμογές στη λίστα επιτρεπόμενων την προέλευση null, η οποία μπορεί να ενεργοποιηθεί από ανακατευθυνόμενα αιτήματα ή τοπικά αρχεία, επιτρέποντας σε κακόβουλους ιστότοπους να μεταμφιεστούν ως προέλευση null για να αποκτήσουν πρόσβαση [S2][S3].
  • Σφάλματα ανάλυσης: Λάθη στο regex ή την αντιστοίχιση συμβολοσειρών κατά την επικύρωση της κεφαλίδας Origin μπορούν να επιτρέψουν στους εισβολείς να χρησιμοποιούν τομείς όπως trusted-domain.com.attacker.com [S2].

Είναι σημαντικό να σημειωθεί ότι το CORS δεν αποτελεί προστασία έναντι της πλαστογράφησης αιτημάτων διασταυρούμενης τοποθεσίας (CSRF) [S2].

Διορθώσεις σκυροδέματος

  • Χρήση στατικής λευκής λίστας: Αποφύγετε τη δυναμική δημιουργία της κεφαλίδας Access-Control-Allow-Origin από την κεφαλίδα Origin του αιτήματος [S2]. Αντίθετα, συγκρίνετε την προέλευση του αιτήματος με μια κωδικοποιημένη λίστα αξιόπιστων τομέων [S3].
  • Αποφύγετε την "μηδενική" προέλευση: Μην συμπεριλάβετε ποτέ το null στη λίστα επιτρεπόμενων προέλευσης [S2].
  • Περιορισμός διαπιστευτηρίων: Ορίστε μόνο το Access-Control-Allow-Credentials: true εάν είναι απολύτως απαραίτητο για τη συγκεκριμένη αλληλεπίδραση πολλαπλής προέλευσης [S3].
  • Χρησιμοποιήστε την κατάλληλη επικύρωση: Εάν πρέπει να υποστηρίξετε πολλαπλές προελεύσεις, βεβαιωθείτε ότι η λογική επικύρωσης για την κεφαλίδα Origin είναι ισχυρή και δεν μπορεί να παρακαμφθεί από υποτομείς ή τομείς παρόμοιας εμφάνισης [S2].

Πώς το FixVibe το δοκιμάζει

Το FixVibe το περιλαμβάνει πλέον ως ενεργό έλεγχο με κλειστό όριο. Μετά την επαλήθευση τομέα, το active.cors στέλνει αιτήματα ίδιας προέλευσης API με συνθετική προέλευση εισβολέα και ελέγχει τις κεφαλίδες απόκρισης CORS. Οι αναφορές αντικατοπτρίζουν αυθαίρετες προελεύσεις, με διαπιστευτήρια μπαλαντέρ CORS και ανοιχτό CORS σε μη δημόσια τελικά σημεία API, αποφεύγοντας τον θόρυβο του δημόσιου στοιχείου.