~/ / Статьи об ИИ / 2,117 действующих секретов в публичных файлах конфигурации MCP: что нашла GitGuardian и как проверить свои
2,117 действующих секретов в публичных файлах конфигурации MCP: что нашла GitGuardian и как проверить свои
Файлу конфигурации, который сообщает ИИ-приложению, какие серверы MCP запускать, часто нужен ключ. В отчёте GitGuardian State of Secrets Sprawl 2026 в файлах конфигурации, связанных с MCP, в публичном GitHub насчитали 24,008 уникальных секретов, и 2,117 из них оказались действующими учётными данными. В статье изложен отчёт, объяснено, что сказано о файлах конфигурации проекта в документации Claude Code, и дана возможность проверить свой файл.
Опубликовано: · Сверено с официальными источниками 2026-10-24. Статья излагает их содержание и не заменяет их.
Что обнаружил отчёт
- GitGuardian опубликовала отчёт State of Secrets Sprawl 2026 17 марта 2026 года. Его данные охватывают 2025 год.
- В нём подсчитано 24,008 уникальных секретов, открытых в файлах конфигурации, связанных с MCP, в публичном GitHub, в том числе 2,117 уникальных действующих учётных данных.
- Только за 2025 год в коммиты публичного GitHub было добавлено 28.65 million новых секретов, прописанных прямо в коде, что отчёт называет ростом на 34% по сравнению с прошлым годом.
- Секретов сервисов ИИ стало 1,275,105, что на 81% больше, чем годом ранее.
- В отчёте сказано, что проблему нередко порождает сама документация, которая подталкивает к небезопасным приёмам: записывать ключи API прямо в файлы конфигурации, аргументы командной строки или встроенные строки подключения.
Почему файл MCP проекта легко утекает
Claude Code хранит серверы MCP уровня проекта в файле .mcp.json в корневом каталоге проекта, и в его документации этот файл описан как общий через систему контроля версий. Ключ, записанный в него, виден всем, кто может читать репозиторий.
| Область | Где хранится | Кто видит |
|---|---|---|
| Локальная (Local) | ~/.claude.json, под путём проекта | Текущий проект, виден только вам |
| Проектная (Project) | .mcp.json в корне проекта | Текущий проект, общий через систему контроля версий |
| Пользовательская (User) | ~/.claude.json | Все ваши проекты |
Не храните ключ в файле
- Claude Code раскрывает ${VAR} и ${VAR:-default} в command, args, env, url и headers, поэтому в файле можно указать имя переменной вместо самого значения. В собственном примере документации заголовок записан как Authorization: Bearer ${API_KEY}.
- Если переменная не задана и не имеет значения по умолчанию, конфигурация всё равно загружается. Claude Code показывает предупреждение и использует текст ${VAR} как написано.
- В url и headers удалённого сервера некоторые переменные с учётными данными читаются как пустые, даже если они заданы. В документации в качестве примеров названы ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN, AWS_BEARER_TOKEN_BEDROCK, HTTPS_PROXY и NPM_TOKEN, и сказано, что переменная с именем API_KEY раскрывается как написано.
- Значение, записанное в args или url, тоже сохраняется в файле, поэтому предупреждение отчёта об аргументах командной строки и встроенных строках подключения относится и к этим случаям.
Проверьте свой файл
Приведённая ниже проверка читает .mcp.json или claude_desktop_config.json в вашем браузере. Она отмечает значения, похожие на секреты, записанные в args, env и headers, с помощью тех же детекторов, что и Prompt Redactor, а также ссылки на переменные, которые Claude Code читает как пустые. Обнаружение основано на эвристике, поэтому она может пропустить секрет или отметить безвредное значение.
Попробовать: MCP Config Checker
Правила проверены по документации 2026-10-23.
Документация: Claude Code / Model Context Protocol / VS Code
Не проверяется: существует ли команда, устанавливается ли пакет, отвечает ли удалённый сервер, а также настройки, которые другие приложения читают по-своему.
Всё выполняется в вашем браузере. Конфигурация не загружается на сервер.
Прежде чем вставлять конфигурацию в чат с ИИ
Файл конфигурации часто вставляют в чат с ИИ, чтобы спросить, почему не запускается сервер. Prompt Redactor маскирует в тексте ключи API, токены, пароли и персональные данные и может вернуть их на место в ответе; всё это происходит в вашем браузере.
Попробовать: Prompt Redactor
Замаскированный текст
Здесь появится замаскированный текст.
Он находит текст с узнаваемой формой. Конфиденциальную информацию, написанную обычными предложениями, он найти не может, поэтому отсутствие находок не означает безопасности.
Прочитайте замаскированный текст, прежде чем отправлять его.
Форматы ключей сверены с документацией производителей и RFC 2026-10-23.
Всё выполняется в вашем браузере. Ни ваш текст, ни таблица восстановления никуда не загружаются.
Если секрет уже попал в коммит
- В документации GitHub сказано, что первым шагом нужно отозвать секрет или заменить его, чтобы им нельзя было получить доступ.
- После замены переписывать историю репозитория, возможно, не требуется, потому что отзыва секрета может быть достаточно для решения проблемы.
- Если коммит есть в форках, он остаётся там доступным. GitHub не может сообщить вам контактные данные владельцев форков.
- Коммиты могут оставаться доступными по своим хешам SHA-1 в кэшированных представлениях на GitHub. Служба поддержки GitHub может удалить кэшированные представления и ссылки для конфиденциальных данных, риск которых нельзя снизить заменой учётных данных.