TL; DR
PyPI пакеттеринин кластери төмөнкү атты алган uv, тез жана абдан популярдуу Rust негизиндеги Python пакет менеджери, uv жардамчылары катары көрсөтүү үчүн. Алар дээрлик эч кандай реалдуу функцияларды жеткиришпейт. Анын ордуна алар Windows пайдалуу жүктөмүн алып жүрүшөт, ал ... Аутентификациясы өчүрүлгөн JupyterLab сервери жана кийинки версияларында аны тескери туннель аркылуу коомдук интернетке жарыялайт.
Бүт окуя бир сапта мындайча баяндалат: ишенимдүү куралдын аталышы жем катары, ал эми JupyterLab алыстан код аткаруу кыймылдаткычы катары колдонулат. Jupyter сервери сиз терген коддун баарын "not" серверине иштететebook клетка; бош токен менен ишке киргизилип, ар бир тармак интерфейсине байланганы - бул портко жете алган ар бир адам башкара ала турган ачык интерпретатор.
Биз кластерди төмөнкүдөй көзөмөлдөйбүз FauxUVКаралып жаткан эки таңгак moon-uv (0.0.1-0.0.16) жана my-magic-uv-helper (0.0.1), ошол эле оператор тарабынан жарыяланган жана талдоо учурунда PyPIде түз эфирде.
| Экосистемалык | P&IP |
| пакеттер | moon-uv (0.0.1-0.0.16), my-magic-uv-helper (0.0.1) |
| Платформага багытталган | Windows |
| Негизги жүрүм-турум | Интернетке тескери туннель аркылуу жарыяланган, текшерилбеген JupyterLab сервери |
| Мыйзамдуу куралдар кыянаттык менен колдонулган | uv, JupyterLab, cloudflared, Pinggy |
Азгырык: сиз буга чейин ишенген ат
uv акыркы эки жылдагы эң көп орнотулган Python куралдарынын бири, ошондуктан "жардамчы" uv"- бул иштеп чыгуучу эч ойлонбостон орноткон пакет. FauxUV өзүнүн ишенимдүүлүгүн толугу менен ошол аталышка жумшайт. Пакеттер ... ороп алат чын жүрөктөн uv Astralдан орноткуч — чыныгы, кадыр-барктуу хосттордогу пайдалуу жүктөө чекитиндеги URL даректер — ошондуктан тез карап чыгуу ишенимдүү шилтемелерден башка эч нерсе көрбөйт. Пакеттердин бири да чындыгында кошумчаларды кошпойт uv функционалдуулук; аталышы - бул бүтүндөй маскировка.
JupyterLab RCE кыймылдаткычы катары
Жүктүн борбордук бөлүгү - бул ар бир тосмо алынып салынганда JupyterLabты ишке киргизүүчү ишке киргизгич:
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 Ар бир желек коргоону алып салат, ал эми жөнөтүлгөн жазууда аларга (баштапкы кытай тилинде) комментарийлер да жазылган: бош токен "Сырсөздү жана токенди текшерүүнү өчүрөт — каалаган адам туташа алат." Юпитер лабораториясы бул мыйзамдуу маалыматтар илиминин IDEси, бирок андай эмесebook клетка каалагандай кодду долбоор боюнча аткарат. Ушундай жол менен конфигурацияланган жана байланышкан 0.0.0.0, ал IDE болуудан калат жана хосттогу аныктыгы текшерилбеген алыскы кабыкка айланат — эч кандай атайын зыяндуу программанын экилик файлы талап кылынбайт, жөн гана негизги курал туура эмес багытты көрсөтүп турат.
Эки колдоочу бөлүк аны жеткиликтүү жана кайталануучу кылат:
- Үнсүз орнотуу триггери. Алгачкы версиялары PowerShellди төмөнкү менен иштетет -ExecutionPolicy айланып өтүү түздөн setup.py on пип орнотуу, каталар басылган фондо Жооп жазуу кадимкидей көрүнөт. Кийинки версиялар ошол эле примитивди а пип-ув буйрук сабынын куралы — жана орнотуу убактысында автоматтык түрдө иштетүүнү толугу менен өчүрүңүз.
- Коомдук тескери өтүүчү туннель. Сервер күйүк 0.0.0.0 дагы эле машинага багыт ала алган хосттор гана жете алат. Бириктирилген модуль [Pinggy](https://pinggy.io/) Жергиликтүү Jupyter портун коомдук дарекке багыттаган SSH тескери туннели, ал чектөөнү алып салат. Жөнөтүлгөн скрипт ошондой эле Cloudflare'ди колдонгон альтернативдүү жолду камтыйт — комментарийленген. булуттуу жана netsh port-proxy'ни Linode IP дарегине, ошол эле максатты ар кандай инфраструктура аркылуу документтештирүү.
Чогултуп алыңыз: пакетти орнотуңуз, ошондо Windows хосту сырсөзсүз JupyterLab иштетип, аны ачык интернетке жарыялайт.
FauxUV кантип пайда болду
FauxUV версиялары тез арада катары менен жөнөтүлдү, ал эми пайдалуу жүктүн триггер чекити алардын үстүнөн жылды — бул бир белгиленген версия сейрек учурларда гана пакет линиясынын бүт окуясын баяндай турганын эске салат.
| сахна | туру | спускалык илгич | Эмне кошот |
|---|---|---|---|
| Орнотуу илгичи | moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 | setup.py пип орнотуусунда | UV орнотуу + PATH алдын ала орнотуу |
| CLI иштөө убактысы | moon-uv 0.0.5-0.0.13 | pip-uv буйрук | сырсөзсүз JupyterLab ишке киргизгичи |
| туннель | moon-uv 0.0.14-0.0.16 | pip-uv буйрук | активдүү Пингги тескери туннели |
Белгилей кетчү нерсе, орнотуу учурунда автоматтык түрдө ишке киргизилди алынып салынды кийинки, жөндөмдүүрөөк версияларында — ошондуктан сканер жашоо циклинде гана ачкыч менен иштейт hooks жаңы чыгарылыштарды баалайт элем азыраак тобокелдүү, так тескерисинче.
Компромисс көрсөткүчтөрү
Пакеттин булагын окуу менен тастыкталды; акыркы чекиттер белгиленген жорум файлдарда бар, бирок талданган версия тарабынан аткарылбайт. Тармак индикаторлору бузулган.
| түрү | көрсөткүч |
|---|---|
| Орнотуу буйругу | powershell -ExecutionPolicy Bypass түпнуска uv орноткучту pip орнотуу учурунда алуу |
| JupyterLab желектери | --ip=0.0.0.0 --ServerApp.token="" --allow_origin='*' --disable_check_xsrf |
| Тескери туннель (активдүү) | free[.]pinggy[.]io:443 жергиликтүү багыттоо 127.0.0.1:8888 |
| Туннель хост (комментарий калтырды) | cloudflared tunnel --url hxxp://127[.]0[.]0[.]1:2718 |
| IP (комментарий калтырылды) | 45[.]79[.]134[.]161 (Линод) аркылуу netsh port-proxy |
| тырышчаактык | алдын ала %USERPROFILE%\.local\bin колдонуучуга PATH |
Бул так тизмектерден көз карандысыз, эскертүүгө арзырлык жүрүм-турумдук сигналдар: а пип орнотуу ал пайда болот powershell -ExecutionPolicy айланып өтүү; ар кандай жупитер бириктирүүнү ишке киргизүү токен = "" менен –ip=0.0.0.0жана чыгуучу SSH *.pinggy.io иштеп чыгуучудан же CI машинасынан.
Байкалган жүрүм-турум жана келип чыгышы
Эки пакетте автор жана ыкма бар: ишенимдүү куралдын аталышы, Windows үчүн гана коргоо, каталарды басуучу фондук аткаруу жана кадыр-барктуу куралдарга таянуу, ошондуктан тез карап чыгууда кадыр-барктуу URL даректер гана көрүнөт. Булакта коопсуздукка тиешелүү желектерди ачык сүрөттөгөн кытай тилиндеги комментарийлер бар; биз аларды файлдагы байкалып турган билдирүүлөр катары билдиребиз, мотив жөнүндө доомат катары эмес. уруксат_алынган баалуулук жана колаб.жарганат filename Google Colab үчүн таратылган расмий эмес "жергиликтүү иштөө убактымды бөлүшүү" жумуш агымдарын чагылдырат. Баштапкы булагы кандай болбосун, пакеттелген натыйжа бирдей.
Коргоочулар үчүн таасир жана көрсөтмө
FauxUV таасирине ким дуушар болот. Windows иштеп чыгуучулары жана CI иштетүүчүлөрү пип орнотуу ушул пакеттердин бири. Сырсөзсүз JupyterLab 0.0.0.0 портко жете алган ар бир адам үчүн алыстан кодду аткаруу; туннель "ким ага жете алат" деген чектөөнү алып салат. Сервер орнотуучу колдонуучу катары иштейт жана ошол колдонуучунун файлдарын, токендерин жана булуттук грамоталарын мурастайт.
Эмне үчүн аны сагынуу оңой. Ар бир тармактык сап кадыр-барктуу хостко — Astral, JupyterLab, булуттуу, Пингги, Колаб. Хэшке айландыруучу зыяндуу бинардык программа жана декоддоо үчүн бүдөмүк блок жок. Репутацияга жана кол тамгага негизделген сканерлөө мунун маанисин төмөндөтөт, ошондуктан жүрүм-турумдук суроо — бул пакетти орнотуу машинаны эмне кылууга мажбурлайт — аны кармаган адам ошол.
Нускамалар:
- Орнотуу убактысын эске алыңыз powershell -ExecutionPolicy айланып өтүү кандай гана URL болбосун, курулушту бузуучу сигнал катары.
- Эскертүү күйүк жупитер бош токен менен ишке киргизилди жана –ip=0.0.0.0; бул айкалыш эч качан жумуш станциясында же иштеткичте пайда болбошу керек.
- Туннелдик провайдерлерден чыгуучу SSH'ти көзөмөлдөө (*.pinggy.io, *.trycloudflare.com) иштеп чыгуучудан жана CI чөйрөлөрүнөн.
- орнотуу uv [расмий булагынан](https://docs.astral.sh/uv/) жана орнотууга анча деле кыйын болбогон куралды ороп алган үчүнчү тараптын "жардамчы" пакеттерине шектенүү менен мамиле кылыңыз.
- Жаңыртууда көз карандылыктарды кадап, кайра карап чыгыңыз — пакет линиясы жаңы мүмкүнчүлүктөрдү версиядан версияга чейин көбөйтө алат.



