В современном мире разработки программного обеспечения GitHub стал неотъемлемой частью повседневной работы миллионов разработчиков по всему миру. Эта платформа упрощает совместную работу, интеграцию кода и управление проектами. Однако вместе с удобством приходит и риск — особенно когда речь идёт о защите конфиденциальной информации. Многие разработчики, случайно или по незнанию, коммитят в свои публичные репозитории секретные ключи и пароли, а после осознают ошибку и стараются всё исправить, удаляя соответствующие коммиты. Но насколько безопасно такое удаление на самом деле? В ходе недавнего исследования я смог выявить, что удалённые коммиты на GitHub сохраняются в скрытом виде и содержат секреты общей стоимостью около 25 тысяч долларов США по выявленным баг-баунти программам.
Главная особенность системы Git и GitHub заключается в том, что удаление коммита — это фактически удаление ссылки на этот коммит, а не самого объекта в репозитории. Когда разработчик делает force push, он переписывает историю ветки, исключая нежелательные коммиты из видимой истории. Но несмотря на это, эти коммиты остаются на GitHub в виде «висячих» или «зеркальных» ссылок, а само содержимое — в архивах. Таким образом, история не удаляется окончательно и при определённых методах становится доступной для восстановления. Это стало возможным благодаря GitHub Archive — проекту, который хранит логи всех публичных событий на платформе, включая такие force push-события без новых коммитов, которые обычно свидетельствуют об удалении прежних коммитов.
Анализ этих zero-commit событий (push-событий без добавленных коммитов) — это ключ к обнаружению удалённых коммитов с потенциально скомпрометированными данными. Используя GitHub Event API и базы данных GH Archive, можно автоматически проводить поиск таких событий и извлекать хранящиеся в них данные. Такие поиски позволили выявить тысячи случаев, когда секреты, такие как AWS ключи, GitHub PAT токены и другие чувствительные данные, оставались доступны даже после попыток удаления. Желание создать удобный инструмент для быстрого обнаружения подобных утечек привело к разработке open-source утилиты Force Push Scanner, которая легко интегрируется в рабочие процессы организаций и отдельных пользователей GitHub. Одним из ключевых этапов моего исследования стала автоматизация процесса сканирования, которая позволила обрабатывать огромные массивы данных и выявлять реальные утечки.
Для этого я подключал TruffleHog — популярный инструмент для поиска секретов в репозиториях, адаптируя его для работы с удалёнными коммитами. Такой подход позволял не только находить секреты, но и оценивать потенциальный риск, связанный с их компрометацией. При анализе данных я отобрал самые значимые учетные записи и организации по уровню важности и потенциальному ущербу. Было замечено, что большинство утекших секретов связано с популярными инструментами и сервисами, особенно с MongoDB, где большое число ключей было связано с проектами новичков или студентов. Однако наиболее высокооплачиваемые баг-баунти были присуждены за находки GitHub Personal Access Tokens и ключей AWS, которые открывали доступ к чувствительным операциям и данным.
Важным наблюдением стал анализ типов файлов, в которых чаще всего содержались секреты. Стандартный файл .env оказался самым уязвимым, вслед за которым шли javascript-файлы с конфигурацией и докерные скрипты. Это свидетельствует о необходимости внедрения строгих мер по защите таких конфигурационных файлов и использования практик безопасного управления секретами. Особым примером из практики стала находка GitHub PAT с административным доступом ко всем репозиториям Istio — крупного open-source проекта с тысячами звезд и широкой аудиторией.
Обладая такими правами, злоумышленник мог бы осуществить масштабные атаки цепочки поставок, изменяя исходный код, получая доступ к секретным переменным окружения и даже удаляя проекты. К счастью, после информирования команды, соответствующие токены были быстро аннулированы, исключая катастрофические последствия. Несмотря на значительные успехи в автоматизации процессов выявления и анализа, всё же остается много ручной работы, связанной с оценкой найденных секретов. Для этого я создал простую платформу с визуальным интерфейсом для сортировки и фильтрации результатов, что значительно повысило эффективность и скорость расследования. Кроме того, ведется разработка ИИ-агента, способного самостоятельно анализировать значения ключей, связывать их с аккаунтами и определять степень их критичности.
Это позволит в будущем почти полностью автоматизировать процесс. Одним из важных выводов моего проекта является то, что удаление коммитов никогда не должно считаться гарантией безопасности. Каждый единственный секрет, хоть раз попавший в репозиторий, следует считать скомпрометированным и немедленно отзывать или менять. От этого зависит безопасность проекта, бизнеса и данных пользователей. В свете этих открытий стоит пересмотреть подходы к управлению секретами в процессе разработки.
Внедрение сканирования на этапе коммитов, регулярный аудит истории репозиториев и использование специализированных инструментов — обязательные шаги для любой компании, стремящейся минимизировать риски утечки данных. Проект продемонстрировал, как современные сервисы и API позволяют глубоко исследовать историю публичных репозиториев и обнаруживать то, что казалось уже удалённым и недоступным. Использование открытых инструментов, совместно с продуманной автоматизацией, даёт новой волне исследователей и специалистов по безопасности мощные возможности для защиты цифрового пространства. В заключение важно подчеркнуть, что исследования в области безопасности не должны оставаться нишевой областью или уделом специализированных экспертов. Любой разработчик, менеджер или инженер должен понимать принципы управления секретами, а организации — создавать условия, при которых ошибки и утечки сведены к минимуму.
Только таким образом можно защитить свои проекты от непредвиденных атак и сохранить доверие пользователей. Реальные практические кейсы из исследования и внедрение новых подходов помогут командам создавать более надёжное и защищённое программное обеспечение, что всегда является первостепенной задачей в условиях современного цифрового мира, где данные — одна из самых ценных валют.