Исследователь из Checkmarx обнаружил новый способ обхода защиты GitHub от злоупотреблений. Найденная им уязвимость позволяет захватить контроль над чужим репозиторием и уже пропатчена.
Согласно блог-записи авторов находки, при выполнении на хостинге операций по созданию репозитория и смене имени пользователя иногда возникает состояние гонки. Подобную ошибку можно использовать для проведения repojacking-атаки.
Во избежание подобных абьюзов на GitHub создали механизм удаления популярных, но устаревших пространств имен (связок имя пользователя / имя репозитория). Эта контрмера пускается в ход, когда на момент переименования аккаунта число клонов opensource-проекта перевалило за сотню.
Новая уязвимость позволяет обойти эту защиту. Разработанный экспертами PoC-эксплойт выполняется следующим образом:
- Владелец пространства имен victim_user/repo запускает процедуру смены имени пользователя.
- Связка victim_user/repo сбрасывается как устаревшая.
- Злоумышленник с юзернеймом attacker_user практически одновременно создает репозиторий с именем repo и меняет attacker_user на victim_user.
На последнем этапе используются API-запрос на создание репозитория и перехват запроса на смену имени пользователя.
По данным Checkmarx, выявленная уязвимость ставит под удар более 4000 пакетов кода на Go, PHP и Swift, а также GitHub Actions. Сотни затронутых проектов собрали как минимум по 1000 звезд.
Сообщение о новой проблеме было выслано оператору GitHub 1 марта. К началу текущего месяца возможность обхода защиты была закрыта.