FauxUV: Ψεύτικα πακέτα PyPI uv που ανοίγουν τον Jupyter στον Ιστό

FauxUV: ψεύτικοι βοηθοί PyPI uv που ανοίγουν έναν μη εξουσιοδοτημένο διακομιστή Jupyter στο διαδίκτυο

TL? DR

Ένα σύμπλεγμα πακέτων PyPI δανείστηκε το όνομα του uv, ο γρήγορος, εξαιρετικά δημοφιλής διαχειριστής πακέτων Python που βασίζεται σε Rust, για να παρουσιάζονται ως βοηθοί uv. Δεν προσφέρουν σχεδόν καμία πραγματική λειτουργικότητα. Αυτό που μεταφέρουν αντ' αυτού είναι ένα ωφέλιμο φορτίο των Windows που αντέχει ένα Διακομιστής JupyterLab με απενεργοποιημένο έλεγχο ταυτότητας και, σε νεότερες εκδόσεις, το δημοσιεύει στο δημόσιο διαδίκτυο μέσω μιας αντίστροφης σήραγγας.

Αυτή είναι όλη η ιστορία σε μια γραμμή: ένα όνομα αξιόπιστου εργαλείου ως δέλεαρ και το JupyterLab ως μηχανή εκτέλεσης απομακρυσμένου κώδικα. Ένας διακομιστής Jupyter εκτελεί οποιονδήποτε κώδικα πληκτρολογείτε σε ένα μηebook Κελί. Ένα κελί που ξεκινά με ένα κενό διακριτικό και συνδέεται με κάθε διεπαφή δικτύου είναι ένας ανοιχτός διερμηνέας που μπορεί να οδηγήσει οποιοσδήποτε μπορεί να φτάσει στη θύρα.

Παρακολουθούμε το σύμπλεγμα ως Ψεύτικη υπεριώδης ακτινοβολίαΤα δύο πακέτα που εξετάστηκαν είναι moon-uv (0.0.1-0.0.16) και my-magic-uv-helper (0.0.1), δημοσιεύτηκε από τον ίδιο χειριστή και ήταν διαθέσιμο στο PyPI κατά τη στιγμή της ανάλυσης.

ΟικοσύστημαPyPI
Πακέταmoon-uv (0.0.1-0.0.16), my-magic-uv-helper (0.0.1)
Πλατφόρμα-στόχοςWindows
Βασική συμπεριφοράΜη εξουσιοδοτημένος διακομιστής JupyterLab, δημοσιευμένος στο διαδίκτυο μέσω αντίστροφης σήραγγας
Κατάχρηση νόμιμων εργαλείωνuv, JupyterLab, cloudflared, Pinggy

Το δόλωμα: ένα όνομα που ήδη εμπιστεύεστε

uv είναι ένα από τα πιο εγκατεστημένα εργαλεία Python των τελευταίων δύο ετών, επομένως «ένας βοηθός για uv«είναι ένα πακέτο που εγκαθιστά ένας προγραμματιστής χωρίς δεύτερη σκέψη. Η FauxUV επενδύει την αξιοπιστία της εξ ολοκλήρου σε αυτό το όνομα. Τα πακέτα τυλίγουν το γνήσια uv πρόγραμμα εγκατάστασης από την Astral — οι διευθύνσεις URL στο ωφέλιμο φορτίο δείχνουν σε πραγματικούς, αξιόπιστους κεντρικούς υπολογιστές — επομένως μια γρήγορη ματιά δεν βλέπει τίποτα άλλο παρά αξιόπιστες αναφορές. Κανένα από τα πακέτα δεν προσθέτει στην πραγματικότητα uv λειτουργικότητα· το όνομα είναι ολόκληρη η μεταμφίεση.

JupyterLab ως μηχανή RCE

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

jupyter server --with jupyterlab   --ip=0.0.0.0            # listen on every interface   --ServerApp.token=""    # no password, no token   --allow_origin='*'      # accept cross-origin connections   --disable_check_xsrf    # allow a remote browser/WebSocket to drive it

Κάθε σημαία αφαιρεί μια προστασία, και το σενάριο που αποστέλλεται μάλιστα τις σχολιάζει (στα πρωτότυπα κινέζικα): το κενό σύμβολο «απενεργοποιεί τους ελέγχους κωδικών πρόσβασης και διακριτικών — ο καθένας μπορεί να συνδεθεί». εργαστήριο jupyter είναι ένα νόμιμο IDE επιστήμης δεδομένων, αλλά όχιebook Το κελί εκτελεί αυθαίρετο κώδικα εκ κατασκευής. Διαμορφώνεται με αυτόν τον τρόπο και είναι συνδεδεμένο με 0.0.0.0, σταματά να είναι ένα IDE και γίνεται ένα μη εξουσιοδοτημένο απομακρυσμένο κέλυφος στον κεντρικό υπολογιστή — δεν απαιτείται προσαρμοσμένο δυαδικό αρχείο κακόβουλου λογισμικού, απλώς ένα κύριο εργαλείο που δείχνει λάθος κατεύθυνση.

Δύο υποστηρικτικά κομμάτια το καθιστούν προσβάσιμο και επαναλήψιμο:

  • Μια αθόρυβη ενεργοποίηση εγκατάστασης. Οι πρώτες εκδόσεις εκτελούν το PowerShell με -ΠαράκαμψηΠολιτικήςΕκτέλεσης κατευθείαν από setup.py on εγκατάσταση pip, στο παρασκήνιο με σφάλματα κατασταλμένα έτσι κουκούτσι φαίνεται φυσιολογικό. Οι νεότερες εκδόσεις μετακινούν το ίδιο πρωτόγονο σε ένα pip-uv εργαλείο γραμμής εντολών — και να καταργήσετε εντελώς την αυτόματη εκτέλεση κατά την εγκατάσταση.
  • Μια δημόσια αντίστροφη σήραγγα. Ένας διακομιστής σε 0.0.0.0 εξακολουθεί να είναι προσβάσιμο μόνο από κεντρικούς υπολογιστές που μπορούν να δρομολογήσουν προς το μηχάνημα. Μια ενσωματωμένη ενότητα ανοίγει ένα [Pinggy](https://pinggy.io/) Αντίστροφη σήραγγα SSH που προωθεί την τοπική θύρα Jupyter σε μια δημόσια διεύθυνση, αφαιρώντας αυτό το όριο. Το σενάριο που αποστέλλεται μεταφέρει επίσης — σχολιασμένη — μια εναλλακτική διαδρομή χρησιμοποιώντας το Cloudflare σύννεφο και σε έναν netsh port-proxy σε μια IP Linode, τεκμηριώνοντας τον ίδιο στόχο μέσω διαφορετικής υποδομής.

Συναρμολογήστε: εγκαταστήστε το πακέτο και ένας κεντρικός υπολογιστής των Windows καταλήγει να εκτελεί ένα JupyterLab χωρίς κωδικό πρόσβασης και να το δημοσιεύει στο ανοιχτό διαδίκτυο.

Πώς εξελίχθηκε το FauxUV

Οι εκδόσεις του FauxUV αποστέλλονταν σε γρήγορη διαδοχή και το σημείο ενεργοποίησης του ωφέλιμου φορτίου μετακινούνταν κατά μήκος τους — μια υπενθύμιση ότι μια έκδοση με σημαία σπάνια αφηγείται ολόκληρη την ιστορία μιας σειράς δεμάτων.

Στάδιο εκδόσεις Σκανδάλη Τι προσθέτει
Γάντζος εγκατάστασης moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 setup.py κατά την εγκατάσταση του pip εγκατάσταση uv + πρόθεμα PATH
CLI-χρόνος εκτέλεσης moon-uv 0.0.5-0.0.13 pip-uv εντολή ο εκκινητής JupyterLab χωρίς κωδικό πρόσβασης
Σήραγγα moon-uv 0.0.14-0.0.16 pip-uv εντολή μια ενεργή αντίστροφη σήραγγα Pingy

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

Δείκτες συμβιβασμού

Επιβεβαιώθηκε με την ανάγνωση του πηγαίου κώδικα του πακέτου· τα τελικά σημεία σημειώθηκαν σχολίασε υπάρχουν στα αρχεία αλλά δεν εκτελούνται από την αναλυμένη έκδοση. Οι δείκτες δικτύου είναι απενεργοποιημένοι.

Χαρακτηριστικά Δείκτης
Εντολή εγκατάστασης powershell -ExecutionPolicy Bypass Ανάκτηση του γνήσιου προγράμματος εγκατάστασης UV, κατά την εγκατάσταση του pip
Σημαίες JupyterLab --ip=0.0.0.0 --ServerApp.token="" --allow_origin='*' --disable_check_xsrf
Αντίστροφη σήραγγα (ενεργή) free[.]pinggy[.]io:443 προώθηση τοπικών 127.0.0.1:8888
Κεντρικός υπολογιστής σήραγγας (σχολιάστηκε) cloudflared tunnel --url hxxp://127[.]0[.]0[.]1:2718
IP (σχολιασμένο) 45[.]79[.]134[.]161 (Linode) μέσω netsh port-proxy
Επιμονή προεξέχει %USERPROFILE%\.local\bin στον χρήστη PATH

Σήματα συμπεριφοράς για τα οποία αξίζει να δοθεί προσοχή, ανεξάρτητα από αυτές τις ακριβείς συμβολοσειρές: α εγκατάσταση pip που γεννιέται powershell - Παράκαμψη Εκτέλεσης Πολιτικής; οποιοδήποτε Jupyter συνδυασμός εκτόξευσης διακριτικό=”” μαζί σου, –ip=0.0.0.0; και εξερχόμενο SSH προς *.pinggy.io από έναν προγραμματιστή ή μια μηχανή CI.

Παρατηρούμενη συμπεριφορά και προέλευση

Τα δύο πακέτα μοιράζονται έναν συγγραφέα και μια μέθοδο: ένα όνομα αξιόπιστου εργαλείου, λειτουργία gate μόνο για Windows, εκτέλεση στο παρασκήνιο χωρίς σφάλματα και εξάρτηση από αξιόπιστα εργαλεία, επομένως μια γρήγορη ματιά βλέπει μόνο αξιόπιστες διευθύνσεις URL. Η πηγή περιέχει σχόλια στα κινέζικα που περιγράφουν με σαφήνεια τις σημαίες που σχετίζονται με την ασφάλεια. Τα αναφέρουμε ως παρατηρήσιμες δηλώσεις στο αρχείο, όχι ως ισχυρισμό σχετικά με το κίνητρο. allow_origin αξία και ένα colab.bat Το όνομα αρχείου απηχεί τις άτυπες ροές εργασίας "κοινή χρήση του τοπικού μου χρόνου εκτέλεσης" που κυκλοφορούν για το Google Colab. Όποια και αν είναι η προέλευση, το αποτέλεσμα του πακέτου είναι το ίδιο.

Αντίκτυπος και καθοδήγηση για τους υπερασπιστές

Ποιος εκτίθεται σε FauxUV. Προγραμματιστές των Windows και δρομείς CI που εγκατάσταση pip ένα από αυτά τα πακέτα. Ένα JupyterLab χωρίς κωδικό πρόσβασης στο 0.0.0.0 είναι η απομακρυσμένη εκτέλεση κώδικα για οποιονδήποτε μπορεί να φτάσει στη θύρα. Η σήραγγα καταργεί το όριο "ποιος μπορεί να την φτάσει". Ο διακομιστής εκτελείται ως ο χρήστης εγκατάστασης, κληρονομώντας τα αρχεία, τα διακριτικά και τα διαπιστευτήρια cloud αυτού του χρήστη.

Γιατί είναι εύκολο να το χάσει κανείς. Κάθε συμβολοσειρά δικτύου υποδεικνύει έναν αξιόπιστο πάροχο φιλοξενίας — Astral, JupyterLab, σύννεφο, Pinggy, Colab. Δεν υπάρχει δυαδικό αρχείο κακόβουλου λογισμικού για κατακερματισμό και κανένα θολό αρχείο blob για αποκωδικοποίηση. Η σάρωση που βασίζεται στη φήμη και την υπογραφή υποβαθμίζει και οι δύο αυτό, γι' αυτό και το ζήτημα συμπεριφοράς — Τι κάνει η εγκατάσταση αυτού του πακέτου στο μηχάνημα; — είναι αυτός που το πιάνει.

Οδηγία:

  • Αντιμετωπίστε οποιαδήποτε στιγμή εγκατάστασης powershell - Παράκαμψη Εκτέλεσης Πολιτικής ως σήμα διάσπασης δομής, όποια διεύθυνση URL κι αν ανακτήσει.
  • Ειδοποίηση για Jupyter ξεκίνησε με ένα κενό διακριτικό και –ip=0.0.0.0; αυτός ο συνδυασμός δεν πρέπει ποτέ να εμφανίζεται σε έναν σταθμό εργασίας ή έναν εκτελεστή.
  • Παρακολούθηση για εξερχόμενους παρόχους SSH σε σήραγγες (*.pinggy.io, *.trycloudflare.com) από περιβάλλοντα προγραμματιστών και CI.
  • εγκαταστήστε uv από [την επίσημη πηγή του](https://docs.astral.sh/uv/) και να είστε επιφυλακτικοί απέναντι σε πακέτα "βοηθητικά" τρίτων που περιβάλλουν ένα εργαλείο που είναι ήδη εύκολο στην εγκατάσταση.
  • Καρφίτσωμα και επανεξέταση εξαρτήσεων κατά την αναβάθμιση — μια σειρά πακέτων μπορεί να αναπτύξει νέες δυνατότητες από έκδοση σε έκδοση.
εργαλεία-ανάλυσης-σύνθεσης-λογισμικού-sca
Ιεράρχηση, αποκατάσταση και ασφάλεια των κινδύνων λογισμικού σας
Αποκτήστε τον Δωρεάν Λογαριασμό σας.
Δεν απαιτείται πιστωτική κάρτα.

Ασφαλίστε την ανάπτυξη και την παράδοση λογισμικού σας

με το Xygeni Product Suite