Исследователи: миллионы репозиториев GitHub уязвимы для атак RepoJacking
Группа безопасности компании Nautilus проанализировала выборку из 1,25 млн репозиториев GitHub и обнаружила, что около 2,95% из них уязвимы для атак RepoJacking. Они позволяют злоумышленникам развернуть атаки цепочки поставок, затрагивающие большое количество пользователей.
Учитывая процент уязвимых, проблема охватывает примерно 9 млн из 300 млн репозиториев GitHub.
RepoJacking — это атака, при которой злоумышленник регистрирует имя пользователя и создаёт репозиторий, который использовался организацией в прошлом, но с тех пор изменил своё название. Это приводит к тому, что любой проект, который полагается на зависимости атакованного проекта, извлекает потенциально вредоносный код из репозитория.
GitHub уже реализует некоторые средства защиты от атак RepoJacking. Однако эксперты сообщают, что эти решения до сих пор легко обойти.
Так, GitHub защищает только очень популярные проекты, но они могут использовать зависимости от менее популярных и уязвимых репозиториев. Специальные меры защиты также не распространяются на проекты, ставшие популярными после их переименования или перехода права собственности.
Группа просканировала известные организации на наличие уязвимых репозиториев и обнаружила случаи эксплуатации уязвимостей в проектах, управляемых Google и Lyft.
В случае с Google это был файл readme, содержащий инструкции по созданию проекта Mathsteps. Он указывал на репозиторий GitHub, принадлежащий Socratic. Это купленная Google компания, которой больше не существует. Поскольку злоумышленник способен клонировать этот репозиторий, чтобы нарушить перенаправление, пользователи, следуя инструкциям readme, могут загрузить вредоносный код. Инструкции файла включали команду «npm install» для зависимости, что позволяет злоумышленникам добиться выполнения произвольного кода на устройствах.
В случае с Lyft эксперты обнаружили скрипт установки, который извлекает ZIP-архив из другого репозитория, уязвимого для RepoJacking. Злоумышленник, регистрирующий новое имя пользователя и репозиторий с именами «YesGraph» и «Dominus», может внедрить свой код в выполнение скрипта Lyft «install.sh».
Владельцам проектов рекомендуется минимизировать ресурсы, извлекаемые из внешних репозиториев. Также им следует задуматься о том, чтобы сохранить контроль над репозиториями старых или приобретённых брендов.
С мая GitHub начал автоматически блокировать утечку конфиденциальной информации, такой как ключи API и токены доступа для всех общедоступных репозиториев кода. Эта функция заблаговременно предотвращает утечки путём сканирования секретов до того, как будут приняты операции «git push», и работает с 69 типами токенов (ключи API, закрытые ключи, секретные ключи, токены аутентификации, токены доступа, сертификаты управления, учётные данные и т. д.).