Δεν χρειάστηκε να σπάσουν ούτε έναν server. Έκαναν το internet να πιστέψει ότι είναι αλλού.
Το απόγευμα της 28ης Αυγούστου, ώρα 20:57 UTC, ένας επιτιθέμενος άρχισε να διαφημίζει σε ολόκληρο το internet ένα δρομολόγιο που δεν του ανήκε: το 162.55.80.0/24, ένα IP block που φιλοξενείται στη Hetzner και εξυπηρετεί υποδομές της Softaculous — της εταιρείας πίσω από το Virtualizor, το control panel με το οποίο hosting providers σε όλο τον κόσμο δημιουργούν, πουλάνε και διαχειρίζονται VPS. Για 33 ώρες, μεγάλο μέρος της κίνησης προς τα update systems της Softaculous και προς το client/billing portal πήγαινε… αλλού. Όπου «αλλού» σημαίνει σε servers του επιτιθέμενου, με σωστό padlock στον browser.
Το αποτέλεσμα: ένα δηλητηριασμένο Virtualizor update package παραδόθηκε σε έναν περιορισμένο αριθμό installations που ζήτησαν update μέσα στο παράθυρο της επίθεσης. Το Virtualizor τρέχει σε hypervisor host nodes — δηλαδή ένα root compromise εδώ δεν είναι «ακόμα ένα server κάτω»: είναι ο εγκέφαλος που γεννά, κρατά και καταστρέφει ολόκληρα VPS. Η Softaculous δημοσίευσε επείγουσα ανακοίνωση, ζήτησε ανάκληση του ψεύτικου certificate, κυκλοφόρησε την έκδοση 3.2.9.9 με Security Analyzer και υποσχέθηκε κάτι που έπρεπε να υπήρχε από το 2010: κρυπτογραφική υπογραφή για όλα τα πακέτα.
BGP 101: γιατί το routing του internet είναι μια προφορική συμφωνία
Το Border Gateway Protocol είναι ο τρόπος με τον οποίο τα δίκτυα του πλανήτη — τα Autonomous Systems, τα AS — συμφωνούν ποιος φτάνει πού. Κάθε AS ανακοινώνει (announce) τα prefixes που «κατέχει» και οι γείτονές του διαδίδουν την ανακοίνωση. Δεν υπάρχει κεντρική αρχή που να επιβεβαιώνει ότι αυτό που λες ότι είναι δικό σου, πράγματι είναι δικό σου. Υπάρχει μια προαιρετική μηχανή επαλήθευσης (RPKI) που τα περισσότερα δίκτυα είτε δεν έχουν ενεργοποιήσει είτε την εφαρμόζουν μισή. Ο πίνακας δρομολόγησης γεμίζει με αμοιβαίες ανακοινώσεις και κερδίζει, κατά κανόνα, το πιο συγκεκριμένο prefix: ένα /24 νικάει ένα /16 που το περιέχει.
Αυτό σημαίνει ότι ένας επιτιθέμενος με πρόσβαση σε οποιοδήποτε AS (μέσω κακόβουλου ή απρόσεκτου provider, μέσω BGP session σε lease, ή απλώς παραβιάζοντας έναν φτωχά προστατευμένο router) μπορεί να δηλώσει: «εγώ εξυπηρετώ το 162.55.80.0/24». Αν η ανακοίνωση διαδοθεί αρκετά, ένα μέρος του παγκόσμιου κίνησης προς αυτό το prefix αρχίζει να καταλήγει σε εκείνον. Δεν χρειάζεται να πάρει ΟΛΗ την κίνηση — αρκεί ένα ποσοστό από τους χρήστες που την ώρα εκείνη ψάχνουν ακριβώς το update server. Η ιστορία αυτού του είδους των επιθέσεων έχει γραφτεί πολλές φορές: από το θρυλικό YouTube-Pakistan του 2008 μέχρι κλοπές crypto και κρατικές παρακολουθήσεις. Το Virtualizor περιστατικό απλώς το έφερε στο σπίτι κάθε hosting provider.
Το /24 που νικάει το /16
Το 162.55.80.0/24 ανήκει σε εύρος που φιλοξενείται στη Hetzner. Η Hetzner διαφημίζει ευρύτερα prefixes (π.χ. /16, /20). Ένας επιτιθέμενος που ανακοινώνει το πιο συγκεκριμένο /24 κερδίζει τη δρομολόγηση σε δίκτυα που κάνουν longest-prefix match — δηλαδή σχεδόν παντού. Δεν χρειάστηκε να «σπάσει» τη Hetzner: τη σκίασε.
Ο χάρτης των 33 ωρών
Το ψεύτικο certificate: το στέμμα ολόκληρης της επιχείρησης
Ένα BGP hijack από μόνο του θα ήταν ορατό: ο browser θα ούρλιαζε για certificate error, ο χρήστης θα το έκλεινε. Το εντυπωσιακό σε αυτό το περιστατικό είναι ότι ο επιτιθέμενος εξασφάλισε έγκυρο TLS certificate για τους τομείς της Softaculous — δηλαδή το padlock της εμπιστοσύνης εμφανιζόταν κανονικά στα θύματα. Πώς; Το πιο πιθανό σενάριο είναι το κλασικό: με τον έλεγχο της δρομολόγησης, το domain validation του certificate authority (π.χ. HTTP-01 challenge του ACME/Let's Encrypt) περνάει διαμέσου της κίνησης που ο ίδιος ο επιτιθέμενος αναχαιτίζει. Ζητάς certificate, ο CA στέλνει challenge στο domain, το challenge καταλήγει στον επιτιθέμενο λόγω hijack, αυτός απαντά, παίρνει πιστοποιητικό που ο browser θεωρεί απόλυτα νόμιμο.
Αυτό είναι το πραγματικό δίδαγμα για κάθε sysadmin: το padlock αποδεικνύει κρυπτογράφηση, όχι ιδιοκτησία. Όταν η δρομολόγηση είναι δηλητηριασμένη, όλα τα στρώματα που βασίζονται σε «η κίνηση φτάνει στον σωστό server» καταρρέουν μαζί — certificate included. Η Softaculous ανέφερε ότι το ψεύτικο πιστοποιητικό αναφέρθηκε για ανάκληση, αλλά η ανάκληση είναι πάντα μετά τη μόλυνση.
java-jre-update.service: το backdoor που ντύνεται updater
Το δηλητηριασμένο package παραδόθηκε σε έναν «μικρό αριθμό installations» — η ορολογία του vendor. Δεν έχουμε δημόσια τεχνική ανάλυση του payload, αλλά η Softaculous έδωσε το πιο σημαντικό fingerprint: ένα systemd unit με όνομα java-jre-update.service στο /etc/systemd/system. Το όνομα είναι επιλογή μηχανικού: «Java runtime updater» ακούγεται τόσο αθώο που σχεδόν κάθε Linux server έχει κάτι παρόμοιο να τρέχει. Στην πραγματικότητα, το unit είναι το εργαλείο επιμονής — ένας τρόπος ώστε το backdoor να ξανασηκώνεται σε κάθε boot, με root δικαιώματα.
Και εδώ είναι το βαθύ μέρος: το Virtualizor δεν τρέχει σε ένα συνηθισμένο web server. Τρέχει σε hypervisor host nodes — τους φυσικούς/εικονικούς hosts πάνω στους οποίους ζουν τα VPS των τελικών πελατών. Ένα root backdoor εδώ σημαίνει: πλήρης έλεγχος σε κάθε VM που φιλοξενεί ο κόμβος, πρόσβαση σε δίσκους, μνήμες, snapshots, backups, και τη δυνατότητα να κρύβεις την παρουσία σου από τα guest λειτουργικά. Από εκεί και πέρα, οι επιλογές του επιτιθέμενου είναι οι κλασικές: κλοπή δεδομένων tenants, ransomware σε επίπεδο host, ή «quiet» υποδομή για μελλοντικές επιθέσεις. Η Softaculous ζήτησε από τους operators να ελέγξουν για το marker, να κάνουν rotate τα API credentials και να ελέγξουν SSH keys, accounts, scheduled tasks και outbound connections.
Ο vendor δεν έχει logs — τα θύματα ναι
Επειδή η κίνηση εκτράπηκε, η Softaculous δεν μπορεί να πει με βεβαιότητα ποιοι έλαβαν το δηλητηριασμένο πακέτο, από πού και πότε. Η μόνη πηγή αλήθειας είναι τα ίδια τα θύματα: journalctl, auditd, file integrity. Αν δεν τα κρατάς, το περιστατικό είναι αόρατο — και για σένα και για τον vendor.
Γιατί τα update servers είναι τα crown jewels του internet
Αυτό δεν ήταν το πρώτο χτύπημα σε κανάλι ενημερώσεων — και δεν θα είναι το τελευταίο. Η λογική είναι σταθερή: δεν χρειάζεσαι να σπάσεις χίλιους servers, αρκεί να δηλητηριάσεις το one tap από το οποίο όλοι πίνουν:
- SolarWinds (2020): το θρυλικό supply chain attack — κακόβουλος κώδικας μέσα σε υπογεγραμμένες ενημερώσεις του Orion, ~18.000 οργανισμοί εκτεθειμένοι, μετέπειτα κατεύθυνση σε επιλεγμένα στόχους.
- Codecov (2021): διόρθωση script στο bash uploader — κλοπή credentials από CI/CD pipelines χιλιάδων εταιρειών.
- 3CX (2023): υπογεγραμμένο desktop VoIP app μολυσμένο downstream από θύμα του ίδιου του actor — double supply chain.
- XZ Utils (2024): ο «μαραθώνιος» — επί χρόνια infiltration στο open-source project, backdoor στα liblzma που σχεδόν φτάνει στο sshd. Έπεσε από μία υποψία ενός engineer.
- Kiali/npm/cargo γλίστρισματα (2024-2026): dependency confusion, poisoned crates, hijacked maintainer accounts — το ίδιο σχέδιο, μικρότερη κλίμακα.
Το Virtualizor περιστατικό προσθέτει ένα νέο κεφάλαιο: δεν χρειάστηκε καν να μπει ο επιτιθέμενος στην υποδομή του vendor. Χρειάστηκε μόνο να πείσει το internet ότι είναι η υποδομή του vendor. Το κόστος εκτέλεσης είναι χαμηλότερο από ένα APT campaign, το μέγεθος πλήγματος μπορεί να είναι παρόμοιο.
Τι έκανε η Softaculous — και τι έλειπε μέχρι χθες
Στην άμυνα της εταιρείας πρέπει να πούμε τα εξής: εντόπισε το πρόβλημα, δημοσίευσε ειδοποίηση με συγκεκριμένο IOC (το systemd unit), ζήτησε ανάκληση του ψεύτικου certificate, επανέφερε τη δρομολόγηση, και κυκλοφόρησε νέα έκδοση 3.2.9.9 με «Security Analyzer» στο admin panel. Δήλωσε επίσης ότι προχωρά σε κρυπτογραφική υπογραφή όλων των πακέτων και σε μεταφορά σε καλύτερη υποδομή.
Αλλά η πραγματική ερώτηση είναι: γιατί δεν υπήρχαν ήδη; Το update channel ενός προϊόντος που ελέγχει hypervisors δεν έχει κρυπτογραφική υπογραφή πακέτων το 2026. Το update traffic δεν πιστοποιούνταν με pinning ή έλεγχο authenticity πάνω από το TLS. Το BGP της υποδομής δεν προστατευόταν από RPKI validation στο side του vendor. Και το ίδιο το μέγεθος του παραθύρου — 33 ώρες — δείχνει ότι δεν υπήρχε monitoring για αλλαγές δρομολόγησης (BGPMon/RIPE RIS alerts θα το έπιαναν σε λεπτά). Το πακέτο των λύσεων είναι γνωστό εδώ και μια δεκαετία. Απλώς κανείς δεν το βάζει μέχρι να χτυπήσει το καμπανάκι.
Checklist: αν έχεις Virtualizor, VPS ή οποιοδήποτε self-hosted stack
- Ψάξε το marker: /etc/systemd/system/java-jre-update.service. Αν υπάρχει, απομόνωσε τον host από το δίκτυο πριν κάνεις οτιδήποτε άλλο.
- Rotate τα πάντα: API credentials του Virtualizor, SSH keys, passwords panel, tokens — και περιορισέ τα σε whitelists.
- Audit: μη εξουσιοδοτημένοι χρήστες, SSH authorized_keys, cron/systemd timers, outbound connections που δεν αναγνωρίζεις.
- Ανέβασε σε 3.2.9.9: η νέα έκδοση φέρνει Security Analyzer στο admin panel.
- Αν χρησιμοποίησες το client/billing portal μέσα στο παράθυρο: reset password, έλεγχος account activity, παρακολούθηση κινήσεων κάρτας.
- Γενικά για οποιοδήποτε update channel: υπηρεσίες που δεν κάνουν verify υπογραφές πακέτων είναι δολοφόνοι σε αναμονή. Απόφυγε vendors που δεν υπογράφουν — και απόφυγε RPKI-less hosting για κρίσιμη υποδομή.
Trust anchors: RPKI, signed updates και το τέλος της αφελής εμπιστοσύνης
Το BGP hijack της Softaculous είναι ένας μικρός, καθαρός δείκτης προς ένα μεγάλο πρόβλημα: το internet φτιάχτηκε για συνεργασία μεταξύ ομοτίμων που υποθέτουν καλή πίστη. Δουλεύει επειδή οι περισσότεροι παίζουν ωραία. Όταν κάποιος παίζει άσχημα, δεν υπάρχει «αστυνομία» — υπάρχει μόνο επαλήθευση που ή έγινε από πριν, ή δεν έγινε ποτέ. Οι τρεις στρώσεις που κρίνουν πια:
- RPKI (Route Origin Validation): κρυπτογραφική απόδειξη ότι αυτός που διαφημίζει ένα prefix έχει δικαίωμα να το διαφημίζει. Σταδιακά γίνεται υποχρεωτικό σε μεγάλα networks — αλλά παραμένει holey σε πολλά σημεία του πλανήτη.
- Signed updates: κάθε πακέτο φέρει υπογραφή που ελέγχεται από τον client με pinned keys — και το key management πρέπει να είναι εκτός του ίδιου channel που μπορεί να hijack-αρεί.
- Monitoring δρομολόγησης: υπηρεσίες τύπου BGPMon/RIPE RIS/Cloudflare Radar στέλνουν alert όταν το prefix σου αρχίζει να διαφημίζεται από AS που δεν είναι το δικό σου. Χωρίς αυτό, 33 ώρες περνούν σαν ανύδειτες.
Και κάτι τελευταίο που αφορά κάθε dev που στήνει update mechanism: το TLS από μόνο του δεν είναι supply chain security. Πιστοποιητικά κλέβονται (ή εκδίδονται κατά λάθος στους λάθος), domains παίρνονται, routing εκτρέπεται. Η μοναδική άμυνα που δεν εξαρτάται από το DNS/BGP/TLS stack είναι η κρυπτογραφική υπογραφή του περιεχομένου, με κλειδί που δεν ζει μέσα στο ίδιο σύστημα με το update server.
Το internet δέχεται ό,τι του πεις με αρκετή πειθαρχία στο BGP.
Το περιστατικό της Softaculous είναι σχολικό σε καθαρότητά του: κανένα zero-day, κανένα malware prize, κανένας insider. Απλώς κάποιος έμαθε να λέει στο internet ψέματα με δρομολόγηση και το internet τον πίστεψε για 33 ώρες — αρκετά για να τροφοδοτήσει root backdoors σε hypervisors. Αν είσαι hosting provider, sysadmin ή απλώς άνθρωπος που πατάει «check for updates», το μάθημα είναι ένα: το update channel είναι η πιο πολυτιμότερη γραμμή της αλυσίδας σου και προστατεύεται με υπογραφές, όχι με υποθέσεις.
Και το πιο ανησυχητικό; Η Softaculous είχε την τύχη ότι ο επιτιθέμενος χτύπησε «μικρό αριθμό installations». Η επόμενη εκδοχή αυτής της επίθεσης — σε vendor που δεν υπογράφει πακέτα και σε υποδομή χωρίς RPKI — δεν θα έχει την ίδια τύχη με το δείγμα. Το κόστος πρόληψης είναι μερικές μέρες δουλειάς. Το κόστος του «δεν πρόλαβα» μετράται σε ολόκληρα clusters.