Исследователи компании Aqua полагают, что миллионы репозиториев на GitHub уязвимы для атаки, которая позволяет захватывать чужие репозитории и получила имя RepoJacking. Сообщается, что проблема затрагивает репозитории Google, Lyft и других крупных компаний.
Эти выводы были сделаны после анализа выборки из 1,25 млн репозиториев GitHub, в ходе которого эксперты обнаружили, что около 2,95% из них уязвимы для RepoJacking. Экстраполируя этот процент на всю базу из 300 млн репозиториев GitHub, исследователи подсчитали, что проблема затрагивает примерно 9 млн проектов.
Суть атаки RepoJacking проста. Дело в том, что на GitHub регулярно меняются имена пользователей и имена репозиториев (например, из-за того, что организация сменила название бренда). Когда такое происходит, создается специальное перенаправление, которое позволяет избежать нарушения зависимостей для проектов, использующих код из репозиториев, сменивших имя. Однако если кто-то регистрирует старое имя, это перенаправление становится недействительным.
Таким образом, RepoJacking — это атака, в ходе которой злоумышленник регистрирует username создает репозиторий, который ранее уже использовался какой-то организацией, но сменил название. В итоге любой проект и код, которые полагаются на зависимость от атакованного проекта, будут взаимодействовать с репозиторием, который контролирует злоумышленник, и где может содержаться вредоносное ПО.
Исследователи объясняют, что GitHub известно об этой проблеме, и для защиты от RepoJacking существует ряд защитных механизмов. Однако, по словам экспертов, эти защитные решения не слишком надежны и их легко обойти.
Например, GitHub защищает только очень популярные проекты, однако они могут иметь зависимость от менее популярного и уязвимого репозитория, который не защищен GitHub. В результате компрометация затронет всю цепочку поставок.
Кроме того, GitHub защищает репозитории, у которые за неделю до смены имени было более 100 клонов (что свидетельствует о вредоносной активности). Но такая защита не распространяется на проекты, ставшие популярными уже после переименования или после перехода права собственности.
Чтобы продемонстрировать опасность этой проблемы, аналитики Aqua поискали уязвимые репозитории у известных организаций и обнаружили яркие примеры в репозиториях, управляемых Google и Lyft.
В случае Google был обнаружен файл readme, содержащий инструкции для довольно популярного проекта Mathsteps. Файл указывал на репозиторий, принадлежащий компании Socratic, которую Google приобрела в 2018 году, и ее более не существует. Фактически, злоумышленник может клонировать этот репозиторий, и пользователи, следуя инструкциям из readme, могут загрузить вредоносный код из репозитория хакера.
Кроме того, поскольку среди инструкций есть команда npm install для зависимости, злоумышленник получит возможность выполнить произвольный код на устройствах ничего не подозревающих пользователей.
Что касается Lyft, в данном случае атака может быть автоматизированной, поскольку исследователи обнаружили в репозитории компании установочный скрипт, который извлекает ZIP-архив из другого репозитория, уязвимого для RepoJacking.
Так, злоумышленник, регистрирующий новый username и репозиторий с правильным именем (в данном случае, это YesGraph и Dominus), может внедрить свой код любому, кто выполняет скрипт Lyft — install.sh.
Эксперты резюмируют, что RepoJacking, к сожалению, достаточно трудно предотвратить, и такая атака может иметь серьезные последствия для организаций и пользователей. В заключение исследователи Aqua советуют владельцам проектов минимизировать ресурсы, которые те извлекают из внешних репозиториев.