Ένα ευρέως χρησιμοποιούμενο πακέτο Python μετατράπηκε αθόρυβα σε όπλο και οι περισσότεροι προγραμματιστές που χτυπήθηκαν δεν είχαν ιδέα ότι συνέβη.
Στις 27 Μαρτίου 2026, ένας παράγοντας απειλών γνωστός ως TeamPCP ανέβασε δύο κακόβουλες εκδόσεις του Telnyx Python SDK στο PyPI, το κύριο αποθετήριο όπου οι προγραμματιστές Python κατεβάζουν πακέτα λογισμικού.
Οι παραβιασμένες εκδόσεις, 4.87.1 και 4.87.2, ήταν ζωντανές για περίπου τέσσερις ώρες προτού παρέμβει η PyPI και βάλει και τις δύο σε καραντίνα.
Κατά τη διάρκεια αυτού του σύντομου παραθύρου, οποιοσδήποτε προγραμματιστής ή σύστημα που εκτελούσε μια απλή εγκατάσταση πακέτου θα μπορούσε να έχει μολυνθεί σιωπηλά, χωρίς προειδοποίηση, κανένα σφάλμα και κανένα ορατό σημάδι ότι κάτι πήγε στραβά.
Το πακέτο Telnyx δεν είναι μια μικρή ή σκοτεινή βιβλιοθήκη. Τραβάει περίπου 750.000 λήψεις κάθε μήνα, πράγμα που σημαίνει ότι η πιθανή ακτίνα έκρηξης από αυτήν την επίθεση εκτείνεται πολύ πέρα από τους άμεσους χρήστες σε κάθε έργο, αγωγό και υπηρεσία που εξαρτάται από αυτό. Αυτό που κάνει αυτή την επίθεση ιδιαίτερα ανησυχητική είναι το πόσο ακριβής ήταν.
Μόνο ένα αρχείο μέσα στο πακέτο άλλαξε. Όλα τα άλλα στο πακέτο ήταν byte-for-byte πανομοιότυπα με την καθαρή έκδοση.
Ο κακόβουλος κώδικας εκτελέστηκε τη στιγμή που οποιαδήποτε εφαρμογή εισήγαγε τη βιβλιοθήκη, απαιτώντας μηδενικά κλικ, μηδενική διαμόρφωση και μηδενική αλληλεπίδραση χρήστη.
Οι αναλυτές του Hexastrike εντόπισαν την επίθεση ως μέρος μιας ευρύτερης, ταχέως εξελισσόμενης καμπάνιας εφοδιαστικής αλυσίδας από την TeamPCP, μια ομάδα που συνδέεται με τον παλαιότερο παράγοντα απειλών TeamTNT.
Οι ερευνητές παρατήρησαν ότι η ίδια ομάδα είχε ήδη χτυπήσει τα Trivy από τα πακέτα Aqua Security, Checkmarx, LiteLLM και πάνω από 46 npm μέσα σε μόλις εννέα ημέρες.
Κάθε νέα επίθεση έδειχνε περισσότερη πολυπλοκότητα από την προηγούμενη και ο συμβιβασμός Telnyx είναι η πιο ολοκληρωμένη έκδοση που έχουν αναλύσει μέχρι στιγμής.
Η επίθεση ακολούθησε δομή τριών σταδίων. Πρώτον, το trojanized πακέτο ενεργοποίησε έναν φορτωτή συγκεκριμένης πλατφόρμας. Δεύτερον, αυτός ο φορτωτής πήρε ένα κρυφό ωφέλιμο φορτίο από έναν απομακρυσμένο διακομιστή, κρυμμένο μέσα σε ένα αρχείο ήχου WAV χρησιμοποιώντας στεγανογραφία.
Τρίτον, το αποκωδικοποιημένο ωφέλιμο φορτίο ανέπτυξε μια πλήρη συλλογή διαπιστευτηρίων που συνέλεγε αθόρυβα κλειδιά SSH, διαπιστευτήρια παρόχου cloud, μυστικά Kubernetes, ρυθμίσεις παραμέτρων βάσης δεδομένων, πορτοφόλια κρυπτονομισμάτων και αρχεία περιβάλλοντος πριν κρυπτογραφήσει τα πάντα και τα στείλει σε διακομιστή ελεγχόμενο από εισβολείς.
Το κακόβουλο λογισμικό λειτούργησε σε όλα τα μεγάλα λειτουργικά συστήματα και θα μπορούσε να εξαπλωθεί σε ολόκληρα συμπλέγματα Kubernetes, αναπτύσσοντας προνομιούχα pods σε κάθε κόμβο.
Πώς κατασκευάστηκε ο μηχανισμός μόλυνσης για να παραμένει κρυμμένος
Το σημείο εισόδου για ολόκληρη την επίθεση ήταν μια τροποποίηση μέσα σε ένα αρχείο που ονομάζεται _client.py. Όταν η Python φορτώνει τη βιβλιοθήκη Telnyx, εκτελεί αυτόματα κώδικα μέσα σε αυτό το αρχείο.
.webp.jpeg)
Το TeamPCP πρόσθεσε δύο κλήσεις λειτουργιών στο κάτω μέρος, setup() για συστήματα Windows και FetchAudio() για Linux και macOS. Και οι δύο λειτουργίες έλεγξαν πρώτα το λειτουργικό σύστημα και σταμάτησαν αθόρυβα εάν βρίσκονταν σε λάθος πλατφόρμα.
Κάθε πιθανό σφάλμα εντοπίστηκε και αγνοήθηκε σιωπηλά χρησιμοποιώντας έναν γενικό χειριστή εξαιρέσεων, πράγμα που σημαίνει ότι η εφαρμογή που εκτελούσε τη βιβλιοθήκη δεν θα κολλούσε ποτέ ή δεν θα έστελνε ειδοποίηση.
Για να κρύψει τι έκαναν στην πραγματικότητα αυτές οι λειτουργίες, ο εισβολέας τύλιξε κάθε ευαίσθητη συμβολοσειρά μέσα σε ένα βοηθό κωδικοποίησης base64. Οι διευθύνσεις URL, οι διαδρομές φακέλων, τα ονόματα αρχείων και οι κεφαλίδες ήταν όλα κωδικοποιημένα, ώστε μια γρήγορη ματιά στον κώδικα δεν θα αποκάλυπτε την επίθεση.
Μόλις αποκωδικοποιηθεί, η διαδρομή των Windows κατέβασε ένα αρχείο που ονομάζεται hangup.wav από διακομιστή εντολών και ελέγχου στο 83.142.209.203:8080. Αυτό το αρχείο δεν ήταν στην πραγματικότητα ήχος.
Ήταν ένα έγκυρο κοντέινερ WAV που έκρυβε ένα εκτελέσιμο δυαδικό αρχείο μέσα στα πλαίσια ήχου του χρησιμοποιώντας στεγανογραφία.
Το δυαδικό αρχείο εξήχθη, αποκωδικοποιήθηκε χρησιμοποιώντας ένα κλειδί XOR και εγγράφηκε στον φάκελο εκκίνησης των Windows με το όνομα msbuild.exeένα όνομα δανεισμένο από ένα νόμιμο εργαλείο της Microsoft για αποφυγή υποψιών.
Ξεκινούσε αθόρυβα χωρίς ορατό παράθυρο και εκτελούσε αυτόματα κάθε φορά που ο χρήστης συνδεόταν.

Σε Linux και macOS, η προσέγγιση ήταν διαφορετική αλλά εξίσου μυστική. Αντί να απορρίψει ένα αρχείο, ο κώδικας αποκωδικοποίησε ένα μεγάλο ωφέλιμο φορτίο Python που ήταν αποθηκευμένο σε μια μεταβλητή και το έτρεξε σε μια αποσπασμένη θυγατρική διαδικασία.
Αυτή η διαδικασία συνέχισε να εκτελείται ακόμη και μετά το κλείσιμο της γονικής εφαρμογής. Κατέβασε ένα δεύτερο αρχείο WAV που ονομάζεται ringtone.wavέβγαλε τον κρυφό μηχανισμό συγκομιδής Python από τα δεδομένα ήχου και τον έτρεξε εξ ολοκλήρου στη μνήμη, χωρίς ποτέ να γράψει το σενάριο στο δίσκο.
Μόλις η θεριζοαλωνιστική μηχανή ολοκλήρωσε τη συλλογή των διαπιστευτηρίων, τα αποτελέσματα κρυπτογραφήθηκαν με AES-256-CBC και το κλειδί συνεδρίας περιτυλίχθηκε χρησιμοποιώντας ένα δημόσιο κλειδί RSA-4096 με σκληρό κώδικα. Αυτό σήμαινε ότι μόνο ο εισβολέας μπορούσε να αποκρυπτογραφήσει τα κλεμμένα δεδομένα.
Στη συνέχεια, όλα ομαδοποιήθηκαν σε ένα αρχείο και στάλθηκαν στον διακομιστή του εισβολέα χρησιμοποιώντας ένα αίτημα HTTP POST με την κεφαλίδα X-Filename: tpcp.tar.gzμια υπογραφή που εμφανίζεται σε κάθε γνωστή καμπάνια TeamPCP και χρησιμεύει ως ισχυρός δείκτης ανίχνευσης σε επίπεδο δικτύου.
Οι οργανισμοί θα πρέπει να αντιμετωπίζουν οποιαδήποτε εγκατάσταση των εκδόσεων 4.87.1 ή 4.87.2 ως επιβεβαιωμένη παραβίαση και να ξεκινούν αμέσως την αντιμετώπιση περιστατικών.
Όλα τα διαπιστευτήρια που είναι προσβάσιμα από τα επηρεαζόμενα συστήματα πρέπει να εναλλάσσονται, συμπεριλαμβανομένων των κλειδιών SSH, των διαπιστευτηρίων AWS, GCP και Azure, των διακριτικών Kubernetes, των διαπιστευτηρίων Docker, των κωδικών πρόσβασης βάσης δεδομένων, των κλειδιών API και τυχόν μυστικών που είναι αποθηκευμένα σε αρχεία περιβάλλοντος.
Η απλή απεγκατάσταση του πακέτου δεν αφαιρεί την επίμονη κερκόπορτα. Στο Linux, το αρχείο ~/.config/sysmon/sysmon.py και η συσχετισμένη του υπηρεσία systemd πρέπει να αφαιρεθεί με μη αυτόματο τρόπο.
Στα Windows, msbuild.exe στον φάκελο Εκκίνηση και το κρυφό .lock αρχείο πρέπει να διαγραφεί. Σε περιβάλλοντα Kubernetes, ονομάζονται τυχόν pods node-setup-* σε kube-system θα πρέπει να ελεγχθεί και να αφαιρεθεί και κάθε κόμβος θα πρέπει να ελεγχθεί για μια απροσδόκητη υπηρεσία systemd με όνομα sysmon.service.
Οι προγραμματιστές θα πρέπει επίσης να καρφιτσώνουν όλες τις εξαρτήσεις σε ακριβείς εκδόσεις, να χρησιμοποιούν lockfiles, να ενεργοποιούν τον έλεγχο ταυτότητας δύο παραγόντων σε λογαριασμούς PyPI, να χρησιμοποιούν διαπιστευτήρια μικρής διάρκειας όπου είναι δυνατόν, να αποφεύγουν την αποθήκευση μυστικών σε .env αρχεία στο δίσκο και αποκλείστε τις εξερχόμενες συνδέσεις σε 83.142.209.203, checkmarx.zoneκαι το ευρύτερο 83.142.209.0/24 υποδίκτυο σε επίπεδο τείχους προστασίας.
