Εν συντομία: Για να ελέγξετε την έκδοση PHP, το php -v δεν αρκεί. Πρέπει να γνωρίζετε ποια έκδοση PHP χρησιμοποιεί πράγματι ο διακομιστής ιστού, αν το πακέτο περιέχει τη διόρθωση, ακόμη και ως backport με παλιό αριθμό, και αν μετά την ενημέρωση επανεκκινήθηκαν όλες οι διεργασίες. Το PHP2Shell έχει διορθωθεί στις 8.5.12, 8.4.27, 8.3.36 και 8.2.35.
Γιατί δεν αρκεί ο αριθμός έκδοσης
Για το PHP2Shell υπάρχει σαφής λίστα διορθωμένων εκδόσεων. Στην πράξη τρεις καταστάσεις οδηγούν παρ' όλα αυτά σε εσφαλμένες εκτιμήσεις:
- Πολλαπλές εγκαταστάσεις: Η γραμμή εντολών δείχνει PHP 8.3, ο ιστότοπος όμως εκτελείται μέσω ενός pool με PHP 8.1.
- Backports: Οι διανομές και οι πάροχοι φιλοξενίας ενσωματώνουν εν μέρει διορθώσεις σε υπάρχοντα πακέτα. Τότε, για παράδειγμα, το Plesk εξακολουθεί να δείχνει 8.2.34, παρότι έχει εφαρμοστεί patch.
- Παλιές διεργασίες: Τα νέα αρχεία βρίσκονται στον δίσκο, οι workers που εκτελούνται όμως προέρχονται ακόμη από πριν.
Για τη διοίκηση και όσους δεν είναι τεχνικοί βοηθά ένας απλός εμπειρικός κανόνας: μη ρωτάτε μόνο «Ποια έκδοση PHP έχουμε;», αλλά «Είναι το PHP2Shell κλειστό σε όλους τους διακομιστές και από πού το βλέπουμε;». Μια αξιόπιστη απάντηση περιέχει τρεις αποδείξεις: έκδοση ή backport, επίπεδο πακέτων και χρονική στιγμή της επανεκκίνησης.
Ο τεχνικός έλεγχος έχει γι' αυτό τρία βήματα: έκδοση, επίπεδο πακέτων, διεργασίες που εκτελούνται. Οι παρακάτω εντολές είναι αποκλειστικά ανάγνωσης. Τα ονόματα πακέτων και υπηρεσιών διαφέρουν ανά διανομή, πηγή PHP και διεπαφή φιλοξενίας· τα παραδείγματα υποθέτουν PHP 8.3.
Έλεγχος έκδοσης PHP στη γραμμή εντολών
php -v # έκδοση της γραμμής εντολών
ls /etc/php/ 2>/dev/null # Debian/Ubuntu: εγκατεστημένοι κλάδοι
php-fpm8.3 -v # έκδοση του δυαδικού αρχείου FPM (το όνομα διαφέρει ανά διανομή)
php -i | grep -E "^PHP Version|Server API|Loaded Configuration File"
Σε RHEL, AlmaLinux ή Rocky το binary του FPM ονομάζεται συνήθως php-fpm· σε Software Collections ή ξένες πηγές υπάρχουν περισσότερες εκδόσεις σε δικές τους διαδρομές. Το Plesk και το cPanel φέρνουν δικές τους εγκαταστάσεις PHP, που υπάρχουν δίπλα στην PHP του συστήματος. Πώς ενεργείτε εκεί, το περιγράφουμε στις σελίδες για το Plesk και το cPanel.
Ποια έκδοση PHP χρησιμοποιεί ένας ιστότοπος στο πλαίσιο του ιστού, το βλέπετε πιο αξιόπιστα στη διαμόρφωση του pool ή του VirtualHost ή στη διεπαφή φιλοξενίας. Το δείχνει επίσης μια σελίδα phpinfo· δημιουργήστε την μόνο για λίγο, με προστασία πρόσβασης και τυχαίο όνομα, και διαγράψτε την αμέσως μετά.
Στο shared hosting συνήθως δεν έχετε πρόσβαση στη γραμμή εντολών. Τότε η διεπαφή φιλοξενίας δείχνει την ορισμένη έκδοση PHP ανά ιστότοπο. Το αν εφαρμόστηκε και επανεκκινήθηκε ένα backport, σπάνια αναγράφεται εκεί. Εδώ αξιόπιστος δρόμος είναι η γραπτή επιβεβαίωση του παρόχου.
Έλεγχος επιπέδου πακέτων και backports
Το επίπεδο των πακέτων δείχνει τι παρέδωσε πράγματι η διανομή σας:
# Debian/Ubuntu
apt policy php8.3-fpm
apt changelog php8.3-fpm | grep -i -E "CVE-2026-109618|CVE-2026-109619"
# RHEL, AlmaLinux, Rocky, Fedora
dnf info php-fpm
rpm -q --changelog php-fpm | grep -i -E "CVE-2026-109618|CVE-2026-109619"
Αν ένας από τους αριθμούς CVE βρίσκεται στο changelog, το backport περιέχεται στο εγκατεστημένο πακέτο. Αν λείπει η καταχώριση, αυτό δεν αποτελεί ακόμη απόδειξη ευπάθειας: ορισμένοι συντηρητές πακέτων διατυπώνουν διαφορετικά τα changelogs. Τότε συγκρίνετε την έκδοση του πακέτου με τις ανακοινώσεις ασφαλείας της διανομής σας ή ρωτήστε τον πάροχο. Ένα υπόδειγμα για αυτό το ερώτημα θα βρείτε στο Πώς θα ρωτήσετε τον πάροχο φιλοξενίας για την κατάσταση του patch.
Σημαντικό: ελέγξτε κάθε εγκατεστημένο πακέτο PHP, όχι μόνο το πρώτο. Σε διακομιστές με περισσότερους κλάδους συχνά ο ένας έχει λάβει patch και ο άλλος όχι.
Εκτελείται πράγματι η νέα έκδοση;
Μια ενημέρωση ισχύει μόνο όταν έχουν επανεκκινηθεί όλες οι διεργασίες PHP. Συγκρίνετε την ώρα εκκίνησης των διεργασιών που εκτελούνται με τη χρονική στιγμή της ενημέρωσης:
ps -o pid,lstart,cmd -C php-fpm8.3 # ώρα εκκίνησης των διεργασιών FPM
systemctl status php8.3-fpm # από πότε εκτελείται η υπηρεσία
needrestart -r l # Debian/Ubuntu, αν είναι εγκατεστημένο: δείχνει παρωχημένες διεργασίες
Αν η ώρα εκκίνησης είναι πριν από την ενημέρωση, εκτελούνται ακόμη παλιές διεργασίες. Στον Apache με mod_php το ίδιο ισχύει για τις διεργασίες του Apache. Πώς θα κάνετε σωστή επανεκκίνηση, περιγράφει το Επανεκκίνηση του PHP-FPM και όλων των workers.
Καταγράψτε γραπτώς το αποτέλεσμα: διακομιστής, έκδοση PHP, έκδοση πακέτου, CVE στο changelog ναι ή όχι, χρονική στιγμή της επανεκκίνησης. Αυτή τη σημείωση τη χρειάζεστε για τη διοίκηση, την ασφαλιστική εταιρεία και έναν μεταγενέστερο έλεγχο ιχνών.
Αξιολόγηση του αποτελέσματος
| Εύρημα | Αξιολόγηση |
|---|---|
| Επίσημη έκδοση 8.5.12, 8.4.27, 8.3.36 ή 8.2.35, διεργασίες επανεκκινημένες | PHP2Shell κλειστό |
| Παλαιότερος αριθμός, αριθμοί CVE στο changelog του πακέτου, διεργασίες επανεκκινημένες | Backport εφαρμόστηκε, κλειστό |
| Παλαιότερος αριθμός, καμία καταχώριση στο changelog, καμία επιβεβαίωση | ασαφές, διευκρινίστε με τον πάροχο |
| PHP 8.1 ή παλαιότερη χωρίς επιβεβαιωμένο backport | ανοιχτό, απαιτούνται προσωρινά μέτρα και μετάβαση |
| Διεργασίες παλαιότερες από την ενημέρωση | Λείπει η επανεκκίνηση, η ευπάθεια παραμένει ενεργή |
Αν ένας διακομιστής μείνει στην κατάσταση «ασαφές», αντιμετωπίστε τον όπως έναν ανοιχτό: ορίστε προσωρινά μέτρα και παρακολουθήστε τη διευκρίνιση μέχρι να υπάρξει απόδειξη. Την πλήρη επισκόπηση εκδόσεων θα βρείτε στο Ποιες εκδόσεις PHP επηρεάζονται;.
Πώς βοηθά συγκεκριμένα η PHP SOS;
Με την υπηρεσία PHP patch αναλαμβάνουμε τον έλεγχο και την απόδειξη:
- Εντοπισμός όλων των εγκαταστάσεων, ακόμη και δεύτερων εκδόσεων από πίνακες ελέγχου φιλοξενίας, Software Collections ή containers.
- Αξιολόγηση του επιπέδου πακέτων: επίσημη έκδοση, backport ή ανοιχτό, με απόδειξη από το changelog ή από τον πάροχο.
- Έλεγχος της επανεκκίνησης, μέχρι να μην εκτελείται πλέον καμία διεργασία με παλιό κώδικα.
- Σύνταξη πρωτοκόλλου ελέγχου, που μπορείτε να χρησιμοποιήσετε εσωτερικά και απέναντι σε τρίτους.
Συχνές ερωτήσεις
Γιατί το php -v δείχνει άλλη έκδοση από τον ιστότοπό μου;
Σε πολλούς διακομιστές είναι εγκατεστημένες περισσότερες εκδόσεις PHP. Η γραμμή εντολών χρησιμοποιεί μία από αυτές, ο διακομιστής ιστού ή ένα pool FPM άλλη. Ελέγξτε γι' αυτό την έκδοση που εκτελείται πράγματι στο πλαίσιο του ιστού, για παράδειγμα μέσω του binary του FPM ή της διεπαφής φιλοξενίας.
Πώς αναγνωρίζω ένα backport;
Στα πακέτα διανομών η διόρθωση αναφέρεται συχνά στο changelog του πακέτου, συχνά με τον αριθμό CVE. Σε Debian και Ubuntu βοηθά το apt changelog, σε συστήματα τύπου RHEL το rpm -q --changelog. Αν λείπει η καταχώριση, διευκρινίστε την κατάσταση με τον πάροχο.
Μπορώ να ελέγξω την έκδοση PHP στο μενού πελάτη του παρόχου φιλοξενίας;
Ναι, οι περισσότερες διεπαφές δείχνουν την ορισμένη έκδοση ανά ιστότοπο. Το αν εφαρμόστηκε και επανεκκινήθηκε ένα backport, συνήθως δεν το βλέπετε εκεί. Γι' αυτό αξιόπιστος δρόμος είναι η γραπτή επιβεβαίωση του παρόχου.