Ειδοποίηση ασφαλείας ProfilePress
Αν λάβατε ένα email από εμένα που σας παραπέμπει σε αυτή τη σελίδα, αυτό συμβαίνει επειδή ο
ιστότοπός σας φαίνεται να εκτελεί μια έκδοση του ProfilePress (το πρόσθετο WordPress που
εξακολουθεί να διανέμεται με το όνομα φακέλου wp-user-avatar, από τον ProperFraction) που
εμπίπτει στο επηρεαζόμενο εύρος ενός γνωστού ζητήματος ασφαλείας. Αυτή η σελίδα εξηγεί ποιο
είναι το ζήτημα, πώς να διαπιστώσετε αν αφορά καθόλου τον ιστότοπό σας, και πώς να ενημερώσετε.
Μια σημείωση για το όνομα πριν από οτιδήποτε άλλο, επειδή μπερδεύει τον κόσμο: αυτό το
πρόσθετο ξεκίνησε τη ζωή του ως WP User Avatar και διατήρησε εκείνο το slug κατά τη
μετονομασία του, οπότε στα αρχεία σας βρίσκεται στο /wp-content/plugins/wp-user-avatar/,
ενώ η διαχείριση WordPress το εμφανίζει με το πλήρες τρέχον όνομά του, “Paid Membership
Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content –
ProfilePress”. Το WP User Avatar και το ProfilePress είναι το ίδιο πρόσθετο. Πρόκειται για
πρόσθετο WordPress σε όλη τη διαδρομή.
Πριν από οτιδήποτε άλλο, το πιο σημαντικό στοιχείο για αυτή την ειδοποίηση: μια έκδοση στο
επηρεαζόμενο εύρος δεν σημαίνει από μόνη της ότι ο ιστότοπός σας είναι εκτεθειμένος. Το
ζήτημα που περιγράφεται παρακάτω είναι εκμεταλλεύσιμο μόνο όταν το ProfilePress δημοσιεύει
μια φόρμα εγγραφής στο front-end που περιλαμβάνει ένα πεδίο επιλογής ρόλου (το shortcode
[reg-select-role], ή το πεδίο “reg-select-role” στον οπτικό κατασκευαστή φορμών με μεταφορά
και απόθεση), διαμορφωμένη με έναν συγκεκριμένο τρόπο. Αν ο ιστότοπός σας δεν προσφέρει
δημόσια αυτο-εγγραφή, ή οι φόρμες εγγραφής σας δεν επιτρέπουν στον επισκέπτη να επιλέξει ρόλο,
είναι πολύ πιθανό να μην είναι εκτεθειμένος ακόμη και σε μια επηρεαζόμενη έκδοση. Μπορώ να
διαβάσω την έκδοση του πρόσθετού σας από δημόσια αρχεία, αλλά δεν μπορώ να δω τις φόρμες
εγγραφής σας, οπότε αυτή η ειδοποίηση είναι μια προληπτική ενημέρωση, όχι ένα επιβεβαιωμένο
εύρημα για τον ιστότοπό σας.
Το ζήτημα είναι η CVE-2026-12497, μια μη εξουσιοδοτημένη κλιμάκωση προνομίων στον χειριστή εγγραφής στο front-end του πρόσθετου (CWE-269, ακατάλληλη διαχείριση προνομίων). Η αρχή που εκχώρησε την CVE δεν δημοσίευσε βαθμολογία σοβαρότητας, και δεν επινοώ κάποια. Αυτό που έχει σημασία για την αξιολόγησή της είναι ότι είναι μη εξουσιοδοτημένη αλλά περιορισμένη σε έναν μη διαχειριστικό ρόλο, και εξαρτάται από τη διαμόρφωση εγγραφής που περιγράφεται παραπάνω. Επηρεάζει τις εκδόσεις 3.0.0 έως 4.16.17 και έχει διορθωθεί στην 4.16.18. Αν χρησιμοποιείτε μια επηρεαζόμενη έκδοση, ενημερώστε το ProfilePress στην 4.16.18 ή νεότερη (η τρέχουσα κυκλοφορία είναι η 4.16.19). Δεν υπάρχει καμία ένδειξη ότι αυτό το ζήτημα αξιοποιείται οπουδήποτε.
Μια σημείωση για τον βαθμό επείγοντος, επειδή αυτή είναι μια υπό όρους ειδοποίηση: πόσο σας αφορά εξαρτάται σχεδόν εξ ολοκλήρου από το αν δημοσιεύετε αυτού του είδους τη φόρμα εγγραφής. Αν δεν προσφέρετε δημόσια αυτο-εγγραφή με πεδίο επιλογής ρόλου, η ενημέρωση είναι συνηθισμένη συντήρηση πρόσθετου. Αν το κάνετε, παρακαλώ αντιμετωπίστε την ενημέρωση ως προτεραιότητα: σε εκείνη τη διαμόρφωση, το σφάλμα θα μπορούσε να επιτρέψει σε έναν μη εξουσιοδοτημένο επισκέπτη να εγγραφεί σε υψηλότερο ρόλο από αυτόν που πρόσφερε η φόρμα σας (για παράδειγμα Editor ή Author). Ακόμη και τότε, αυτή η σελίδα είναι μια προληπτική ενημέρωση, όχι μια αναφορά περιστατικού, και δεν υπονοείται καμία επείγουσα αντίδραση.
Πρόκειται για σφάλμα πρόσθετου, όχι για σφάλμα του πυρήνα WordPress. Ένα πλήρως ενημερωμένο WordPress δεν σας προστατεύει αν το ίδιο το πρόσθετο ProfilePress βρίσκεται σε μια επηρεαζόμενη έκδοση.
Είναι αυτό το μήνυμα γνήσιο;
Ναι. Πρόκειται για μια καλόπιστη ειδοποίηση υπεύθυνης γνωστοποίησης από έναν ανεξάρτητο ερευνητή ασφαλείας. Δεν σας ζητώ χρήματα, κωδικούς πρόσβασης ή πρόσβαση στον ιστότοπό σας, και δεν έχω επιχειρήσει να εισβάλω σε αυτόν, να μεταφορτώσω οτιδήποτε ή να αξιοποιήσω οτιδήποτε.
Το μόνο που έκανα ήταν να δω δημόσια ορατά αρχεία που ο ιστότοπός σας παρέχει σε κάθε
επισκέπτη (με τον ίδιο τρόπο που η αρχική σας σελίδα είναι δημόσια) και να σημειώσω τον αριθμό
έκδοσης που το πρόσθετο δημοσιεύει στο δημόσιο αρχείο readme.txt του. Συγκεκριμένα δεν
άγγιξα το σύστημα εγγραφής, και τίποτα σε αυτόν τον έλεγχο δεν αγγίζει τα δεδομένα σας, την
περιοχή διαχείρισής σας ή οποιοδήποτε ιδιωτικό μέρος του ιστότοπού σας (περισσότερες
λεπτομέρειες στην ενότητα Τι έκανα και τι δεν έκανα παρακάτω).
Αν θέλετε να επαληθεύσετε ποιος είμαι, δείτε τα στοιχεία επικοινωνίας στο κάτω μέρος αυτής της σελίδας και τη σελίδα Σχετικά.
Γιατί αυτό έχει σημασία
Το ProfilePress είναι ένα ευρέως χρησιμοποιούμενο πρόσθετο συνδρομών, εγγραφής χρηστών και σύνδεσης για το WordPress (περίπου 100.000 ενεργές εγκαταστάσεις). Μεταξύ άλλων, επιτρέπει σε έναν ιστότοπο να δημοσιεύει φόρμες εγγραφής στο front-end ώστε οι επισκέπτες να μπορούν να δημιουργούν τους δικούς τους λογαριασμούς, και αυτές οι φόρμες μπορούν προαιρετικά να περιλαμβάνουν ένα πεδίο που επιτρέπει στον επισκέπτη να επιλέξει ποιον ρόλο θα έχει ο νέος του λογαριασμός.
Στις επηρεαζόμενες εκδόσεις, ο χειριστής εγγραφής υπολογίζει τους ρόλους που μια φόρμα προσφέρει και τους ρόλους που θα δεχτεί χρησιμοποιώντας δύο διαφορετικά κομμάτια κώδικα. Για ορισμένες έγκυρες διαμορφώσεις του πεδίου ρόλου, ο κώδικας που υπολογίζει τους αποδεκτούς ρόλους αποτυγχάνει να διαβάσει τη λίστα ρόλων της φόρμας και σιωπηλά επιστρέφει στην αποδοχή οποιουδήποτε επεξεργάσιμου ρόλου (δηλαδή, οποιουδήποτε ρόλου εκτός από τον διαχειριστή). Επειδή επίσης δεν υπάρχει nonce που να προστατεύει τον δημόσιο χειριστή εγγραφής, ένας μη εξουσιοδοτημένος επισκέπτης μπορεί να υποβάλει έναν ρόλο της δικής του επιλογής και να εγγραφεί σε υψηλότερο ρόλο από αυτόν που πρόσφερε η φόρμα, για παράδειγμα Editor ή Author αντί του προβλεπόμενου Subscriber.
Δύο πράγματα βοηθούν να διατηρηθεί η προοπτική. Πρώτον, ο αντίκτυπος έχει ένα σταθερό ανώτατο όριο: το πρόσθετο εξαιρεί ρητά τον ρόλο του διαχειριστή από αυτά που μπορεί να αναθέσει η εγγραφή, οπότε πρόκειται για ζήτημα κλιμάκωσης προνομίων περιορισμένο σε έναν μη διαχειριστικό ρόλο, όχι για κατάληψη διακομιστή, κατάληψη διαχειριστή ή απομακρυσμένη εκτέλεση κώδικα. Δεύτερον, το σημείο εισόδου είναι μια δημοσιευμένη φόρμα εγγραφής με πεδίο επιλογής ρόλου, οπότε το ζήτημα φτάνει μόνο σε ιστότοπους διαμορφωμένους έτσι· ένας ιστότοπος χωρίς δημόσια αυτο-εγγραφή, ή του οποίου οι φόρμες δεν επιτρέπουν σε έναν επισκέπτη να επιλέξει ρόλο, είναι πολύ πιθανό να μην είναι εκτεθειμένος ακόμη και σε μια επηρεαζόμενη έκδοση. Και για να το επαναλάβω απλά, δεν υπάρχει καμία ένδειξη ενεργού εκμετάλλευσης: δεν βρίσκεται στον κατάλογο Known Exploited Vulnerabilities της CISA, και δεν γνωρίζω καμία αναφορά εκμετάλλευσης.
Αν το email μου ανέφερε αυτό το ζήτημα, σημαίνει ότι η έκδοση που αναφέρει ο ιστότοπός σας εμπίπτει στο επηρεαζόμενο εύρος. Δεν δοκίμασα αν ο συγκεκριμένος ιστότοπός σας είναι εκμεταλλεύσιμος, και δεν μπορώ να δω πώς είναι διαμορφωμένες οι φόρμες εγγραφής σας. Το μόνο που παρατήρησα είναι ότι ο ιστότοπος αναφέρει μια επηρεαζόμενη έκδοση.
Με αφορά;
Δύο ερωτήσεις το καθορίζουν, με αυτή τη σειρά.
Πρώτη: δημοσιεύετε μια φόρμα εγγραφής ProfilePress που επιτρέπει σε έναν επισκέπτη να επιλέξει ρόλο; Αυτή είναι η καθοριστική ερώτηση, και μόνο εσείς μπορείτε να την απαντήσετε.
- Αν ο ιστότοπός σας δεν προσφέρει δημόσια αυτο-εγγραφή, ή οι φόρμες εγγραφής του δεν
περιλαμβάνουν πεδίο επιλογής ρόλου (το shortcode
[reg-select-role]ή το πεδίο “reg-select-role” στον κατασκευαστή φορμών), είναι πολύ πιθανό να μην είστε εκτεθειμένοι, ακόμη και σε μια επηρεαζόμενη έκδοση. Η ενημέρωση εξακολουθεί να συνιστάται, ως συνηθισμένη συντήρηση. - Αν ο ιστότοπός σας όντως δημοσιεύει μια φόρμα εγγραφής στο front-end με πεδίο επιλογής ρόλου, το ζήτημα σας αφορά, και θα πρέπει να ενημερώσετε άμεσα.
- Για να ελέγξετε: στη διαχείριση WordPress, εξετάστε τις φόρμες εγγραφής ProfilePress σας για ένα πεδίο ρόλου, ή ανοίξτε μία από τις σελίδες εγγραφής σας σε ένα παράθυρο ιδιωτικής περιήγησης και δείτε αν σε έναν επισκέπτη που δεν είναι συνδεδεμένος προσφέρεται μια επιλογή ρόλου λογαριασμού.
Δεύτερη: ποια έκδοση χρησιμοποιείτε; Δεν χρειάζεται να με πιστέψετε, και για αυτό το πρόσθετο η έκδοση αναφέρεται αξιόπιστα.
Από την περιοχή διαχείρισης WordPress (έγκυρη):
- Συνδεθείτε στον πίνακα ελέγχου WordPress (συνήθως στο
yourdomain.com/wp-admin). - Μεταβείτε στο Plugins έπειτα Installed Plugins.
- Βρείτε την καταχώριση που εμφανίζεται ως “Paid Membership Plugin … ProfilePress” (ο
φάκελός της είναι
wp-user-avatar) και σημειώστε την έκδοση που εμφανίζεται κάτω από το όνομά της. Αυτή είναι η πραγματική εγκατεστημένη έκδοση.
Από το δημόσιο μανιφέστο (δεν απαιτείται σύνδεση): ανοίξτε το
yourdomain.com/wp-content/plugins/wp-user-avatar/readme.txt σε ένα πρόγραμμα περιήγησης. Η
γραμμή Stable tag: κοντά στην κορυφή είναι η έκδοση που αναφέρει η εγκατάστασή σας, και
αυτό είναι το ίδιο δημόσιο αρχείο που διάβασα.
Μια μικρή προειδοποίηση αν είστε από εκείνους που διαβάζουν αριθμούς έκδοσης από τα URL των
πόρων: κρίνετε την έκδοση από το ίδιο το frontend.min.js ή frontend.min.css του
πρόσθετου, από την τιμή ?ver=, που είναι η έκδοση του ProfilePress. Μην τη διαβάζετε από
το ενσωματωμένο select2/select2.min.css, του οποίου η τιμή ?ver= (για παράδειγμα 7.0.2)
είναι η ίδια η έκδοση της βιβλιοθήκης select2 και δεν έχει καμία σχέση με την έκδοση του
πρόσθετου.
Έπειτα εφαρμόστε αυτόν τον κανόνα, και σημειώστε ότι οι εκδόσεις συγκρίνονται αριθμητικά, όχι αλφαβητικά:
- 3.0.0 έως 4.16.17: δυνητικά επηρεαζόμενη (υπό την επιφύλαξη της ερώτησης για τη φόρμα εγγραφής παραπάνω), ενημερώστε τώρα.
- 4.16.18 ή νεότερη: ήδη διορθωμένη. Αυτό περιλαμβάνει την τρέχουσα κυκλοφορία 4.16.19.
- Παλαιότερη από την 3.0: δεν επηρεάζεται από αυτό το ζήτημα. Ο ευάλωτος χειριστής εγγραφής πρωτοεμφανίστηκε με τη μετονομασία του ProfilePress 3.0· η προηγούμενη γραμμή “WP User Avatar” 1.x και 2.x, μόνο για avatar, δεν είχε λειτουργία εγγραφής και δεν τον φέρει. (Στην πράξη, ουσιαστικά κάθε τρέχουσα εγκατάσταση είναι μια κυκλοφορία 4.16.x.)
Πώς να αναβαθμίσετε
Ο ασφαλέστερος δρόμος είναι η ενημέρωση μέσω του ίδιου του WordPress, αφού πρώτα κρατήσετε αντίγραφο ασφαλείας:
- Κρατήστε αντίγραφο ασφαλείας του ιστότοπού σας (αρχεία και βάση δεδομένων) πριν κάνετε αλλαγές. Οι περισσότεροι πάροχοι φιλοξενίας προσφέρουν αντίγραφα ασφαλείας με ένα κλικ, ή χρησιμοποιήστε ένα πρόσθετο αντιγράφων ασφαλείας WordPress.
- Στη διαχείριση WordPress, μεταβείτε στο Dashboard έπειτα Updates, ή Plugins έπειτα Installed Plugins. Αν εμφανίζεται μια ενημέρωση ProfilePress στη λίστα, εγκαταστήστε την από εδώ.
- Αν προτιμάτε τη γραμμή εντολών, το WP-CLI κάνει το ίδιο πράγμα:
wp plugin update wp-user-avatar(η εντολή χρησιμοποιεί το όνομα φακέλου,wp-user-avatar). - Αν δεν εμφανιστεί καμία ενημέρωση, μπορείτε να λάβετε την τελευταία έκδοση απευθείας από τη σελίδα του πρόσθετου στον κατάλογο WordPress.org, ProfilePress, και να ενημερώσετε μέσω Plugins έπειτα Add New Plugin έπειτα Upload Plugin.
- Μετά την ενημέρωση, επιβεβαιώστε τον νέο αριθμό έκδοσης (4.16.18 ή νεότερη· η τρέχουσα κυκλοφορία είναι η 4.16.19) χρησιμοποιώντας τα παραπάνω βήματα, και ελέγξτε ότι οι σελίδες εγγραφής και σύνδεσής σας λειτουργούν κανονικά.
Ενόσω βρίσκεστε εκεί, αξίζει να επιβεβαιώσετε ότι ο πυρήνας WordPress και τα άλλα σας πρόσθετα είναι ενημερωμένα, καθώς η ίδια αρχή ισχύει για όλα τους.
Μετά την ενημέρωση
Η ενημέρωση στην 4.16.18 ή νεότερη κλείνει το ζήτημα, και για τους περισσότερους ιστότοπους αυτό είναι όλη η εργασία. Δεν υπάρχει καμία ένδειξη ότι αυτό το σφάλμα έχει αξιοποιηθεί οπουδήποτε, οπότε δεν υπονοείται καμία επείγουσα αντίδραση: δεν χρειάζεται να αντιμετωπίσετε τον ιστότοπό σας ως παραβιασμένο ή να τον θέσετε εκτός λειτουργίας.
Ένα βήμα παρακολούθησης αξίζει να εξεταστεί, και είναι υπό όρους ως προς την ίδια ερώτηση εγγραφής. Αν ο ιστότοπός σας δημοσίευε μια φόρμα εγγραφής ProfilePress με πεδίο επιλογής ρόλου ενώ βρισκόταν σε μια επηρεαζόμενη έκδοση, τότε ήταν τουλάχιστον θεωρητικά δυνατό για έναν επισκέπτη να έχει εγγραφεί σε υψηλότερο ρόλο από τον προβλεπόμενο, παρότι δεν υπάρχει καμία απόδειξη ότι κάποιος το έκανε. Σε αυτή την περίπτωση, μια μεμονωμένη συνηθισμένη προφύλαξη είναι λογική:
- Ρίξτε μια ματιά στις πρόσφατες εγγραφές χρηστών για οποιονδήποτε λογαριασμό δημιουργήθηκε με απροσδόκητα υψηλό ρόλο (για παράδειγμα έναν Editor ή Author που δεν αναγνωρίζετε), με τον συνηθισμένο τρόπο που θα εξετάζατε τη δραστηριότητα του ιστότοπου, και προσαρμόστε ή αφαιρέστε οτιδήποτε φαίνεται εκτός θέσης.
Αντιμετωπίστε το ως συνηθισμένη τακτοποίηση ασφαλείας, όχι ως αντιμετώπιση περιστατικού. Αν δεν προσφέρετε δημόσια αυτο-εγγραφή με πεδίο επιλογής ρόλου, η ενημέρωση από μόνη της είναι αρκετή.
Τι έκανα και τι δεν έκανα
Για να είμαι πλήρως διαφανής σχετικά με τον έλεγχο πίσω από το email μου: διάβασα μόνο δημόσια
αρχεία που ο ιστότοπός σας ήδη παρέχει σε κάθε επισκέπτη, συγκεκριμένα το δημόσιο αρχείο
readme.txt του πρόσθετου και την αρχική σας σελίδα. Δεν απέκτησα πρόσβαση στην περιοχή
διαχείρισης WordPress, στη βάση δεδομένων σας ή σε οποιοδήποτε ιδιωτικό μέρος του ιστότοπου.
Ειδικότερα, δεν άγγιξα την ευάλωτη διαδρομή εγγραφής, και δεν δοκίμασα ούτε αξιοποίησα
οτιδήποτε.
Πρόκειται για μια παρατήρηση βασισμένη στην έκδοση: ο ιστότοπός σας αναφέρει μια έκδοση στο επηρεαζόμενο εύρος. Επειδή αυτό το ζήτημα εξαρτάται από τη διαμόρφωση, ένας ιστότοπος σε εκείνο το εύρος μπορεί να μην είναι καθόλου εκτεθειμένος (αν δεν προσφέρει δημόσια αυτο-εγγραφή, ή οι φόρμες του δεν φέρουν πεδίο επιλογής ρόλου), και μπορεί επίσης να προστατεύεται ήδη με άλλα μέσα, όπως ένα τείχος προστασίας web εφαρμογών. Αυτή η ειδοποίηση δεν είναι μια δήλωση ότι ο ιστότοπός σας ήταν εκμεταλλεύσιμος τη στιγμή που τον έλεγξα.
Δεν έχω webmaster / έχω κολλήσει
Αν δεν είστε το άτομο που συντηρεί τον ιστότοπο, παρακαλώ προωθήστε αυτή τη σελίδα σε όποιον το κάνει (τον προγραμματιστή σας, το πρακτορείο ή τον πάροχο φιλοξενίας σας). Θα αναγνωρίσουν τα παραπάνω βήματα γρήγορα.
Αν συντηρείτε τον ιστότοπο μόνοι σας και κολλήσετε, με χαρά θα σας βοηθήσω να κατευθυνθείτε προς τη σωστή κατεύθυνση χωρίς κόστος. Επικοινωνήστε χρησιμοποιώντας τα παρακάτω στοιχεία επικοινωνίας.
Επικοινωνία
Evan Harris, Ερευνητής Ασφαλείας
- Email: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
Έρχομαι σε επαφή για ζητήματα όπως αυτό αποκλειστικά για να βοηθήσω τους διαχειριστές να ασφαλίσουν τους ιστότοπούς τους. Αν προτιμάτε να μην επικοινωνήσω ξανά μαζί σας, απλώς ενημερώστε με και θα το σεβαστώ.
Αναφορές
Επίσημες ειδοποιήσεις και παρακολούθηση
Κατασκευαστής / πρόσθετο