- Στις 4 Αυγούστου 2026, ένας αυτοδιαδιδόμενος ιός τύπου worm με το όνομα ChainDrop έθεσε σε κίνδυνο πάνω από 400 πακέτα npm, συμπεριλαμβανομένων των keyv και flat-cache, μέσα σε τέσσερις ώρες.
- Η επίθεση χρησιμοποίησε κλεμμένα διαπιστευτήρια GitHub για να δημοσιεύσει κακόβουλες εκδόσεις με έγκυρη προέλευση, καθιστώντας τες αδιαχώριστες από τις νόμιμες κυκλοφορίες.
- Το payload κλέβει διαπιστευτήρια, απομακρύνει δεδομένα μέσω C2 που βασίζεται στο Ethereum και αναδημοσιεύει μολυσμένα πακέτα χρησιμοποιώντας κλεμμένα tokens npm.
- Οι οργανισμοί πρέπει να ελέγχουν τα αρχεία κλειδώματος, να εναλλάσσουν τα διαπιστευτήρια και να καταργούν τους μηχανισμούς διατήρησης για να μετριάσουν τον αντίκτυπο.

Το οικοσύστημα npm συγκλονίζεται από μία από τις πιο επιθετικές επιθέσεις στην εφοδιαστική αλυσίδα που έχουν παρατηρηθεί ποτέ. Στις 4 Αυγούστου 2026, ένα worm με την ονομασία ChainDrop διέλυσε το μητρώο, δηλητηριάζοντας εκατοντάδες πακέτα σε λιγότερο από τέσσερις ώρες. Η επίθεση αξιοποίησε έναν παραβιασμένο λογαριασμό GitHub για να δημοσιεύσει κακόβουλες εκδόσεις ευρέως χρησιμοποιούμενων βιβλιοθηκών όπως το keyv και το flat-cache, οι οποίες μαζί αντιπροσωπεύουν εκατοντάδες εκατομμύρια εβδομαδιαίες λήψεις. Αυτό που καθιστά αυτό το περιστατικό ιδιαίτερα ανησυχητικό είναι ότι οι κακόβουλες εκδόσεις έφεραν έγκυρη προέλευση SLSA, καθιστώντας τες να φαίνονται απολύτως νόμιμες σε αυτοματοποιημένους ελέγχους ασφαλείας.
Ερευνητές ασφαλείας από τις StepSecurity, Unit 42, Sonatype και Aikido αγωνίζονται να αναλύσουν τον ιό τύπου worm και να περιορίσουν την εξάπλωσή του. Το αρχικό κύμα έπληξε το οικοσύστημα του jaredwray, αλλά ο ιός τύπου worm επεκτάθηκε γρήγορα σε άλλους συντηρητές και οργανισμούς, συμπεριλαμβανομένων των ServiceTitan, Qlik και Deliveroo. Από την τελευταία ενημέρωση, ο αριθμός των παραβιασμένων πακέτων συνεχίζει να αυξάνεται, με νέες μολύνσεις να εμφανίζονται κάθε λίγα λεπτά. Δεν πρόκειται απλώς για άλλη μια εκστρατεία καταπάτησης τυπογραφικών λαθών. Είναι ένας εξελιγμένος, αυτοδιαδιδόμενος ιός τύπου worm που κλέβει διαπιστευτήρια και τα χρησιμοποιεί για να αναδημοσιεύσει τον εαυτό του στο μητρώο npm.
Η Επίθεση με μια Ματιά

Η επίθεση ξεκίνησε όταν ο λογαριασμός GitHub του Jared Wray, συντηρητή του keyv και των σχετικών πακέτων, παραβιάστηκε. Ο εισβολέας προώθησε κακόβουλες υποβολές απευθείας στον κύριο κλάδο και διέκοψε νέες κυκλοφορίες, οι οποίες στη συνέχεια δημοσιεύονταν στο npm μέσω της δικής του έμπιστης ροής εργασίας δημοσίευσης του έργου. Αυτό σήμαινε ότι οι δηλητηριασμένες εκδόσεις είχαν έγκυρες βεβαιώσεις προέλευσης SLSA , μια λειτουργία στην οποία πολλές ομάδες βασίζονται ως σήμα ασφαλείας. Ωστόσο, η προέλευση αποδεικνύει μόνο ποια υποβολή δημιουργήθηκε, όχι εάν η υποβολή ήταν εξουσιοδοτημένη. Ο εισβολέας τοποθέτησε επίσης ψεύτικα αρχεία δοκιμών και τροποποιημένα σενάρια έκδοσης για να διασφαλίσει ότι οι κακόβουλες εκδόσεις έγιναν η πιο πρόσφατη ετικέτα dist-tag.
Τα κακόβουλα πακέτα περιείχαν ένα preinstall script που εκτελούσε ένα dropper που ονομάζεται setup.mjs. Αυτό το dropper κατέβασε το νόμιμο runtime Bun JavaScript από το GitHub και το χρησιμοποίησε για να εκτελέσει ένα θολό payload 727 KB με το όνομα Math_Symbol.js. Το payload ήταν ένα πλήρες worm που συνέλεγε διαπιστευτήρια από το σύστημα του θύματος, συμπεριλαμβανομένων npm tokens, GitHub tokens, cloud credentials, SSH keys, ακόμη και διαμορφώσεις εργαλείων AI. Στη συνέχεια, διήγαγε τα δεδομένα σε έναν διακομιστή εντολών και ελέγχου, το οποίο επιλύθηκε μέσω ενός έξυπνου συμβολαίου Ethereum - μιας τεχνικής γνωστής ως EtherHiding.
Επηρεαζόμενα πακέτα και πεδίο εφαρμογής

Το αρχικό κύμα στόχευσε 11 πακέτα στο οικοσύστημα jaredwray, συμπεριλαμβανομένων των keyv@6.0.0, flat-cache@6.1.24 και file-entry-cache@11.1.6. Αυτά τα πακέτα είναι μεταβατικές εξαρτήσεις αμέτρητων έργων, από το ESLint έως το cache-manager. Το worm χρησιμοποίησε στη συνέχεια κλεμμένα διαπιστευτήρια για να αναδημοσιεύσει 433 επιπλέον πακέτα, ανεβάζοντας το σύνολο σε 444 πακέτα και 2,212 εκδόσεις μέσα στις πρώτες ώρες. Μεταγενέστερες αναφορές από τις Sonatype και Aikido υποδηλώνουν ότι ο αριθμός έχει αυξηθεί ακόμη περισσότερο, με πάνω από 1,000 πακέτα να έχουν επηρεαστεί μέχρι τη στιγμή που η σκόνη κατακάθισε.
Το δεύτερο κύμα έπληξε πακέτα από οργανισμούς όπως οι @servicetitan, @qlik, @onereach και @deliveroo, υποδεικνύοντας ότι το worm είχε μετακινηθεί από δημόσια εργαλεία προγραμματιστών σε εταιρικά build pipelines. Οι επιτιθέμενοι δημιούργησαν επίσης δημόσια αποθετήρια με ονόματα με θέμα το Dune για να σκηνοθετήσουν τα εξαγόμενα δεδομένα και τοποθέτησαν μηχανισμούς persistence σε καταλόγους .vscode και .claude για να μολύνουν ξανά τους προγραμματιστές που άνοιγαν τα παραβιασμένα αποθετήρια.
Πώς λειτουργεί το σκουλήκι ChainDrop
Η αλυσίδα επίθεσης είναι ένα masterclass στο να ζεις από τη γη. Το preinstall script εκτελείται πριν από την εγκατάσταση οποιασδήποτε εξάρτησης, επομένως το worm εκτελείται με τα δικαιώματα του χρήστη. Το dropper ελέγχει αν το Bun υπάρχει ήδη. Εάν όχι, κατεβάζει ένα νόμιμο δυαδικό αρχείο Bun από το GitHub. Αυτό κάνει την κίνηση δικτύου να φαίνεται ακίνδυνη, καθώς προέρχεται από το github.com. Το ωφέλιμο φορτίο δεύτερου σταδίου στη συνέχεια αποσυνδέεται ως διεργασία παρασκηνίου και ξεκινά τη βρώμικη δουλειά του.
Μία από τις πιο χαρακτηριστικές τεχνικές είναι η απόξεση μνήμης από τον runner . Το payload εκτελεί έναν βοηθό Python που διαβάζει τη μνήμη της διεργασίας GitHub Actions Runner.Worker, αναζητώντας μυστικά που εισάγονται στη ροή εργασίας. Αυτό του επιτρέπει να καταγράφει διακριτικά OIDC και άλλα εφήμερα διαπιστευτήρια που διαφορετικά θα εξαφανίζονταν όταν ολοκληρώνεται η εργασία. Το worm χρησιμοποιεί επίσης έναν διακόπτη kill για ρωσικές τοπικές ρυθμίσεις, τερματίζοντας ομαλά εάν η γλώσσα συστήματος είναι τα ρωσικά, μια κοινή τακτική για την αποφυγή στόχευσης χωρών της ΚΑΚ.
Το ωφέλιμο φορτίο περιλαμβάνει μια πλήρη μηχανή δημοσίευσης npm. Απαριθμεί όλα τα πακέτα που μπορεί να δημοσιεύσει το θύμα, κατεβάζει το τρέχον tarball, εισάγει το κακόβουλο σενάριο προεγκατάστασης και το ωφέλιμο φορτίο και αναδημοσιεύει το πακέτο με μια βελτιωμένη έκδοση. Δημιουργεί ακόμη και τα δικά του πακέτα προέλευσης Sigstore και SLSA, κάνοντας τις κακόβουλες εκδόσεις να φαίνονται νόμιμα κατασκευασμένες. Αυτός ο μηχανισμός αυτοδιάδοσης είναι που επέτρεψε στο worm να εξαπλωθεί τόσο γρήγορα σε άσχετους οργανισμούς.
Δείκτες συμβιβασμού
Εάν εγκαταστήσατε κάποια από τις εκδόσεις που επηρεάζονται, υποθέστε ότι το σύστημά σας έχει παραβιαστεί. Αναζητήστε αυτές τις ενδείξεις:
- Αρχεία με ονόματα setup.mjs, Math_Symbol.js ή math_init.js στους καταλόγους node_modules.
- Μη αναμενόμενα δυαδικά αρχεία Bun στο σύστημά σας, ειδικά αν δεν έχετε εγκαταστήσει ποτέ το Bun.
- Τροποποιήσεις στο .claude/settings.json ή στο .vscode/tasks.json που αναφέρουν το setup.mjs.
- Εξερχόμενες συνδέσεις προς npm-cache.com ή awqhnjewqjkl.icu ή κλήσεις Ethereum RPC για σύμβαση 0xE1f2395ee43e45A1556EC6438a88c31B83493103.
- Νέα αποθετήρια GitHub με περιγραφές όπως «Shai-Hulud: Here We Go Again» ή ονόματα με θέμα τους Dune.
Ελέγξτε επίσης για την παρακολούθηση διακριτικών που έχει εγκατασταθεί μετά την αφαίρεση: ~/.local/bin/gh-token-monitor.sh, ~/.config/gh-token-monitor/ και υπηρεσίες systemd ή LaunchAgent. Το worm εγκαθιστά αυτό για να τιμωρήσει την εναλλαγή διαπιστευτηρίων ενεργοποιώντας ένα ωφέλιμο φορτίο εισβολέα όταν το κλεμμένο διακριτικό ανακληθεί.
Μετριασμός και Ανάκαμψη
Εάν επηρεαστείτε, δράστε γρήγορα. Αρχικά, απομονώστε το μηχάνημα και διατηρήστε τα αρχεία καταγραφής. Στη συνέχεια, εναλλάξτε όλα τα διαπιστευτήρια που υπήρχαν στο σύστημα, συμπεριλαμβανομένων των διακριτικών npm, των PAT GitHub, των κλειδιών cloud και των κλειδιών SSH. Αφαιρέστε την οθόνη διακριτικών πριν από την εναλλαγή, καθώς θα ενεργοποιηθεί εάν ανακαλέσετε το διακριτικό. Στη συνέχεια, καθαρίστε τα αρχεία κλειδώματος και καρφιτσώστε τα σε γνωστές εκδόσεις. Για keyv, flat-cache και file-entry-cache, χρησιμοποιήστε παρακάμψεις για να αποκλείσετε τις κακόβουλες εκδόσεις. Τέλος, επανεγκαταστήστε με –ignore-scripts για να αποτρέψετε την εκτέλεση τυχόν καθυστερημένων hooks εγκατάστασης.
Για τους αγωγούς CI/CD, ελέγξτε τα αρχεία καταγραφής για τυχόν εγκαταστάσεις που επιλύσαν τις επηρεαζόμενες εκδόσεις κατά τη διάρκεια του παραθύρου έκθεσης. Αντιμετωπίστε οποιονδήποτε εκτελέσιμο που εγκατέστησε ένα δηλητηριασμένο πακέτο ως παραβιασμένο και εναλλάξτε όλα τα μυστικά στοιχεία που είναι διαθέσιμα για αυτήν την εργασία. Επίσης, ελέγξτε τους οργανισμούς GitHub για μη αναμενόμενες ροές εργασίας με την ονομασία "Εκτέλεση Copilot" ή αντικείμενα με την ονομασία "format-results", τα οποία αποτελούν σημάδια του ξεπλύματος μυστικών πληροφοριών από τον ιό τύπου worm.
Η εις βάθος άμυνα είναι ζωτικής σημασίας. Χρησιμοποιήστε λίστες επιτρεπόμενων εξόδων σε CI runners για να εμποδίσετε το dropper να ανακτήσει το Bun. Εφαρμόστε πολιτικές αναμονής που απαιτούν τα πακέτα να είναι λίγων ημερών πριν από την υιοθέτησή τους. Και μην βασίζεστε αποκλειστικά στην προέλευση - δεν αποτελεί εγγύηση ασφάλειας. Η καλύτερη άμυνα είναι η ελαχιστοποίηση της χρήσης σεναρίων εγκατάστασης και η παρακολούθηση για ανώμαλη συμπεριφορά.
Καθώς η έρευνα συνεχίζεται, ο αριθμός των πακέτων που έχουν προσβληθεί εξακολουθεί να αυξάνεται. Η ικανότητα του worm να εναλλάσσει την υποδομή C2 μέσω μίας μόνο συναλλαγής Ethereum το καθιστά ιδιαίτερα ανθεκτικό. Οι ομάδες ασφαλείας θα πρέπει να παρακολουθούν το έξυπνο συμβόλαιο για αλλαγές και να παραμένουν ενημερωμένες σχετικά με νέους δείκτες. Το μητρώο npm έχει αρχίσει να αφαιρεί κακόβουλες εκδόσεις, αλλά ο καθαρισμός βρίσκεται σε εξέλιξη.
Αυτό το περιστατικό αποτελεί μια έντονη υπενθύμιση ότι το οικοσύστημα ανοιχτού κώδικα είναι τόσο ασφαλές όσο ο πιο αδύναμος κρίκος του. Ένας μόνο παραβιασμένος λογαριασμός διαχειριστή μπορεί να οδηγήσει σε μια μαζική επίθεση στην εφοδιαστική αλυσίδα. Το σκουλήκι ChainDrop αποτελεί μια κλήση αφύπνισης για τους προγραμματιστές και τους οργανισμούς να υιοθετήσουν ισχυρότερες πρακτικές ασφαλείας, όπως έλεγχο ταυτότητας πολλαπλών παραγόντων, διακριτικά με τα λιγότερα δικαιώματα και συνεχή παρακολούθηση των εξαρτήσεων.