GitHub, широко используемая платформа для размещения кода, сообщила, что более 4000 пакетов кода уязвимы для атак RepoJacking. Эта уязвимость, обнаруженная исследователями Checkmarx, вызвала беспокойство в open source-сообществе и побудила GitHub действовать быстро.
Как устроена атака RepoJacking
RepoJacking — сокращение от «repository hijacking» (угон репозитория) — это техника, которую злоумышленники используют для захвата контроля над репозиторием. Атака использует состояние гонки между процессами создания репозитория и смены имени пользователя в GitHub. По сути, злоумышленники занимают старое имя пользователя репозитория после того, как легитимный создатель сменил своё имя. Затем они публикуют вредоносный репозиторий под тем же именем, обманывая пользователей, которые скачивают вредоносный контент.
Последствия этой уязвимости значительны. Она затрагивает более 4000 пакетов кода на таких языках программирования, как Go, PHP и Swift, а также GitHub Actions. Многие из этих пакетов обрели заметную популярность: более 1000 звёзд. Потенциальное воздействие на миллионы пользователей и различные приложения пока не выявлено.
Реакция GitHub
Checkmarx ответственно раскрыла эту уязвимость GitHub 1 марта 2023 года, что побудило платформу к действиям. GitHub ввёл механизм «вывода из оборота имён популярных репозиториев» для предотвращения RepoJacking. Согласно этой мере безопасности, репозитории с более чем 100 клонами на момент смены имени пользователя считаются «выведенными из оборота» и не могут быть использованы другими. Комбинация имени пользователя и имени репозитория также считается «выведенной из оборота».
Однако эта мера безопасности оказалась легко обходимой. Checkmarx выявила более 4000 пакетов в менеджерах пакетов, использующих переименованные имена пользователей, что подвергало их риску угона.
Как проходит атака
Checkmarx описала этапы атаки RepoJacking:
- Жертва владеет пространством имён «victim_user/repo».
- Жертва переименовывает «victim_user» в «renamed_user».
- Репозиторий «victim_user/repo» выводится из оборота.
- Злоумышленник с именем пользователя «attacker_user» одновременно создаёт репозиторий «repo» и переименовывает имя пользователя «attacker_user» в «victim_user».
Это достигается с помощью API-запроса на создание репозитория и перехвата запроса на переименование имени пользователя.
Сохраняющиеся уязвимости
Это открытие показывает сохраняющиеся риски, связанные с механизмом GitHub «вывода из оборота имён популярных репозиториев». Многие пользователи GitHub, в том числе те, кто контролирует популярные репозитории и пакеты, предпочитают пользоваться функцией «Переименовать пользователя». Это делает обход механизма «вывода из оборота имён популярных репозиториев» привлекательной целью для атакующих, действующих через цепочку поставок.
GitHub принимает решительные меры
GitHub устранил проблему с 1 сентября 2023 года после ответственного раскрытия информации Checkmarx. В свете этой уязвимости пользователям рекомендуют избегать использования выведенных из оборота пространств имён, чтобы минимизировать поверхность атаки. Кроме того, рекомендуется проводить тщательный аудит кода, чтобы убедиться в отсутствии зависимостей, которые могут привести к угону репозиториев.
Уязвимость GitHub, обнаруженная Checkmarx, показывает сохраняющиеся угрозы для проектов с открытым исходным кодом. Пользователям следует сохранять бдительность, поскольку методы атак продолжают развиваться.

