Злоумышленники могут с лёгкостью клонировать старые репозитории и нарушить перенаправление зависимостей.
Более 9 миллионов репозиториев на GitHub подвержены риску захвата зависимостей, также известному как «RepoJacking», который может помочь злоумышленникам осуществлять атаки по цепочке поставок, затрагивающие большое количество пользователей. Об этом предупреждает команда безопасности AquaSec «Nautilus», которая проанализировала огромную выборку репозиториев на GitHub.
По оценкам исследователей, к RepoJacking уязвимы лишь 2,95% всех репозиториев GitHub, однако если перенести этот процент на всю базу репозиториев, которая составляет более 300 миллионов, то проблема затрагивает примерно 9 миллионов проектов. И такое количество уже не кажется чем-то безобидным.
Изменение имени пользователя и названия репозитория — частое явление на GitHub, поскольку многие организации могут фактически перестать существовать в результате поглощения, слияния или перехода на новый бренд. Когда это происходит, внутри прежнего проекта создаётся перенаправление, чтобы избежать нарушения зависимостей для других проектов, использующих код из репозиториев, изменивших своё название. Однако, если кто-то зарегистрирует старое имя, то это перенаправление становится недействительным.
RepoJacking — это атака, при которой злоумышленник регистрирует имя пользователя и создаёт репозиторий, который использовался организацией в прошлом. В результате чего любой проект или код, который полагается на зависимости атакованного проекта, будет получать зависимости и код из репозитория, контролируемого злоумышленником, который может содержать в том числе вредоносный код.
GitHub знает об этой уязвимости своей платформы, поэтому внедрил некоторые защитные меры от атак типа RepoJacking. Однако исследователи AquaSec сообщают, что данные решения не обеспечивают стопроцентной защиты, так как их можно легко обойти.
Например, GitHub защищает только очень популярные проекты, но они могут использовать зависимость из менее популярного уязвимого репозитория, который не покрыт подобной защитой. Таким образом компрометация цепочки поставок затрагивает эти проекты тоже.
Также GitHub защищает репозитории с более чем 100 клонами за неделю до смены имени, указывая на злонамеренные подготовки. Однако эта защита не охватывает проекты, которые стали популярными уже после их переименования или передачи прав собственности.
Чтобы подчеркнуть важность проблемы, AquaSec просканировала известные организации на предмет уязвимых репозиториев и нашла уязвимые случаи в репозиториях, управляемых, ни много ни мало, самой Google.
В случае с Google файл «readme», содержащий инструкции по сборке довольно популярного проекта «Mathsteps», указывал на репозиторий GitHub, принадлежащий компании Socratic, которую Google приобрел и ассимилировал в 2018 году.
Поскольку Socratic больше не существует, как и соответствующего ей репозитория, злоумышленник может клонировать этот репозиторий, чтобы нарушить перенаправление. А пользователи, следующие инструкциям readme, могли бы непреднамеренно загрузить вредоносный код из поддельного репозитория.
Кроме того, поскольку в инструкциях была включена команда «npm install» для зависимости, код злоумышленника мог бы достичь произвольного выполнения на устройствах ничего не подозревающих пользователей.
К сожалению, риск RepoJacking широко распространен, трудно устраняем и может иметь серьёзные последствия для организаций и пользователей. Владельцы проектов должны минимизировать ресурсы, которые они получают из внешних репозиториев настолько, насколько это вообще возможно.
Кроме того, стоит рассмотреть возможность сохранения контроля над репозиториями старых или приобретенных брендов, чтобы предотвратить атаки по захвату зависимостей на себя и своих клиентов.
Никаких овечек — только отборные научные факты