Всем привет!
В небольшой статье Автор описывает интересный bug, благодаря которому можно было подделывать signed commit в GitHub от имени любого пользователя.
К сожалению, Автор не описывает что именно натолкнуло его на эту мысль, но он решил исследовать GitHub Enterprise Server путем деобфускации исходного кода Ruby.
Это позволило ему лучше понять процесс того, что происходит «под капотом» и какая последовательность действий осуществляется.
Проанализировав одну функцию Автор заметил, что поле с именем author commit'a проверяется регулярным выражением:
/\Aauthor (.+?) <(.+)>/Однако, такая «регулярка» никак не отреагирует на… «пустого» пользователя.
Таким образом, добавив несколько полей с author (первое из которых – пустое) проверка «срабатывает», пропускает строку и использует следующее значение по списку.
На текущий момент времени уязвимость устранена (да-да, изменением регулярного выражения 😊), а больше деталей можно найти в статье.