FauxUV: Paket UV PyPI Palsu Membuka Jupyter ke Web

FauxUV: pembantu UV PyPI palsu yang membuka server Jupyter yang tidak terautentikasi ke internet.

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.

EkosistemPyPI
Paket Exklusifmoon-uv (0.0.1 – 0.0.16), my-magic-uv-helper (0.0.1)
Platform yang ditargetkanWindows
Perilaku intiServer 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.
perangkat lunak analisis komposisi sca
Prioritaskan, perbaiki, dan amankan risiko perangkat lunak Anda.
Dapatkan Akun Gratis Anda.
Tidak perlu kartu kredit.

Amankan Pengembangan dan Pengiriman Perangkat Lunak Anda

dengan Rangkaian Produk Xygeni