Εν συντομία: Στην ασφάλεια PHP του Drupal το θέμα μετά το PHP2Shell είναι κυρίως ο διακομιστής: η ευπάθεια βρίσκεται στην PHP, όχι στο Drupal. Ελέγξτε την κατάσταση της PHP στην αναφορά κατάστασης και στον φορέα λειτουργίας, επανεκκινήστε όλες τις διεργασίες PHP και έπειτα ελέγξτε το settings.php, τον κατάλογο files και τα δικαιώματα ρόλων.
Drupal και PHP2Shell: η κατάσταση
Το Drupal χρησιμοποιείται συχνά για μεγαλύτερους ιστοτόπους, πύλες και δημόσιους φορείς, συχνά με πολλούς συντάκτες και διεπαφές. Οι ευπάθειες PHP CVE-2026-109618 και CVE-2026-109619 επιτρέπουν, σύμφωνα με την ομάδα της PHP, εξ αποστάσεως εκτέλεση κακόβουλου κώδικα χωρίς σύνδεση. Το πόσο καλά συντηρείται το ίδιο το Drupal δεν παίζει ρόλο.
Το Drupal έχει δική του ομάδα ασφαλείας, η οποία δημοσιεύει υποδείξεις για τον πυρήνα και τα modules. Το PHP2Shell δεν περιλαμβάνεται εκεί, επειδή δεν είναι ευπάθεια του Drupal. Όποιος παρακολουθεί μόνο τις υποδείξεις του Drupal μπορεί επομένως να έχει παραλείψει την ανακοίνωση.
Σε μεγαλύτερα έργα Drupal η ευθύνη κατανέμεται συχνά σε περισσότερους φορείς: ένα πρακτορείο συντηρεί τον κώδικα, ένα κέντρο δεδομένων λειτουργεί τους διακομιστές, η συντακτική ομάδα βρίσκεται στο σπίτι. Διευκρινίστε γραπτά ποιος εφαρμόζει την ενημέρωση της PHP, ποιος ενεργοποιεί την επανεκκίνηση και ποιος ελέγχει αν είχε συμβεί κάτι νωρίτερα. Σε διαμορφώσεις με περισσότερους διακομιστές ιστού πίσω από load balancer, κάθε μεμονωμένος διακομιστής πρέπει να έχει patch και να έχει επανεκκινηθεί, διαφορετικά ένα μέρος των αιτημάτων παραμένει σε παλιά PHP.
Ασφάλεια PHP στο Drupal: έλεγχος έκδοσης και επιπέδου patch
Στο Αναφορές > Αναφορά κατάστασης το Drupal δείχνει την έκδοση PHP με την οποία εκτελείται ο ιστότοπος, μαζί με προειδοποιήσεις για τη διαμόρφωση. Στη γραμμή εντολών, το drush status δίνει την έκδοση της PHP CLI, με την οποία εκτελούνται επίσης τα cronjobs και τα deployments. Και οι δύο πρέπει να έχουν patch.
Οι διορθωμένες εκδόσεις upstream είναι οι 8.5.12, 8.4.27, 8.3.36 και 8.2.35. Οι διανομές και οι πάροχοι φιλοξενίας ενσωματώνουν εν μέρει τις διορθώσεις ως backport, οπότε ο αριθμός παραμένει ο ίδιος· καθοριστική είναι η επιβεβαιωμένη κατάσταση των πακέτων. Ποιες εκδόσεις PHP υποστηρίζει η έκδοση του Drupal σας, ελέγξτε σύμφωνα με τις απαιτήσεις συστήματος στο drupal.org. Μετά την ενημέρωση ανήκει και η επανεκκίνηση, που περιγράφεται στο Επανεκκίνηση του PHP-FPM και όλων των workers.
Φάκελοι και αρχεία που μετρούν
| Θέση | Περιεχόμενο | Σημείο ελέγχου |
|---|---|---|
sites/default/settings.php |
Βάση δεδομένων, hash salt, trusted_host_patterns |
Ημερομηνία αλλαγής, εισαγόμενα includes |
sites/default/files/ |
Δημόσια uploads, παραγόμενες εικόνες, CSS και JS | Κανένα αρχείο PHP, ύπαρξη .htaccess |
| Ιδιωτικός κατάλογος αρχείων | Προστατευμένα uploads, συχνά εκτός της ρίζας εγγράφων | Δικαιώματα πρόσβασης |
modules/contrib/, modules/custom/ |
Modules από το drupal.org και δικές σας αναπτύξεις | Αλλαγμένα ή άγνωστα modules |
themes/ |
Themes με πρότυπα Twig | Ξένο JavaScript |
vendor/ |
Εξαρτήσεις Composer | composer audit |
Το Drupal δημιουργεί στον κατάλογο files ένα .htaccess που αποτρέπει την εκτέλεση PHP. Υπό Apache λειτουργεί, υπό Nginx όχι. Εκεί χρειάζεται δικός σας κανόνας:
location ~* ^/sites/.+/files/.+\.php$ {
deny all;
}
Ακίνδυνοι έλεγχοι με εργαλεία του συστήματος και με το Drush:
find sites/*/files -type f -name "*.php"
drush pm:list --status=enabled --type=module
composer audit
Συγκρίνετε την κατάσταση του κώδικα στον διακομιστή με το αποθετήριο Git. Σε έργα Drupal με Composer αυτός είναι ο ταχύτερος δρόμος για να βρείτε ξένα ή αλλαγμένα αρχεία, επειδή κάθε απόκλιση πρέπει να μπορεί να εξηγηθεί.
Ρόλοι, δικαιώματα και modules ως κίνδυνος
Η σύνδεση βρίσκεται στο /user/login, η περιοχή διαχείρισης στο /admin. Στο Drupal την ασφάλεια δεν την καθορίζουν μόνο οι λογαριασμοί διαχειριστή, αλλά και μεμονωμένα δικαιώματα. Δικαιώματα όπως η διαχείριση modules, χρηστών, αδειών ή μορφών κειμένου με πλήρη HTML είναι στην πράξη δικαιώματα διαχειριστή. Ελέγξτε στους Ανθρώπους και στα Δικαιώματα ποιους ρόλους έχουν και ποιοι ανήκουν σε αυτούς τους ρόλους.
Τα contrib modules επεκτείνουν σημαντικά το Drupal, φέρνουν όμως δικό τους κώδικα. Modules χωρίς ενεργή συντήρηση και παλιές δικές σας αναπτύξεις είναι συχνά ο λόγος για τον οποίο αναβάλλεται μια αναβάθμιση της PHP. Περισσότερα για τις εξαρτήσεις στο Έλεγχος εξαρτήσεων Composer για ευπάθειες.
Τι προσφέρει μια ενημέρωση του Drupal και τι όχι
Μια ενημέρωση του πυρήνα ή ενός module κλείνει σφάλματα σε αυτόν τον κώδικα και μπορεί να επιτρέψει νεότερες εκδόσεις PHP. Δεν κάνει patch στην PHP, δεν αφαιρεί ξένα αρχεία από το sites/default/files, δεν επαναφέρει δικαιώματα και δεν διαγράφει λογαριασμούς που δημιουργήθηκαν κρυφά. Και η cache μπορεί να συνεχίσει να παραδίδει παραποιημένο περιεχόμενο μέχρι να αδειάσει. Μετά από υποψία πρέπει να ανανεωθούν το hash salt και τα στοιχεία πρόσβασης στη βάση δεδομένων.
Στις εγκαταστάσεις multisite περισσότεροι ιστότοποι μοιράζονται τον ίδιο κώδικα, έχουν όμως στο sites/ ο καθένας δικό του settings.php και δικό του κατάλογο files. Ελέγξτε τότε κάθε ιστότοπο ξεχωριστά. Ένα εύρημα σε έναν ιστότοπο επηρεάζει λόγω του κοινού κώδικα συνήθως και όλους τους υπόλοιπους.
Πώς βοηθά συγκεκριμένα η PHP SOS;
- Ελέγχουμε την PHP ιστού και CLI του διακομιστή Drupal σας και ζητάμε επιβεβαίωση του patch και της επανεκκίνησης.
- Διασώζουμε logs και δεδομένα και συγκρίνουμε την κατάσταση του κώδικα με το αποθετήριό σας ή με τα αρχικά πακέτα.
- Ελέγχουμε το
settings.php, τον κατάλογοfiles, τους κανόνες του διακομιστή, τους ρόλους και τα δικαιώματα. - Αν το επιθυμείτε, αναλαμβάνουμε τη διαρκή συντήρηση στη σύμβαση συντήρησης ασφαλείας, ώστε οι ενημερώσεις PHP και Drupal να μην αποκλίνουν ξανά.
Συχνές ερωτήσεις
Βοηθά μια ενημέρωση ασφαλείας του Drupal κατά του PHP2Shell;
Όχι. Οι ενημερώσεις του Drupal κλείνουν σφάλματα στον πυρήνα και στα modules του Drupal. Το PHP2Shell βρίσκεται στην PHP του διακομιστή και χρειάζεται ενημέρωση της PHP ή επιβεβαιωμένο backport και επανεκκίνηση όλων των διεργασιών PHP.
Πού δείχνει το Drupal την έκδοση PHP;
Στην αναφορά κατάστασης, στις Αναφορές. Με το Drush, η εντολή drush status δείχνει την έκδοση PHP της γραμμής εντολών. Οι δύο ενδείξεις μπορεί να διαφέρουν και ένα backport δεν αναγνωρίζεται με βεβαιότητα σε καμία από τις δύο.
Προστατεύει το .htaccess στον φάκελο files και υπό Nginx;
Όχι. Το .htaccess που δημιουργεί το Drupal αξιολογείται μόνο από τον Apache. Υπό Nginx χρειάζεστε δικό σας κανόνα στη διαμόρφωση του διακομιστή που αποκλείει τα αρχεία PHP στον κατάλογο files.
Τι σημαίνει το trusted_host_patterns;
Η ρύθμιση στο settings.php ορίζει υπό ποια ονόματα host απαντά το Drupal. Προστατεύει από επιθέσεις μέσω παραποιημένων στοιχείων host και ανήκει σε κάθε εγκατάσταση παραγωγής.