FauxUV: Falske PyPI uv-pakker åbner Jupyter for internettet

FauxUV: falske PyPI uv-hjælpere, der åbner en uautoriseret Jupyter-server til internettet

TL; DR

En klynge af PyPI-pakker lånte navnet uv, den hurtige, enormt populære Rust-baserede Python-pakkehåndtering, til at udgive sig for at være UV-hjælpere. De leverer næsten ingen reel funktionalitet. Hvad de i stedet har med sig er en Windows-nyttelast, der kan modstå en JupyterLab-server med godkendelse slået fra og udgiver den i senere versioner på internettet via en omvendt tunnel.

Det er hele historien i én linje: et betroet værktøjs navn som lokkemiddel, og JupyterLab som motoren til fjernkodeudførelse. En Jupyter-server kører den kode, du skriver i en ikke-server.ebook celle; en der startes med et tomt token og er bundet til alle netværksgrænseflader, er en åben fortolker, som alle, der kan nå porten, kan køre.

Vi sporer klyngen som Falsk UVDe to undersøgte pakker er moon-uv (0.0.1-0.0.16) og my-magic-uv-helper (0.0.1), udgivet af den samme operator og live på PyPI på analysetidspunktet.

EcosystemPyPI
Pakkermoon-uv (0.0.1-0.0.16), my-magic-uv-helper (0.0.1)
PlatformmålrettetWindows
KerneadfærdUautoriseret JupyterLab-server, udgivet til internettet via en omvendt tunnel
Misbrug af legitime værktøjerUV, JupyterLab, Cloudflared, Pinggy

Lokkemidlet: et navn, du allerede har tillid til

uv er et af de mest installerede Python-værktøjer i de sidste to år, så "en hjælper til uv"er en pakke, som en udvikler installerer uden at tænke sig om. FauxUV bruger udelukkende sin troværdighed på det navn. Pakkerne pakker ind ægte uv installationsprogram fra Astral — URL'erne i nyttelasten peger på rigtige, velrenommerede værter — så et hurtigt blik ser kun troværdige referencer. Ingen af ​​pakkerne tilføjer faktisk uv funktionalitet; navnet er hele forklædningen.

JupyterLab som RCE-motoren

Nyttelastens midtpunkt er en launcher, der starter JupyterLab, når alle rækværk er fjernet:

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

Hvert flag fjerner en beskyttelse, og det medsendte skrift annoterer dem endda (på original kinesisk): den tomme token "slår adgangskode- og tokenkontrol fra — alle kan oprette forbindelse." jupyter lab er en legitim datavidenskabelig IDE, men ikke enebook celle udfører vilkårlig kode efter design. Konfigureret på denne måde og bundet til 0.0.0.0, den holder op med at være en IDE og bliver en uautentificeret fjernshell på værten — ingen brugerdefineret malware-binærfil kræves, bare et mainstream-værktøj, der peger den forkerte vej.

To støttestykker gør det tilgængeligt og gentageligt:

  • En lydløs installationstrigger. Tidlige versioner kører PowerShell med -Omgåelse af udførelsespolitik lige fra setup.py on pip installation, i baggrunden med fejl undertrykt, så pip ser normalt ud. Senere versioner flytter den samme primitive ind i en pip-uv kommandolinjeværktøjet — og drop den automatiske kørsel under installation helt.
  • En offentlig omvendt tunnel. En server på 0.0.0.0 er stadig kun tilgængelig for værter, der kan rute til maskinen. Et bundtet modul åbner en [Pinggy](https://pinggy.io/) SSH reverse tunnel, der videresender den lokale Jupyter-port til en offentlig adresse og fjerner denne begrænsning. Det leverede script indeholder også – kommenteret – en alternativ sti ved hjælp af Cloudflares skyudstrakt og en netsh port-proxy til en Linode IP, der dokumenterer det samme mål gennem forskellig infrastruktur.

Samlet set: installer pakken, og en Windows-vært ender med at køre et adgangskodefrit JupyterLab og udgive det på det åbne internet.

Hvordan FauxUV udviklede sig

FauxUVs versioner blev leveret i hurtig rækkefølge, og nyttelastens udløsningspunkt bevægede sig hen over dem – en påmindelse om, at én markeret version sjældent fortæller hele historien om en pakkelinje.

Stage versioner Udløser Hvad det tilføjer
Installationskrog moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 setup.py ved pip-installation uv installation + PATH forudgående
CLI-kørselstid moon-uv 0.0.5-0.0.13 pip-uv kommando den adgangskodeløse JupyterLab-starter
Tunnel moon-uv 0.0.14-0.0.16 pip-uv kommando en aktiv Pinggy omvendt tunnel

Bemærkelsesværdigt var den automatiske kørsel ved installationstidspunktet fjernet i de senere, mere kapable versioner — så en scanner kun indtastet på livscyklus hooks ville give de nyere udgivelser karakter som mindre risikabelt, præcis omvendt.

Indikatorer for kompromis

Bekræftet ved at læse pakkens kildekode; slutpunkter markeret kommenteret er til stede i filerne, men udføres ikke af den analyserede version. Netværksindikatorer er deaktiveret.

Type Indikator
Installer kommando powershell -ExecutionPolicy Bypass Henter det ægte UV-installationsprogram, mens pip-installationen pågår
JupyterLab-flag --ip=0.0.0.0 --ServerApp.token="" --allow_origin='*' --disable_check_xsrf
Omvendt tunnel (aktiv) free[.]pinggy[.]io:443 videresendelse lokalt 127.0.0.1:8888
Tunnelvært (kommenteret) cloudflared tunnel --url hxxp://127[.]0[.]0[.]1:2718
IP (kommenteret) 45[.]79[.]134[.]161 (Linode) via netsh port-proxy
Vedholdenhed forudsætter %USERPROFILE%\.local\bin til brugerens PATH

Adfærdssignaler, der er værd at være opmærksom på, uafhængigt af disse præcise strenge: a pip installation der gyder powershell - Omgåelse af udførelsespolitik; enhver jupyter lancering af kombination token=”” med –ip=0.0.0.0og udgående SSH til *.pinggy.io fra en udvikler eller CI-maskine.

Observeret adfærd og oprindelse

De to pakker deler en forfatter og en metode: et betroet værktøjs navn, kun Windows-gating, fejlundertrykt baggrundsudførelse og afhængighed af velrenommerede værktøjer, så et hurtigt kig kun viser velrenommerede URL'er. Kilden indeholder kommentarer på kinesisk, der tydeligt beskriver de sikkerhedsrelevante flag; vi rapporterer disse som observerbare udsagn i filen, ikke som en påstand om motiv. tillad_oprindelse værdi og en colab.bat filnavnet gentager de uformelle "del min lokale runtime"-arbejdsgange, der cirkulerer for Google Colab. Uanset oprindelsen er det pakkede resultat det samme.

Indvirkning og vejledning for forsvarere

Hvem er udsat for FauxUV? Windows-udviklere og CI-brugere, der pip installation en af ​​disse pakker. En adgangskodefri JupyterLab på 0.0.0.0 er fjernudførelse af kode for alle, der kan nå porten; tunnelen fjerner grænsen for "hvem kan nå den". Serveren kører som den installerende bruger og arver den pågældende brugers filer, tokens og cloud-legitimationsoplysninger.

Hvorfor det er nemt at overse. Hver netværksstreng peger på en velrenommeret vært — Astral, JupyterLab, skyudstrakt, Pinggy, Colab. Der er ingen malware-binærfil at hashe og ingen obfuskeret blob at afkode. Omdømme- og signaturbaseret scanning undervurderer begge dette, hvilket er grunden til det adfærdsmæssige spørgsmål — Hvad får maskinen til at gøre ved at installere denne pakke? — er den, der fanger den.

Vejledning:

  • Behandl enhver installationstid powershell - Omgåelse af udførelsespolitik som et build-breaking signal, uanset hvilken URL den henter.
  • Alarm på jupyter lanceret med en tom token og –ip=0.0.0.0; den kombination bør aldrig vises på en arbejdsstation eller runner.
  • Overvåg udgående SSH til tunneludbydere (*.pinggy.io, *.trycloudflare.com) fra udvikler- og CI-miljøer.
  • Installer uv fra [dens officielle kilde](https://docs.astral.sh/uv/) og vær skeptisk over for tredjeparts "hjælper"-pakker, der indpakker et værktøj, der allerede er trivielt at installere.
  • Fastgør og gennemgå afhængigheder ved opgradering — en pakkelinje kan udvikle nye funktioner version over version.
sca-tools-software-kompositionsanalyseværktøjer
Prioriter, afhjælp og sørg for dine softwarerisici
Få din gratis konto.
Der kræves ikke noget kreditkort.

Sikr din softwareudvikling og -levering

med Xygeni-produktsuite