Το πακέτο npm TanStack Query στοχεύθηκε μέσω παραβιασμένου εργαλείου δημιουργίας κώδικα OpenAPI

Τελευταία ενημέρωση: 08/29/2026
Συγγραφέας: C SourceTrail
  • Πολλαπλές παραβιασμένες εκδόσεις Το @7nohe/openapi-react-query-codegen ενέπνευσε κακόβουλο λογισμικό σε έργα χρησιμοποιώντας hooks που βασίζονται σε TanStack Query.
  • Ο επιτιθέμενος κακοποίησε ένα binding.gyp sandbox escape και σενάρια προεγκατάστασης για την εκτέλεση ενός ασαφούς φορτίου JavaScript κατά την εγκατάσταση npm.
  • Το ωφέλιμο φορτίο συλλέγει εκτεταμένα διαπιστευτήρια cloud και προγραμματιστών, εκτοπίζοντάς τα σε αποθετήρια GitHub που ελέγχονται από εισβολείς.
  • Τα κλεμμένα tokens χρησιμοποιούνται στη συνέχεια για να διαδώστε το κακόβουλο λογισμικό σε περισσότερα πακέτα npm και αποθετήρια GitHub, δηλητηριάζοντας την ευρύτερη αλυσίδα εφοδιασμού JavaScript.

Απεικόνιση πακέτου npm TanStack Query

Για τις ομάδες που βασίζονται στο TanStack Query ως το βασικό πακέτο npm για τη διαχείριση της κατάστασης του διακομιστή στο React και σε άλλα front-end frameworks, ένα πρόσφατο περιστατικό στην εφοδιαστική αλυσίδα δείχνει πόσο γρήγορα μπορεί να υπονομευθεί αυτή η εμπιστοσύνη. Ένα δημοφιλές συνοδευτικό εργαλείο, που δημιουργήθηκε ειδικά για τη δημιουργία ασφαλών για τύπους TanStack Query hooks από σχήματα OpenAPI, μετατράπηκε σε όπλο και προωθήθηκε στο μητρώο npm με ενσωματωμένο ένα εξελιγμένο φορτίο κακόβουλου λογισμικού.

Οι ερευνητές ασφαλείας περιγράφουν την επίθεση ως μια καμπάνια τύπου TeamPCP που επαναχρησιμοποιεί πολλά από τα θεατρικά και τεχνικά μοτίβα που παρατηρήθηκαν σε προηγούμενα περιστατικά. Αυτή τη φορά, ωστόσο, η εστίαση είναι αποκλειστικά στους προγραμματιστές που δημιουργούν ένα επίπεδο δεδομένων χρησιμοποιώντας το πακέτο @7nohe/openapi-react-query-codegen, ένα βοηθητικό πρόγραμμα που υπόσχεται να εξοικονομήσει χρόνο δημιουργώντας αυτόματα άγκιστρα TanStack Query αντί να γράφει τυποποιημένα αρχεία χειροκίνητα.

estado estable de javascript 2025
Σχετικό άρθρο:
Η Σταθερή Κατάσταση της Σύγχρονης JavaScript

Πώς μια γεννήτρια κώδικα TanStack Query έγινε ένα όχημα διανομής κακόβουλου λογισμικού

Το πακέτο που βρίσκεται στο επίκεντρο του περιστατικού, @7nohe/openapi-react-query-codegen , έχει σχεδιαστεί για να δέχεται μια προδιαγραφή OpenAPI και να εκπέμπει πλήρως πληκτρολογημένα hooks συμβατά με το TanStack Query. Με πάνω από 150,000 εβδομαδιαίες λήψεις, βρίσκεται στην κρίσιμη διαδρομή για πολλές ομάδες που τυποποιούν το TanStack Query για να ενορχηστρώνουν την ανάκτηση, την προσωρινή αποθήκευση και τον συγχρονισμό δεδομένων backend στα frontend που βασίζονται σε React.

Σύμφωνα με την εκ των υστέρων εξέταση, ο εισβολέας κατάφερε να θέσει σε κίνδυνο τόσο το πακέτο npm όσο και το αποθετήριο GitHub . Η παραβίαση επιτεύχθηκε εκμεταλλευόμενος ένα κενό ασφαλείας σε μία από τις ροές εργασίας του GitHub Actions του έργου, πράγμα που σημαίνει ότι οι κακόβουλες εκδόσεις εξακολουθούσαν να φαίνονταν να προέρχονται από τον νόμιμο αγωγό CI και να αποστέλλονται με έγκυρες βεβαιώσεις προέλευσης. Αυτές οι κρυπτογραφικές βεβαιώσεις, που συνήθως αποτελούν ισχυρό σήμα εμπιστοσύνης για τους χρήστες npm, έγιναν παραπλανητικές μόλις η ίδια η ροή εργασίας τέθηκε υπό εχθρικό έλεγχο.

Μέσα σε ένα στενό χρονικό διάστημα περίπου είκοσι λεπτών, ο εισβολέας δημοσίευσε δέκα δηλητηριασμένες εκδόσεις του πακέτου στο npm, καθεμία από τις οποίες περιείχε κώδικα σχεδιασμένο να εκτελείται κατά την εγκατάσταση και να εκκινεί ένα φορτίο κακόβουλου λογισμικού πολλαπλών σταδίων. Οι επηρεαζόμενες εκδόσεις καλύπτουν αρκετές δευτερεύουσες εκδόσεις και εκδόσεις patch, οι οποίες θα πρέπει πλέον να αντιμετωπίζονται ως μη αξιόπιστες.

  • @7nohe/openapi-react-query-codegen@0.5.4
  • @7nohe/openapi-react-query-codegen@0.5.5
  • @7nohe/openapi-react-query-codegen@1.6.3
  • @7nohe/openapi-react-query-codegen@1.6.4
  • @7nohe/openapi-react-query-codegen@2.2.1
  • @7nohe/openapi-react-query-codegen@2.2.2
  • @7nohe/openapi-react-query-codegen@3.0.3
  • @7nohe/openapi-react-query-codegen@3.0.4
  • @7nohe/openapi-react-query-codegen@0.0.0-365d4eb738d3146583431948d3ba6e27a32556be
  • @7nohe/openapi-react-query-codegen@0.0.0-ec7876d6c917dad516ba69bbfafc948b834bf0ab

Όλες αυτές οι παραλλαγές μοιράζονται την ίδια βασική πρόθεση: να εκμεταλλευτούν τη δημοτικότητα του πακέτου μεταξύ των χρηστών του TanStack Query για να επιτύχουν εκτέλεση κώδικα κατά την εγκατάσταση npm και στη συνέχεια να επεκταθούν στην ευρύτερη αλυσίδα εφοδιασμού JavaScript.

Το ωφέλιμο φορτίο «Trinitite» και τα κόλπα εκτέλεσης κατά τον χρόνο εγκατάστασης

Το κακόβουλο λογισμικό αυτοπροσδιορίζεται με την ετικέτα με την ειρωνεία «Trinitite: Χορηγείται από το Preview 2 Effects», μια αναφορά στο υαλώδες υλικό που σχηματίζεται από πυρηνικές δοκιμές. Παλαιότερα εσωτερικά ονόματα γραφής όπως is_it_this_simple.js υπονοούν την αδιάφορη στάση του επιτιθέμενου, αλλά η υποκείμενη τεχνική κάθε άλλο παρά απλοϊκή είναι.

Το κύριο άγκιστρο εκτέλεσης αρθρώνεται σε ένα binding.gyp sandbox escapeΣε κανονικά έργα Node.js, το binding.gyp χρησιμοποιείται για τη διαμόρφωση εγγενών πρόσθετων που μεταγλωττίζονται από το node-gyp, αλλά εδώ χρησιμοποιείται ως όπλο. Όταν το npm συναντά ένα αρχείο binding.gyp, το node-gyp αξιολογεί το conditions πεδίο χρησιμοποιώντας Python. Ο εισβολέας εισάγει μια προσεκτικά κατασκευασμένη έκφραση Python σε αυτό το πεδίο, εκμεταλλευόμενος την ιεραρχία κλάσεων της Python για να βγει από το αναμενόμενο sandbox και να εκτελέσει αυθαίρετες εντολές shell.

Στο παραβιασμένο πακέτο, η έκφραση συνθηκών είναι σε μεγάλο βαθμό ασαφής με Unicode και εξαγωνικές διαφυγέςΜόλις αποκωδικοποιηθεί, περνάει από το εσωτερικό της Python __subclasses__ δέντρο για να εντοπίσετε το catch_warnings η κλάση, το χρησιμοποιεί ως άξονα για να φτάσει __builtins__, εισάγει το os ενότητα και τελικά κλήσεις os.system() για την εκκίνηση του κύριου φορτίου με το Node. Το type Το πεδίο στο binding.gyp έχει δεκαεξαδική κωδικοποίηση ως none, επομένως δεν επιχειρείται γνήσια εγγενής δημιουργία. Η διαμόρφωση υπάρχει αποκλειστικά για την εισαγωγή μίας μόνο εντολής κελύφους.

Αυτή η προσέγγιση σημαίνει ότι το πακέτο μπορεί εκτέλεση κακόβουλου κώδικα κατά την εγκατάσταση ακόμη και αν δεν υπάρχει ρητή preinstall script που ορίζεται στο package.json. Δεν βασίζονται όλες οι εκδόσεις με δηλητηριασμένα στοιχεία σε αυτό ακριβώς το κόλπο. Δύο εκδόσεις προέκδοσης χρησιμοποιούν πιο απλά hooks προεγκατάστασης: η μία εκτελεί ένα script Node με όνομα nu.js απευθείας, ενώ κάποιος άλλος ανακτά το runtime του Bun μέσω wget διοχετεύεται σε bash και στη συνέχεια εκτελεί το εύστοχα ονομασμένο is_it_this_simple.jsΟι νεότερες εκδόσεις συνδυάζουν και τις δύο μεθόδους, στέλνοντας ένα κακόβουλο αρχείο binding.gyp. και a preinstall καταχώρηση που δείχνει στο ίδιο κύριο ωφέλιμο φορτίο JavaScript για πλεονασμό.

Επίπεδα συσκότισης και αποφυγή sandbox στο κύριο ωφέλιμο φορτίο JavaScript

Μόλις ενεργοποιηθεί το αρχικό αγκίστρι, η επίθεση περιστρέφεται σε ένα μεγάλο αρχείο JavaScript με το όνομα 3FWCvzduYZg.js , το οποίο βρίσκεται στον ριζικό κατάλογο του πακέτου npm. Με μέγεθος περίπου 5.4 MB και ελαχιστοποιημένο σε μία μόνο γραμμή, το σενάριο έχει σχεδιαστεί ώστε να είναι όσο το δυνατόν πιο αδιαφανές με μια ματιά και περαιτέρω ανάλυση δείχνει ότι προστατεύεται από πολλά ξεχωριστά επίπεδα κρυπτογράφησης και συσκότισης.

Το εξωτερικό στρώμα αποτελείται από ένα Πίνακας ακεραίων 1.6 εκατομμυρίων στοιχείων, αποκρυπτογραφήθηκε με ένα απλό XOR έναντι της σταθεράς 29. Αυτή η αποκρυπτογράφηση αποδίδει ένα δευτερεύον σενάριο του οποίου η δουλειά είναι να ανακτήσει το runtime του Bun ήσυχα, αποθηκεύοντάς το με ένα προσωρινό όνομα αρχείου με ένα trinnyyyy-XXXXX μοτίβο στον προσωρινό κατάλογο του συστήματος και, στη συνέχεια, χρησιμοποιήστε το Bun για να εκτελέσετε το πραγματικό φορτίο πυρήνα. Ο ίδιος ο πυρήνας είναι τυλιγμένος με κρυπτογράφηση AES‑128‑GCM και στη συνέχεια διέρχεται από προσαρμοσμένους κρυπτογράφους πάνω από τυπικές τεχνικές συσκότισης JavaScript, συμπεριλαμβανομένων εκείνων που εμφανίζονται σε δημοφιλή εργαλεία όπως το obfuscator.io.

Πλήρως αποσυμπιεσμένο, αυτό το βαθιά πολυεπίπεδο ωφέλιμο φορτίο αποκαλύπτει ένα μείγμα δυνατοτήτων: έναν συλλέκτη διαπιστευτηρίων που στοχεύει σε ένα ευρύ φάσμα πλατφορμών cloud και προγραμματιστών, ένα στοιχείο worm ικανό να διαδώσει τη μόλυνση σε νέους στόχους και ένα καταστροφικό κανάλι εντολών. Πριν ενεργοποιηθεί οποιοδήποτε από αυτά, το σενάριο εκτελεί μια σειρά από περιβαλλοντικούς ελέγχους για να αποφύγει τα sandboxes και τα εργαλεία ασφαλείας, τερματίζοντας αθόρυβα εάν πληρούνται ορισμένες ενδεικτικές συνθήκες.

Μεταξύ των ελέγχων είναι δείκτες τοπικών ρυθμίσεων, περιβάλλοντος και συστήματος αρχείων που συνήθως σχετίζονται με ερευνητικά περιβάλλοντα. Το κακόβουλο λογισμικό διακόπτεται εάν η τοπική ρύθμιση του συστήματος είναι η ρωσική, εάν υπάρχουν κατάλογοι που ανήκουν σε προϊόντα ασφαλείας τελικών σημείων όπως το CrowdStrike, το SentinelOne ή το Carbon Black, εάν ο τρέχων κατάλογος εργασίας ταιριάζει με διαδρομές που χρησιμοποιούνται από γνωστά εργαλεία σάρωσης της εφοδιαστικής αλυσίδας ή εάν οι μεταβλητές περιβάλλοντος περιέχουν ψεύτικα διαπιστευτήρια που χρησιμοποιούνται από σαρωτές ασφαλείας. Εξετάζει επίσης το GITHUB_REPOSITORY_OWNER και η παρουσία εργαλείων σκλήρυνσης όπως το StepSecurity harden-runner, αποφεύγοντας λογαριασμούς GitHub που είναι γνωστό ότι ανήκουν σε ερευνητές ασφαλείας.

Τι κλέβει το κακόβουλο λογισμικό από τα περιβάλλοντα ανάπτυξης που βασίζονται σε TanStack Query

Μόλις ολοκληρωθούν με επιτυχία οι έλεγχοι περιβάλλοντος, το κακόβουλο λογισμικό αρχίζει να συλλέγει διαπιστευτήρια με ένα ευρύ δίκτυο. Ενώ το αρχικό πακέτο διαμορφώνεται ως βοηθός για τους χρήστες του TanStack Query, η πραγματική επιφάνεια-στόχος εκτείνεται πολύ πέρα ​​από μια μεμονωμένη βιβλιοθήκη, αγγίζοντας σχεδόν κάθε επίπεδο της αλυσίδας εργαλείων και της στοίβας cloud ενός σύγχρονου προγραμματιστή JavaScript.

Από την πλευρά του προγραμματιστή, το ωφέλιμο φορτίο σαρώνει για Προσωπικά διακριτικά πρόσβασης GitHub σε πολλαπλές μορφές, συμπεριλαμβανομένων των κλασικών διακριτικών που ξεκινούν με gho or ghp και νεότερα λεπτομερή διακριτικά που ξεκινούν με github_pat_Στους δρομείς του GitHub Actions, ζητά επίσης διακριτικά OpenID Connect μέσω του τεκμηριωμένου ACTIONS_ID_TOKEN_REQUEST_TOKEN και ACTIONS_ID_TOKEN_REQUEST_URL μεταβλητές περιβάλλοντος, δίνοντας στον εισβολέα μια διαδρομή για να υποθέσει ταυτότητες φόρτου εργασίας αντί για απλώς στατικά μυστικά.

Στη συνέχεια, το σενάριο μετατρέπεται σε μητρώα κοινής γλώσσας. Διαβάζει npm, PyPI και διακριτικά RubyGems από αρχεία διαμόρφωσης όπως ~/.npmrc, σαρώνει για επιπλέον τοπικό έργο .npmrc αρχεία και επιχειρεί να επικυρώσει τα ανακαλυφθέντα διακριτικά φορέα npm καλώντας το /-/whoami τελικό σημείο στο δημόσιο μητρώο. Παρόμοια μοτίβα χρησιμοποιούνται για τα PyPI και RubyGems, εξορύσσουν δεδομένα ελέγχου ταυτότητας και επιβεβαιώνουν ότι κάθε διακριτικό μπορεί να επικοινωνήσει με επιτυχία με το αντίστοιχο μητρώο πριν από την εξαγωγή του.

Το αποτύπωμα στο cloud είναι ακόμη μεγαλύτερο. Στις υπηρεσίες Amazon Web Services, το κακόβουλο λογισμικό απαριθμεί μεταβλητές περιβάλλοντος όπως AWS_ACCESS_KEY_ID και AWS_SECRET_ACCESS_KEY, αναλύει ~/.aws/credentials και ~/.aws/configκαι υποβάλλει ερώτημα στην Υπηρεσία Μεταδεδομένων Παρουσίας EC2 στη διεύθυνση 169.254.169.254, προτιμώντας το IMDSv2 αλλά υποχωρώντας ανάλογα με τις ανάγκες. Για φόρτους εργασίας κοντέινερ, επικοινωνεί με το τελικό σημείο μεταδεδομένων ECS στο 169.254.170.2Οποιαδήποτε διαπιστευτήρια ή προσωρινά διακριτικά που ανακτά δοκιμάζονται σε σχέση με sts:GetCallerIdentity για επιβεβαίωση της εγκυρότητας πριν από την αναμονή για απέλαση.

Παρόμοια λογική υπάρχει και για άλλους παρόχους cloud. Το σενάριο μπορεί να συλλέξει Διαπιστευτήρια προγράμματος-πελάτη Azure και διαχειριζόμενες ταυτότητες, Συμπεριλαμβανομένων των AZURE_CLIENT_ID, AZURE_CLIENT_SECRET και AZURE_TENANT_IDκαι, στη συνέχεια, αποκτήστε πρόσβαση στο Azure Key Vault, στο Azure Resource Manager και στο Microsoft Graph μόλις ολοκληρωθεί η επαλήθευση. Για το Google Cloud, αναζητά GOOGLE_APPLICATION_CREDENTIALS αρχεία, ερωτήματα στον διακομιστή μεταδεδομένων GCP στη διεύθυνση metadata.google.internal και, όταν είναι δυνατόν, χρησιμοποιεί τα προκύπτοντα διακριτικά για να καλέσει το Google Secret Manager. Οι αναπτύξεις του HashiCorp Vault βρίσκονται επίσης στη λίστα: το ωφέλιμο φορτίο αναζητά διευθύνσεις και διακριτικά Vault μέσω μεταβλητών περιβάλλοντος και αρχείων διακριτικών και, στη συνέχεια, διερευνά το HTTP API του Vault για να απαριθμήσει τα προσβάσιμα μυστικά.

Πέρα από το cloud IAM, το κακόβουλο λογισμικό εκτελεί εκτεταμένες σάρωση συστήματος αρχείων χρησιμοποιώντας πάνω από 150 μοτίβα globΑναζητά ιδιωτικά κλειδιά SSH, διαμορφώσεις Docker, .env αρχεία, αποθήκες διαπιστευτηρίων Git, .npmrc και .pypirc αρχεία, διαπιστευτήρια Terraform και cargo, αρχεία ιστορικού shell, δεδομένα πορτοφολιού κρυπτονομισμάτων και καταλόγους διαμόρφωσης για εφαρμογές ανταλλαγής μηνυμάτων που χρησιμοποιούνται ευρέως όπως Signal, Telegram Desktop, Discord, Slack και Element. Ελέγχει επίσης για αρχεία διαμόρφωσης VPN από υπηρεσίες όπως NordVPN, ProtonVPN, CyberGhost, PIA και άλλες, μαζί με διακριτικά και τομείς για διαχειριστές δυαδικών αποθετηρίων όπως το JFrog Artifactory.

Αποδιήθηση μέσω αποθετηρίων GitHub και των υποβολών "meow meow meow"

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

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

Τα νεοσύστατα αποθετήρια έχουν ιδιότροπα, αυτόματα δημιουργημένα ονόματα αποτελείται από δύο χαρακτήρες από τη σειρά Touhou Project και έναν τυχαίο αριθμό, με αποτέλεσμα συνδυασμούς όπως cirno-marisa-74291 or reimu-kogasa-12048Οι περιγραφές τους έχουν την ίδια φράση «Trinitite: Sponsored by Preview 2 Effects» που εμφανίζεται στο payload, παρέχοντας έναν από τους λίγους σαφείς δείκτες για τους υπερασπιστές που προσπαθούν να αναγνωρίσουν αυτά τα αποθετήρια σε μεγάλη κλίμακα.

Τα κλεμμένα διαπιστευτήρια καταχωρούνται ως κρυπτογραφημένα αρχεία JSON μέσα σε ένα results/ κατάλογο, χρησιμοποιώντας ονόματα αρχείων που ξεκινούν με doubletrinnys- ακολουθούμενο από έναν μετρητή και μια χρονική σήμανση. Κάθε αρχείο περιέχει ένα envelope πεδίο που περιέχει την κρυπτογραφημένη δέσμη δεδομένων και ένα key πεδίο που περιέχει το ίδιο το κλειδί κρυπτογράφησης, τυλιγμένο περαιτέρω χρησιμοποιώντας το δημόσιο κλειδί RSA του εισβολέα. Με μια πρόχειρη ματιά, αυτά μοιάζουν με αυθαίρετα κρυπτογραφημένα blobs. Μόνο κάποιος με το αντίστοιχο ιδιωτικό κλειδί μπορεί να αντιστρέψει τη διαδικασία, επομένως ακόμη και αν βρεθούν τα αποθετήρια, το τα πραγματικά μυστικά παραμένουν αδιαφανή σε τρίτουςΤα μηνύματα υποβολής είναι συνήθως σύντομα και επιπόλαια, με συμβολοσειρές όπως «νιάου νιάου νιάου» να χρησιμοποιούνται επανειλημμένα.

Διάδοση τύπου σκουληκιού σε άλλα πακέτα npm και έργα GitHub

Μία από τις πιο ανησυχητικές πτυχές της καμπάνιας Trinitite είναι η ικανότητά της να επαναχρησιμοποιεί κλεμμένα tokens για να θέσει σε κίνδυνο πρόσθετα πακέτα και αποθετήρια . Αντί να περιορίζεται στο αρχικό πακέτο γεννήτριας κώδικα TanStack Query, το κακόβουλο λογισμικό συμπεριφέρεται σαν σκουλήκι, αναζητώντας συστηματικά τρόπους εξάπλωσης.

Με ένα έγκυρο διακριτικό npm, το payload υποβάλλει ερώτημα στο API npm για να απαριθμήσει όλα τα διακριτικά που σχετίζονται με τον λογαριασμό, επιλέγοντας το πιο προνομιούχο διακριτικό δημοσίευσης. Στη συνέχεια, εκτελεί αναζήτηση για κάθε πακέτο που ανήκει σε αυτόν τον διαχειριστή, κατεβάζει το υπάρχον tarball για το καθένα και εισάγει το ίδιο αρχείο escape sandbox binding.gyp και το κύριο αρχείο payload στα περιεχόμενα του πακέτου. Μετά τις τροποποιήσεις, δημοσιεύει μια νέα έκδοση στο npm με το όνομα του νόμιμου διαχειριστή, μετατρέποντας ουσιαστικά τα αξιόπιστα πακέτα σε νέους φορείς μόλυνσης . Παρόμοια συμπεριφορά εφαρμόζεται για τα PyPI και RubyGems μέσω των αντίστοιχων τελικών σημείων μεταφόρτωσης, με τους ελέγχους πιστοποιητικών TLS απενεργοποιημένους σε εξερχόμενα αιτήματα για την αποφυγή προβλημάτων καρφιτσώματος από την πλευρά του πελάτη.

Τα αποθετήρια GitHub αντιμετωπίζονται με συγκρίσιμο τρόπο. Όταν το κακόβουλο λογισμικό αποκτήσει ένα διακριτικό GitHub με επαρκές εύρος, παραθέτει κάθε προσβάσιμο αποθετήριο και κλάδο, παρακάμπτοντας μερικούς γνωστούς κλάδους αυτοματισμού, όπως αυτούς με το πρόθεμα release/, dependabot/, renovate/ or copilot/Για τους υπόλοιπους κλάδους, δεσμεύει ένα σύνολο προσεκτικά επιλεγμένων αρχείων που χρησιμεύουν τόσο ως backdoors όσο και ως hooks σε σύγχρονα εργαλεία ανάπτυξης.

Μεταξύ αυτών είναι backdoored VS Code και αρχεία διαμόρφωσης Claude, Συμπεριλαμβανομένων των .vscode/tasks.json, .claude/settings.json και σενάρια όπως setup.mjs που εκτελούνται όταν ένας προγραμματιστής ανοίγει ένα έργο σε ορισμένους επεξεργαστές με υποβοήθηση τεχνητής νοημοσύνης. Το κακόβουλο λογισμικό επίσης δημοσιεύει ένα ψεύτικο .github/workflows/codeql.yml ροή εργασίας που μεταμφιέζεται σε σάρωση ασφαλείας, ενώ παρέχει ένα άλλο κανάλι για εκτέλεση κώδικα εντός του CI. Πρόσθετα αρχεία στοχεύουν σε άλλους επεξεργαστές και εργαλεία, όπως το Gemini, το Cursor και διάφορους βοηθούς κώδικα, βοηθώντας τον εισβολέα να διατηρήσει την επιμονή του όπου κι αν εργάζονται οι προγραμματιστές.

Κάθε μία από αυτές τις υποβολές έχει συνταχθεί υπό την github-actions ταυτότητα, με μηνύματα που μοιάζουν με συνήθη συντήρηση, όπως "δουλειά: ενημέρωση εξαρτήσεων" και μια επισήμανση τρέιλερ skip-checks:true να ξεφύγουν από τους απαιτούμενους ελέγχους. Για μια πολυάσχολη ομάδα που σαρώνει τα αρχεία καταγραφής με μια ματιά, αυτές οι αλλαγές μπορούν εύκολα να εκληφθούν ως αβλαβείς ενημερώσεις αυτοματισμού.

Δείκτες παραβίασης για ομάδες που χρησιμοποιούν εργαλεία ερωτημάτων TanStack

Για οργανισμούς που βασίζονται στο TanStack Query και έχουν ενσωματώσει το @7nohe/openapi-react-query-codegen στη ροή εργασίας τους, ο εντοπισμός πιθανής έκθεσης ξεκινά με δείκτες έκδοσης και επιπέδου αρχείου που έχουν πλέον επισημάνει πολλές πηγές. Αυτές οι ενδείξεις μπορούν να βοηθήσουν στον εντοπισμό των έργων που ενδέχεται να έχουν εκτελέσει τον παραβιασμένο κώδικα κατά τα βήματα εγκατάστασης.

Οποιαδήποτε χρήση των επηρεαζόμενων εκδόσεων του @7nohe/openapi-react-query-codegen που αναφέρθηκαν προηγουμένως θα πρέπει να αντιμετωπίζεται ως ύποπτη, ειδικά εάν οι κατασκευές πραγματοποιήθηκαν σε κοινόχρηστη υποδομή CI ή σε φορητούς υπολογιστές προγραμματιστών με πρόσβαση σε ευαίσθητα διαπιστευτήρια. Συνιστάται στις ομάδες ασφαλείας να ελέγχουν τα lockfiles, τα ιστορικά του package.json και τα αρχεία καταγραφής κατασκευής για να επιβεβαιώσουν εάν αυτές οι εκδόσεις μεταφέρθηκαν ποτέ σε περιβάλλοντα παραγωγής ή σταδιακής προετοιμασίας.

Στο δίσκο, ένα βασικό σημάδι παραβίασης είναι η παρουσία του αρχείου 3FWCvzduYZg.js στη ρίζα του πακέτου . Οι ερευνητές έχουν καταγράψει πολλά hashes SHA‑256 που σχετίζονται με διαφορετικές ασαφείς εκδόσεις αυτού του σεναρίου, όλα συνδεδεμένα με την ίδια υποκείμενη λειτουργικότητα:

  • 8e5d1af68ca340ae0c6e8132cb00c686ec2d60502c1994d94ce353d1472ad5a3
  • b49afb7dba04cd99b357ce7c652c823a3707f28e130bd5c6645851a7adc030d6
  • 59370c67b54a0ccaedd265e2356f04540b2fba1e1845300ef6de4d5437d99380
  • 778d6f0058045d6a2ab9a7e1d3e3be8e7e6b4d9cc217d13949bf1dfbab759a7c
  • b24d121667f21f492cb9db34fbfd515d5922a8dd30b9c45215c7220abbb10ca8
  • e1f1162ece9a6e6ea21a20399cbf31c563a8149d433a68711f4223870c203d5a
  • b6012b2ff87f08f93ee53921c48db907ddbcf5461b03bb988083b01a36886237
  • 709af2fdeb50324229e94c44c679a0fab18bd8e17d3864405989c526cbb63ad8

Επιπλέον, πολλοί μολυσμένοι κεντρικοί υπολογιστές δημιουργούν προσωρινούς καταλόγους με ονόματα που ξεκινούν με trinnyyyy- ακολουθούμενο από μια σύντομη συμβολοσειρά τυχαίων αλφαριθμητικών χαρακτήρων στον προσωρινό φάκελο του συστήματος. Ενώ αυτό το μοτίβο από μόνο του δεν αποδεικνύει παραβίαση, σε συνδυασμό με ένα ύποπτο αρχείο binding.gyp και ένα από τα γνωστά hashes ωφέλιμου φορτίου, αυξάνει σημαντικά την πιθανότητα να έχει εκτελεστεί το κακόβουλο λογισμικό Trinitite σε αυτό το σύστημα.

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

Αναδύονται εξειδικευμένα εργαλεία και βοηθητικά προγράμματα ανοιχτού κώδικα που βρίσκονται μπροστά από τους διαχειριστές πακέτων npm, yarn, pnpm και σχετικών προγραμμάτων, ελέγχοντας τις εκδόσεις των πακέτων με βάση τις επιμελημένες ροές πληροφοριών πριν από την εγκατάσταση. Η ιδέα είναι να αναχαιτίζονται κακόβουλα ή ύποπτα πακέτα, ιδίως εκείνα που συνδέονται με περιστατικά όπως αυτό, πριν καν προσγειωθούν. node_modules, μειώνοντας τον κίνδυνο που μπορεί να εκθέσει έμμεσα μια παραβιασμένη βοηθητική βιβλιοθήκη Εφαρμογές που υποστηρίζονται από TanStack Query και τις σχετικές υποδομές τους.

Για τις ομάδες ανάπτυξης, αυτό το περιστατικό υπογραμμίζει πώς ένα φαινομενικά αβλαβές πακέτο ευκολίας - ένα που απλώς δημιουργεί πληκτρολογημένα hooks για το TanStack Query από μια προδιαγραφή OpenAPI - μπορεί να γίνει ένα ισχυρό διάνυσμα επίθεσης όταν ο αγωγός CI και το κανάλι διανομής του ανατρέπονται. Τα αμυντικά μέτρα πρέπει τώρα να επεκταθούν πέρα ​​από τον έλεγχο των κύριων εξαρτήσεων εφαρμογών, ώστε να συμπεριλάβουν τις γεννήτριες, τα CLI και τα σενάρια αυτοματισμού που διαμορφώνουν αθόρυβα τον τρόπο με τον οποίο χρησιμοποιούνται αυτές οι εξαρτήσεις καθημερινά.

Σχετικές αναρτήσεις: