avatar
SHADOW:Group
Переслано от Cybred
27.01.2024 16:22
Подделка подписей на Github

Перед тем, как что-нибудь закоммитить в репозиторий, git просит пользователя указать имя и email. Если сделать так
git config --global user.name "Linus Torvalds"
git config --global user.email "torvalds@linux-foundation.org"

Github подхватит почту и будет помечать твои коммиты, как будто их на самом деле сделал Линус, — с его именем, аватаркой и ссылкой на профиль https://github.com/torvalds.

Так может сделать любой, и поэтому существует зеленая надпись "Verified" напротив коммитов, подписанных с помощью GPG.

Если отправить что-нибудь через веб, коммит подпишется от имени GitHub <noreply@github.com> и тоже будет считаться верифицированным.

Для этого сырой блоб отправляется на внутренний эндпоинт https://api.github.com/vscs_internal/commit/sign, где его подхватывает gh-gpgsign и возвращает подписанный результат.

На бэкенде проверяется условие, что строка автора из коммита, полученная с помощью регулярки /\Aauthor (.+?) <(.+)>/, должны быть равна имени текущего залогиненного пользователя.

Но имя может быть пустым, тогда коммит будет таким
author  <583231+octocat@users.noreply.github.com> 1682188800 +0000
author username <user@example.com> 1682188800 +0000

где первая строка — сгенерирована автоматически,
а вторая — фейковая, уже отправленная нами.

Первая не подойдет под регулярку, поэтому будет взята вторая, которую мы контролируем. И так мы можем получить галочку "Verified" на коммит с именем Торвальдса без его подписи, или с любым другим именем.

Автору заплатили $10.000. Баг удалось найти в Codespaces, благодаря реверсу GitHub Enterprise Server Trial VM.
🔥 17
👍 5
🤔 1
2 60 4.1K

Обсуждение 2

Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.

Обсудить в Telegram