Вопрос или проблема
Предположим, я создал ключ развертывания с правами записи в репозиторий A.
Предположим, репозиторий A имеет защищенную ветку master, для которой включена опция “Требовать запрос на вытягивание перед слиянием”, а также отключены “Разрешить принудительные изменения” и “Разрешить удаления” для всех, включая администраторов.
Если злонамеренный атакующий украдет этот ключ развертывания, каков может быть ущерб для репозитория? Могут ли они создать запрос на вытягивание? Могут ли они слить этот запрос на вытягивание?
Правильно ли я понимаю, что единственное, что они могут сделать, это создавать, изменять или удалять незащищенные ветки в этом репозитории? Они не могут каким-либо образом затронуть защищенные ветки?
Я задал этот вопрос на форуме GitHub и получил следующий ответ:
Да, я считаю, что это правильно. Они не могут выполнять действия, связанные с GitHub, такие как создание/обновление запросов на вытягивание/проблем или получить доступ к вашему аккаунту GitHub любым способом.
Имейте в виду, что вы также можете создать ключ развертывания, который может только извлекать, если вас беспокоит возможность отправки изменений.
Источник: https://github.community/t/can-a-deploy-key-create-a-pull-request/245288
Ответ или решение
Когда злоумышленник получает доступ к украденному ключу развертывания GitHub с правами записи к репозиторию, он может осуществить ряд действий, в зависимости от настроек безопасности и разрешений, установленных в репозитории. Рассмотрим, что именно может произойти в ситуации, указанной в вопросе.
-
Создание и изменение незащищённых веток: Злоумышленник сможет создавать, изменять или удалять ветки, которые не защищены. Это значит, что, если в репозитории существуют ветки, не имеющие механизмов защиты, атакующий может свободно вносить изменения без лишних препятствий.
-
Ограничения на защищенные ветки: Как вы уже правильно заметили, если в репозитории включены настройки, такие как "Требовать запрос на слияние перед слиянием" (Require pull request before merging) для защищённой основной (master) ветки, то злоумышленник не сможет напрямую вносить изменения в эту ветку. При этом важно отметить, что право на создание или слияние запросов на слияние (pull requests) зависит уже от знаний об API GitHub и доступных возможностей.
-
Создание запросов на слияние (pull requests): На основании приведенной информации можно сказать, что злоумышленник, используя ключ с правами записи, не сможет напрямую создать запрос на слияние от имени своего аккаунта. Однако он может сделать это через обычный git-операции, а затем инициировать запрос на слияние через интерфейс GitHub. Этот процесс потребует дополнительных действий, но теоретически возможен.
-
Возможности действий через API: Поскольку ключ развертывания по своей природе не даёт доступа к учётной записи владельца репозитория, злоумышленник не сможет использовать API GitHub для выполнения действий, таких как создание вопросов или запросов на слияние, от имени владельца. То есть, злоумышленник не сможет влиять на защищённые ветки таким образом, чтобы получить все возможности, которые есть у владельца репозитория.
Таким образом, ваше понимание ситуации в целом корректно. Хотя злоумышленник может иметь потенциально значительно больше возможностей, если репозиторий не имеет должного уровня защиты, в указанном вами случае он ограничен в своих действиях в пределах защиты, установленной на уровне репозитория. Мы рекомендуем вам всегда использовать ключи развертывания с минимально необходимыми правами доступа и быть внимательными к тому, какие ключи и каким образом используются.