В публичных репозиториях GitHub нашли 543 тысячи действующих секретов
Truffle Security изучила 224 млн публичных репозиториев GitHub и нашла 543 тысячи действующих секретов. Многие из них оставались открытыми годами, а часть не распознаёт встроенная блокировка утечек.
12 октября 2026 года, как пишет Хабр, Truffle Security представила результаты анализа публичных репозиториев GitHub. Аналитики изучили 224 млн репозиториев и 58 млрд файлов и обнаружили 543 тысячи токенов, ключей и паролей, которые продолжают использоваться. Исследование показывает не только масштаб публикации секретов в коде, но и то, как долго они могут оставаться в открытом доступе.
Секреты остаются открытыми годами
В среднем найденные данные находились в публичном доступе 784 дня. Самые старые обнаруженные ключи, которые всё ещё действовали, датировались 2009 годом. Иными словами, давняя публикация не обязательно становится безобидной со временем: имеет значение, был ли прекращён доступ по опубликованным данным.
Доля действующих данных сильно различалась в зависимости от сервиса. Среди 101 886 найденных токенов NPM действующим оказался только один — около 0,001%. Для GitHub результат составил 260 из 73 048 токенов, или 0,35%. Среди 30 437 токенов Hugging Face действовали 15 — примерно 0,05%.
У данных для подключения к PostgreSQL соотношение оказалось другим: активными оставались 11 465 из 12 985, или 88%. Для MySQL исследователи указали долю 74%. У Google Cloud действовали 69 041 из 126 963 найденных данных — 54%; у SendGrid — 9 189 из 22 800, или 40%; у Docker Hub — 1 244 из 3 790, или 33%.
Разница между этими показателями важна для оценки результатов. Большое количество найденных токенов само по себе не говорит, сколько из них ещё действует. Но и низкую долю действующих токенов одного сервиса нельзя переносить на доступы к другому: в опубликованных данных для подключения к PostgreSQL исследователи увидели совсем иную картину.
Что пропустила блокировка при отправке кода
Около 200 тысяч единиц данных попали в репозитории после того, как GitHub по умолчанию включил механизм блокировки утечек при отправке изменений. Он проверяет содержимое на этапе push и способен распознавать токены ряда популярных сервисов: GitHub, AWS, Slack, SendGrid, Stripe и GCP.
Судя по результатам анализа, этого недостаточно, чтобы перехватить все публикации секретов. Часть данных находилась в форматах файлов, которые механизм не поддерживает, поэтому проверка их не распознала. У защиты есть и ограничения по типам данных: она пропускает параметры подключения к базам данных, ключи доступа к API Google и закрытые ключи.
Для параметров подключения к базам данных причина такого решения указана отдельно — стремление избежать ложных срабатываний. Это объясняет ограничение, но не меняет его последствий для репозитория: опубликованные данные подключения могут остаться вне этой автоматической проверки.
Поэтому успешная отправка изменений говорит лишь о том, что механизм не остановил конкретный push. Она не означает, что среди файлов нет секретов. Особенно важно различать эти вещи, когда речь идёт о форматах, не охваченных проверкой, или о типах доступов, которые она намеренно пропускает.
Что это значит для сайтов и команд
Практический вывод для команды, которая ведёт публичный репозиторий, — проверять его на секреты и выяснять, продолжают ли обнаруженные данные действовать. Если доступ остаётся активным, его нужно своевременно заменить. Удаление строки из текущего файла и прекращение действия опубликованного секрета — разные задачи.
Владельцу сайта не обязательно различать все виды токенов, чтобы задать команде конкретный вопрос: проверялся ли опубликованный код и что сделали с найденными действующими доступами. Для разработчика результаты исследования дают ориентир, на что обратить внимание при такой проверке: среди обнаруженного могут быть не только токены сервисов, но и данные подключения к базе.
Моё мнение: успешный push не повод успокаиваться
Я пишу первые приложения на TypeScript и как раз учусь не превращать работу с базой в приключение, поэтому сильнее всего меня задел показатель по PostgreSQL. Из найденных данных подключения активными оставались 88%. Для меня это хороший повод внимательнее смотреть на собственный код перед публикацией и не считать, что очевидные токены — единственное, что может там оказаться.
Мне нравится сама идея остановить ошибку при отправке изменений: предупреждение на этом этапе полезно. Но после этих цифр я бы не стал воспринимать отсутствие предупреждения как итог проверки. Мне спокойнее сначала поискать секреты в репозитории, затем разобраться, действуют ли найденные доступы, и при необходимости заменить их. Автоматическая блокировка помогает, но привычку проверять опубликованный код она за меня не создаст.
Источники
Откуда новость. Текст — пересказ своими словами, факты — из источника, мнение — автора.
начинающий fullstack-разработчик
Пишу первые приложения на TypeScript и учусь не превращать каждый запрос к базе в приключение. Сейчас собираю каталог местных мастерских, чтобы потренировать фронтенд и API.
Все публикации автораПохожие статьи
GitHub может временно запрашивать авторизацию для клонирования публичных репозиториев
При аномальном трафике GitHub может временно требовать авторизацию для отдельных операций git clone и git fetch по HTTPS. Разработчикам стоит проверить автоматические сборки, которые получают код без авторизации.
GhostAction: взломаны около 1 900 аккаунтов GitHub, затронуты более 30 000 репозиториев
Кампания GhostAction затронула около 1 900 аккаунтов GitHub и более 30 000 репозиториев. Злоумышленники пытались похитить секреты CI/CD, облачные ключи и API-ключи ИИ-сервисов.
Исследование NBER: AI-агенты увеличили число коммитов на 240%, релизов — на 30%
Исследование NBER на данных более 500 000 разработчиков показало: автономные AI-агенты увеличили число коммитов на 240%, но релизов стало больше лишь на 30%.
Обсуждение 4
Бен М.
Интересно, насколько часто такие секреты находят уже после утечки: есть ли в исследовании разбивка по тому, какие типы токенов блокировка GitHub пропускает чаще всего?
Лев Истрати Автор публикации
В приведённом разборе точной разбивки по типам токенов, которые пропускает блокировка GitHub, нет — там только общий вывод, что часть действующих секретов встроенная проверка не распознаёт. Зато цифры по NPM показывают, что найденные токены далеко не одинаково опасны: из 101 886 действовал только один. Хочу отдельно посмотреть, есть ли у Truffle Security классификация именно пропусков по сервисам и причинам.
Оливер Лопеш
Раз уж точной разбивки по типам пропусков нет, известно ли хотя бы, проверяла ли Truffle Security отдельно секреты, которые GitHub уже умеет сканировать, и те, для которых у него нет детекторов? Иначе цифра в 543 тысячи смешивает проблемы правил и случаи, когда блокировка вообще не могла сработать.
Ээро Лайне
вот разбивка по типам токенов была бы полезнее общего числа: в тексте, например, NPM почти весь оказался уже недействующим, но непонятно, что именно чаще проскальзывает мимо блокировки GitHub. у Truffle есть такой срез или они только суммарные цифры дали? я пока учусь настраивать проверки и пытаюсь понять, какие секреты особенно важно ловить отдельно — магией один успешный push, как выяснилось, не становится