Уже много лет опенсорсные проекты позволяют нам «украшать» графики активности на GitHub фальшивыми историями коммитов Git. Но знали ли вы, что подобные граффити можно также размещать в профилях других пользователей?
К примеру, в графиках активности нескольких фишеров я оставил вот такую «черную метку»:
В статье расскажу, как отметить профиль недобросовестного юзера таким граффити, чтобы другие пользователи GitHub знали, с кем имеют дело.
Итак, при помощи простого скрипта в графике активности на GitHub можно рисовать забавный пиксель-арт. Это возможно из-за отсутствия механизма валидации меток времени между Git и GitHub, а также из-за того, что даты коммитов Git можно указывать задним числом.
Еще один пример граффити
Механизм проверки соответствия между email-адресом в коммитах Git и email-адресом, связанным с аккаунтом на GitHub, работает по странному принципу. Можно подумать, что валидация вовсе отсутствует, но вот выдержка из документации по GitHub, которая объясняет, как определяется авторство коммитов:
Коммиты отображаются в графике, только если они отвечают всем из нижеперечисленных условий:
- Адрес почты, использованный для коммитов, привязан к вашему аккаунту на Github;
- Коммиты сделаны в отдельном репозитории, а не в форке;
- (…)
Кроме того, должно соблюдаться как минимум одно из следующих условий:
- Вы один из соавторов репозитория или член организации, владеющей репозиторием;
- Вы создали форк репозитория;
- Вы открыли пулл-реквест или issue для репозитория.
Таким образом, чтобы вы могли завандалить чужой график коммитов, нужны всего три предпосылки:
- Другой пользователь должен открыть issue или запушить код в репозиторий, в который вы тоже можете пушить код (или получить одобрение пулл-реквеста);
- Вы должны знать почтовый адрес, который пользователь использовал для регистрации;
- Репозиторий не должен быть форком.
Как использовать эту силу во благо
В последнее время на GitHub фиксировались попытки фишинга через оставление комментариев в issues:
«Новая методика угона учетных данных Github? Атакующий оставляет комментарий в открытом issue, надеясь убедить владельца репозитория, что поступившее ему письмо с уведомлением о комменте — это предупреждение системы безопасности, требующее смены пароля...»
Кроме того, на GitHub были случаи, когда хакеры внедряли в чужие проекты зловредный код при слиянии репозиториев — например, так спрятали бэкдор в коде XZ-Utils.
Встретив на просторах GitHub такого мошенника, вы можете предупредить других пользователей о его недобрых намерениях, разместив граффити в его графике активности.
Как только злоумышленник открывает issue или отправляет нам пулл-реквест, у нас появляется уникальная возможность: теперь мы удовлетворяем одному из критериев, о которых я писал выше.
Некоторое время назад мне пришло фишинговое письмо от мошенника, который действовал по такой же схеме:
Чтобы письмо с этим уведомлением пришло мне на почту, злоумышленник открыл issue в репозитории, куда я пушил код. Это позволило мне оставить в его профиле ту самую метку «Bad dude». С тех пор этого пользователя уже забанили на GitHub.
Если вы хотите попробовать сделать это самостоятельно, достаточно воспользоваться каким-нибудь готовым инструментом для рисования граффити в графиках активности (например, этим) и указать почтовый адрес человека, который пытался вас развести. Эти почтовые адреса можно узнать, просмотрев API событий мошенника. Или можно просто клонировать его репозитории и посмотреть адреса, использованные в его старых коммитах.
Выводы, которые можно отсюда извлечь
Легко представить, что кто-то может использовать эту систему в менее благородных целях: например, писать в профилях ни в чем не повинных пользователей GitHub нецензурные оскорбления или еще что похуже. Проблемы можно было бы избежать, если бы график основывался на событиях пушей, а не на сырых данных коммитов; однако это может расстроить некоторых пользователей, которые пушат много коммитов за один раз, а не по одному-двум коммитам ежедневно.
Как бы то ни было, эта особенность возникла из-за слабого механизма аутентификации внутри самого Git, а также из-за системы управления доступом на основе ролей, которую GitHub построил вокруг Git.
Комментарии (5)
GidraVydra
04.02.2025 20:20Где та тонкая грань между придурком, засирающим чужие коммиты, и благородным доном, клеймящим мошенников?
Tony-Sol
04.02.2025 20:20Хуже того, жертва не сможет удалить эти коммиты.
Если только это не коммиты, где у жертвы есть права на push force, потому что кажется, что тогда можно через rebase + squash + reset-author полностью переписать историю
Kenya-West
Интересно. А подписывание коммитов GPG'шкой или полноценным PEM со своим CA даст гарантию 100% защиты от такого багоабузоюза?
Tony-Sol
Как будто бы нет. Ну то есть, при включенном vigilant mode, эти коммиты в истории будут отмечены как unverified, но похоже что они все равно будут