PHP2Shell: η νύχτα που τα sites έκλεισαν μόνα τους

Στις 21 Οκτωβρίου 2026 κυβερνήσεις, νοσοκομεία και μέσα ενημέρωσης κατέβασαν τα sites τους για να προλάβουν δύο κενά στην PHP. Τι ακριβώς έγινε, και τι σημαίνει για κάθε επιχείρηση με site ή app στο διαδίκτυο.

9 λεπτά ανάγνωση HigherHighLabs

Η νύχτα της 21ης Οκτωβρίου

Στις 21 Οκτωβρίου 2026, δημόσιες υπηρεσίες σε αρκετές χώρες κατέβασαν μόνες τους τα sites τους. Στην Ολλανδία βγήκαν εκτός το DigiD, το MijnOverheid και η ιστοσελίδα της Βουλής. Στη Γαλλία έκλεισαν οι σελίδες των νομαρχιών, μαζί και της αστυνομίας του Παρισιού. Ανάλογες διακοπές έγιναν σε Φινλανδία, Γερμανία, Βέλγιο και Καναδά. Μέσα στη νύχτα, η πρωθυπουργός της Ιαπωνίας, Σανάε Τακαΐτσι, ζήτησε δημόσια από όποιον έχει site σε PHP να περάσει αμέσως τη διόρθωση ή, αν δεν προλαβαίνει, να το κατεβάσει.

Αιτία ήταν δύο κενά ασφαλείας στην PHP, τη γλώσσα πίσω από ένα πολύ μεγάλο κομμάτι του web. Οι περισσότερες διακοπές ήταν προληπτικές. Οι υπηρεσίες δήλωσαν ότι δεν είχαν ένδειξη παραβίασης. Απλώς προτίμησαν λίγες ώρες εκτός λειτουργίας από λίγες ώρες ανοιχτές σε μια τρύπα που οποιοσδήποτε μπορούσε να εκμεταλλευτεί χωρίς κωδικό.

Αυτή η απόφαση είναι το πιο χρήσιμο μάθημα της ημέρας. Την πήραν άνθρωποι που ήξεραν τι τρέχει στο site τους και είχαν την εξουσία να το σταματήσουν.

Τι είναι η PHP και τι έσπασε

Σε PHP είναι γραμμένα το WordPress, το Drupal, το Laravel και αμέτρητα μικρότερα sites. Κατά τη συνηθισμένη εκτίμηση, τρέχει περίπου επτά στα δέκα sites των οποίων γνωρίζουμε τη γλώσσα του server. Ο επισκέπτης βλέπει μόνο τη σελίδα, όμως κάθε αίτημα περνάει πρώτα από την PHP.

Στις 21 Οκτωβρίου το PHP project κυκλοφόρησε τις εκδόσεις 8.5.12, 8.4.27, 8.3.36 και 8.2.35. Κλείνουν δύο κενά, τα CVE-2026-109618 και CVE-2026-109619, που έγιναν γνωστά ως PHP2Shell. Και τα δύο βαθμολογήθηκαν με 9,2 στα 10.

Με απλά λόγια: κάποιος μπορεί να στείλει αιτήματα σε έναν server με ευάλωτη PHP και να τον βάλει να εκτελέσει δικές του εντολές, χωρίς λογαριασμό και χωρίς κωδικό. Από εκεί και πέρα ο server είναι δικός του. Αρχεία, βάση δεδομένων, κλειδιά, ό,τι βλέπει η εφαρμογή.

Τα κενά βρίσκονται μέσα στην ίδια την PHP, στον τρόπο που διαχειρίζεται τη μνήμη όταν κάτι πάει στραβά στη μέση ενός αιτήματος. Στο πρώτο, η PHP ξεμένει από μνήμη τη λάθος στιγμή και συνεχίζει με μισοτελειωμένα εσωτερικά δεδομένα. Στο δεύτερο, κατάσταση από ένα αίτημα μένει ζωντανή μέσα στον ίδιο worker και τη βρίσκει το επόμενο αίτημα.

Επηρεάζεται κάθε εγκατάσταση που σερβίρει σελίδες: PHP-FPM, Apache με mod_php, php-cgi, FrankenPHP, LiteSpeed. Τον μεγαλύτερο κίνδυνο έχει το mod_php, όπου ένα αίτημα μπορεί να χτυπήσει την τρύπα πριν τρέξει καν ο κώδικας του site.

Το πρόβλημα πηγαίνει πίσω ως την PHP 5.4, του 2012. Ένα μικρότερο κομμάτι του είχε φανεί το 2024, χωρίς να του δοθεί η σημασία που του άξιζε. Επίσημες εκδόσεις πήραν μόνο οι κλάδοι που υποστηρίζονται ακόμη, από την 8.2 και πάνω. Για τις 7.4, 8.0 και 8.1 η PHP δημοσίευσε μόνο διορθώσεις σε πηγαίο κώδικα, για όποιον χτίζει μόνος του την PHP. Κάποιοι πάροχοι, όπως το cPanel και το CloudLinux, έβγαλαν δικές τους ενημερώσεις για παλιές εκδόσεις. Όποιος τρέχει παλιά έκδοση χωρίς τέτοια ενημέρωση δεν έχει έτοιμη λύση με ένα κλικ.

Η διόρθωση μπαίνει στην PHP του server, εκεί που απαντά στους επισκέπτες. Η ενημέρωση των βιβλιοθηκών της εφαρμογής δεν κλείνει την τρύπα. Το WordPress, το Laravel και ο κώδικας του site κάθονται από πάνω της.

Πώς ένα κενό δεκαετιών έγινε πρόβλημα μιας νύχτας

Τα κενά τα εντόπισαν, ανεξάρτητα, ερευνητές της Calif, της OpenAI και της Wiz, ανάμεσα σε Αύγουστο και Σεπτέμβριο. Και οι τρεις δούλεψαν με μοντέλα τεχνητής νοημοσύνης. Η Wiz ανέφερε ότι χρησιμοποίησε, μεταξύ άλλων, τα Gemini 4 Argon και GPT-5.6 Sol, και ότι δουλειά που παλιότερα θα έπαιρνε μήνες σε μια δυνατή ομάδα ολοκληρώθηκε σε περίπου μία εβδομάδα. Η OpenAI μίλησε για μια νέα φάση, όπου τέτοια μοντέλα βρίσκουν κενά με αντίκτυπο σε ολόκληρο το διαδίκτυο.

Το σχέδιο ήταν η ανακοίνωση να γίνει στις 22 Οκτωβρίου, ώστε διανομές Linux, εταιρείες hosting και μεγάλες πλατφόρμες να έχουν έτοιμα πακέτα την ίδια ώρα. Το σχέδιο χάλασε δύο μέρες νωρίτερα. Στις 20 Οκτωβρίου οι κωδικοί των κενών διέρρευσαν σε φόρουμ και social media, με λάθος ώρα και λάθος βαθμολογία, 10 στα 10. Τεχνικές λεπτομέρειες δεν είχαν δημοσιευτεί ακόμη. Η PHP έβγαλε προειδοποίηση το ίδιο απόγευμα και έφερε την κυκλοφορία μία μέρα νωρίτερα.

Το πρωί της 21ης, πάνω από έξι ώρες πριν από την κοινή ώρα, η Chainguard δημοσίευσε έτοιμες εικόνες που περιείχαν ήδη τη διόρθωση. Η PHP επεσήμανε ότι όποιος ήξερε να διαβάσει τις αλλαγές στον κώδικα είχε χρόνο να μελετήσει το patch, ενώ οι υπόλοιποι ακόμα περίμεναν. Η Chainguard απάντησε ότι προχώρησε επειδή η εκμετάλλευση είχε ήδη ξεκινήσει. Στο μεταξύ, ένα ερευνητικό βίντεο είχε δημοσιευτεί κατά λάθος και κυκλοφορούσε σε αντίγραφα.

Οι διορθωμένες εκδόσεις βγήκαν νωρίς το απόγευμα. Η Cloudflare ανέφερε ότι έβλεπε επιθέσεις πριν καν δημοσιευτούν οι λεπτομέρειες. Η εταιρεία ασφαλείας Sansec είχε προειδοποιήσει ότι οι μαζικές απόπειρες θα ξεκινούσαν περίπου δεκαπέντε λεπτά μετά τη δημοσίευση. Το Εθνικό Κέντρο Κυβερνοασφάλειας της Νέας Ζηλανδίας επιβεβαίωσε αναφορές για ενεργή εκμετάλλευση.

Το παράθυρο ανάμεσα στην είδηση και στην επίθεση μετριέται πλέον σε λεπτά. Όποιος δεν μπορεί να ενημερώσει αμέσως, κατεβάζει το site. Αυτό έκαναν κράτη, νοσοκομεία και μέσα ενημέρωσης.

Δεν ήταν μόνο η PHP

Τις ίδιες μέρες ξέσπασαν κι άλλα περιστατικά, άσχετα μεταξύ τους. Το καθένα θα αρκούσε για να γεμίσει μια κατά τα άλλα ήσυχη εβδομάδα.

Πιστοποιητικά: eMudhra

Η ινδική αρχή πιστοποιητικών eMudhra είχε εκδώσει από τον Απρίλιο του 2025 οκτώ ενδιάμεσα πιστοποιητικά με ιδιωτικά κλειδιά τόσο αδύναμα, που ανακτώνται σε δευτερόλεπτα από το ίδιο το δημόσιο πιστοποιητικό. Σε μία περίπτωση, το ιδιωτικό κλειδί ήταν κυριολεκτικά ο αριθμός 4. Με τέτοιο κλειδί, κάποιος μπορεί να φτιάξει πλαστό πιστοποιητικό για οποιοδήποτε site και ο browser να το εμπιστεύεται, μέχρι να ανακληθεί η εμπιστοσύνη.

Το εντόπισε ένας ερευνητής στις 17 Οκτωβρίου και μέσα σε λίγες μέρες Chrome, Firefox, Apple και Microsoft τα απέκλεισαν. Η εταιρεία εξήγησε ότι ένα λάθος στη διαδικασία δημιουργίας κλειδιών παρήγαγε ένα δεύτερο, αδύναμο ζεύγος, και αυτό κατέληξε στους browsers. Τα πιστοποιητικά είχαν περάσει δύο χρόνια ελέγχων.

GitLab

Την ίδια μέρα με την PHP, η GitLab διόρθωσε ένα κενό με βαθμό 10 στα 10, το CVE-2026-110264. Υπό προϋποθέσεις, κάποιος χωρίς λογαριασμό μπορεί να εκτελέσει κώδικα σε εγκατάσταση GitLab που μια εταιρεία φιλοξενεί η ίδια. Σύμφωνα με τη GitLab, το κενό υπάρχει από την έκδοση 7.0, του 2014.

Το gitlab.com ήταν ήδη ασφαλές. Όποιος έχει δικό του GitLab έπρεπε να αναβαθμίσει την ίδια μέρα, και μάλιστα για δεύτερη φορά. Εννέα μέρες νωρίτερα είχε κλείσει άλλο κενό, επίσης με τη μέγιστη βαθμολογία, και οι εκδόσεις εκείνης της διόρθωσης έμεναν εκτεθειμένες στο νέο.

Zeabur

Η πλατφόρμα φιλοξενίας Zeabur ανακοίνωσε ότι στις 14 και 15 Οκτωβρίου ένας εισβολέας χρησιμοποίησε εσωτερικά κλειδιά που δεν είχαν αλλάξει μετά από προηγούμενο περιστατικό, τον Αύγουστο. Διάβασε τη βάση δεδομένων της πλατφόρμας: 321.810 λογαριασμούς και περίπου 3,2 εκατομμύρια εγγραφές ρυθμίσεων, δηλαδή κωδικούς και κλειδιά πελατών. Η εταιρεία ανακοίνωσε ότι κλείνει, με τερματισμό των υπηρεσιών στις 31 Δεκεμβρίου 2026.

LiteLLM και Railway

Το LiteLLM είναι εργαλείο που επιτρέπει σε μια εφαρμογή να μιλάει με πολλά μοντέλα AI μέσα από μία διεπαφή. Η έκδοση 1.107.0 ανέβηκε στο PyPI και σε εικόνες Docker με κώδικα που κλέβει κλειδιά. Η εταιρεία είπε ότι παραβιάστηκε η διαδικασία κυκλοφορίας μέσω κλεμμένων διαπιστευτηρίων και ότι το περιστατικό περιορίστηκε. Είναι η δεύτερη φορά μέσα στο 2026 που το ίδιο εργαλείο παθαίνει κάτι τέτοιο. Τις ίδιες ώρες κυκλοφόρησαν αναφορές και για τη Railway, άλλη πλατφόρμα φιλοξενίας, για πρόσβαση σε μυστικά πελατών.

Τέσσερα διαφορετικά στρώματα μέσα σε μία εβδομάδα: η γλώσσα, το εργαλείο που εγκαθιστάς με μία εντολή, η πλατφόρμα που σε φιλοξενεί και η αρχή που υπογράφει το λουκέτο στον browser. Το καθένα θέλει διαφορετική κίνηση.

Γιατί τέτοιες μέρες θα γίνονται όλο και πιο συχνές

Δύο ταχύτητες άλλαξαν ταυτόχρονα.

Η πρώτη είναι η ανακάλυψη. Κενά που έμεναν κρυμμένα για χρόνια στον πιο διαδεδομένο κώδικα του διαδικτύου βρίσκονται τώρα μέσα σε εβδομάδες, από ομάδες που δουλεύουν με μοντέλα. Όσο περισσότεροι ψάχνουν έτσι, τόσο περισσότερα παλιά κενά θα βγαίνουν στην επιφάνεια μαζεμένα, γιατί ο παλιός κώδικας τρέχει σε εκατομμύρια μηχανήματα.

Η δεύτερη είναι η εκμετάλλευση. Μόλις μια διόρθωση ή μια περιγραφή γίνει δημόσια, τα ίδια εργαλεία μικραίνουν την απόσταση ως την πρώτη μαζική επίθεση. Η λογική «το βλέπουμε Δευτέρα, το περνάμε Τρίτη» δεν χωράει σε παράθυρο δεκαπέντε λεπτών.

Το αποτέλεσμα θα είναι περισσότερες νύχτες σαν την 21η Οκτωβρίου: πολλά άσχετα περιστατικά, σε διαφορετικά στρώματα, με ελάχιστο χρόνο ανάμεσα στην είδηση και στη ζημιά. Σε τέτοιες νύχτες μετράει ένα πράγμα. Υπάρχει κάποιος που ξέρει το συγκεκριμένο σύστημα και μπορεί να πάρει απόφαση;

Ποιος πρέπει να στέκεται πίσω από ένα project

Ο προγραμματιστής που έχει αναλάβει ένα site δεν χρειάζεται να ξέρει την PHP απέξω. Χρειάζεται να ξέρει πού τελειώνει η εφαρμογή και πού αρχίζει το μηχάνημα. Στην πράξη:

  • Ξέρει ποια έκδοση τρέχει αυτή τη στιγμή στον server και ποιος την ενημερώνει: το λειτουργικό, μια εικόνα Docker, το cPanel ή ο πάροχος του shared hosting.
  • Ξέρει ότι σε κάποια shared hosting, όπως με το CloudLinux, η διόρθωση μπαίνει αλλά ο αριθμός έκδοσης μένει ίδιος. Το «8.4.26» από μόνο του δεν λέει αν το site είναι ασφαλές. Αυτό το λένε η ημερομηνία του build και η ανακοίνωση του παρόχου.
  • Ξέρει αν το site τρέχει με mod_php ή με PHP-FPM, γιατί από αυτό εξαρτάται πόσο επείγει.
  • Ξέρει αν η έκδοση είναι 8.1 ή παλαιότερη. Τότε δεν υπάρχει επίσημο πακέτο και η επιλογή είναι αναβάθμιση ή κλείσιμο.
  • Έχει πρόσβαση στο DNS, στον server ή στον πίνακα του hosting, και μια σελίδα συντήρησης που βγάζει την PHP εκτός διαδικτύου.
  • Έχει την άδεια να κατεβάσει το site χωρίς να περιμένει ως το πρωί, όταν η διόρθωση αργεί.

Αφού περάσει η διόρθωση, ελέγχει ότι ο worker που εξυπηρετεί τους επισκέπτες τρέχει πράγματι τη νέα έκδοση και ότι η παλιά δεν έχει μείνει στη μνήμη. Αν το site έμεινε ανοιχτό μέσα στο παράθυρο των επιθέσεων, αλλάζει τους κωδικούς της βάσης, τα API keys και τα session secrets, και ελέγχει τα logs.

Από μια εβδομάδα γεμάτη τίτλους, κρατάει μόνο ό,τι αγγίζει το δικό του σύστημα. Δικό του GitLab σημαίνει αναβάθμιση σήμερα. Εγκατεστημένο LiteLLM, ή μια εικόνα που τραβάει πάντα την τελευταία έκδοση, σημαίνει καθάρισμα και αλλαγή κλειδιών. Φιλοξενία σε Zeabur ή Railway σημαίνει ότι κάθε μυστικό που ήταν αποθηκευμένο εκεί θεωρείται εκτεθειμένο και ότι ξεκινά η μετακόμιση. Τα υπόλοιπα τα διαβάζει και τα αφήνει στην άκρη.

Αυτή η δουλειά γίνεται πριν από την κρίση, μία φορά, με ηρεμία: τι τρέχει, πού φιλοξενείται, ποιος το ενημερώνει, πού είναι τα κλειδιά, πώς κατεβαίνει και πώς ξανανεβαίνει.

Όταν πίσω από το site δεν στέκεται κανείς

Ένα site που στήθηκε γρήγορα και παραδόθηκε μπορεί να δουλεύει μια χαρά για χρόνια. Το κενό της PHP όμως βρίσκεται ένα στρώμα πιο κάτω, στον server, εκεί που συνήθως δεν κοιτάζει κανείς μετά την παράδοση.

Τη νύχτα της 21ης Οκτωβρίου, για όποιον δεν έχει δει ποτέ το μηχάνημα, η συνηθισμένη διαδρομή είναι σύντομη. Βλέπει την είδηση. Ρωτάει ένα chatbot αν είναι εντάξει. Το chatbot δεν βλέπει τον server. Δεν ξέρει αν το site είναι σε shared hosting, σε VPS ή μέσα σε μια εικόνα που χτίστηκε πριν από μήνες, οπότε απαντά με γενικές οδηγίες. Ο άνθρωπος ενημερώνει τα πακέτα της εφαρμογής, βλέπει ότι η σελίδα ανοίγει και το θεωρεί λυμένο. Η PHP από κάτω παραμένει ίδια.

Συχνά δεν είναι καν σαφές ότι το app είναι γραμμένο σε PHP. Πολλά εργαλεία στήνουν WordPress ή Laravel χωρίς να το λένε καθαρά. Τα στοιχεία του hosting μπορεί να βρίσκονται σε ένα email του πρώτου μήνα. Το site δεν έχει κατέβει ποτέ δοκιμαστικά, άρα κανείς δεν ξέρει αν η σελίδα συντήρησης δουλεύει. Και στις έντεκα το βράδυ δεν υπάρχει δεύτερος άνθρωπος να ρωτήσεις.

Την επόμενη ώρα έρχεται η είδηση για το LiteLLM, για τη Zeabur, για ένα πιστοποιητικό. Χωρίς εικόνα για το τι είναι εγκατεστημένο και πού βρίσκονται τα κλειδιά, είτε κάθε τίτλος μοιάζει να σε αφορά, είτε όλοι μαζί μοιάζουν μακρινοί. Και οι δύο αντιδράσεις καταλήγουν στο ίδιο: ένα δημόσιο μηχάνημα χωρίς ιδιοκτήτη.

Η διαφορά φαίνεται στα projects με χρήστες, πληρωμές ή προσωπικά δεδομένα. Εκεί, το app που βγήκε στον αέρα μέσα σε ένα Σαββατοκύριακο χρειάζεται από την πρώτη μέρα έναν άνθρωπο που μπορεί να το κλείσει, να περάσει τη σωστή διόρθωση στο σωστό στρώμα και να το ξανανοίξει αφού το έχει ελέγξει ο ίδιος.

Τέτοια κενά θα συνεχίσουν να βρίσκονται, και όλο και πιο γρήγορα. Τα εργαλεία αλλάζουν. Η ευθύνη της στιγμής μένει σε έναν άνθρωπο. Κάθε project που στέκεται μόνο του στο διαδίκτυο χρειάζεται αυτόν τον άνθρωπο πίσω του, πριν από την επόμενη τέτοια νύχτα.

Πριν από την επόμενη νύχτα

Ξέρετε τι τρέχει πίσω από το site σας;

Κάνουμε έναν σύντομο έλεγχο: ποια έκδοση τρέχει, πού φιλοξενείται, ποιος το ενημερώνει, πού είναι τα κλειδιά και πώς κατεβαίνει με ασφάλεια αν χρειαστεί. Μετά σας λέμε τι διορθώνεται πρώτο.