Claude Code сливает пароли в GitHub: Apiiro нашла секреты в 1100 файлах настроек
Когда в Claude Code нажимаешь «Да, больше не спрашивать», команда целиком сохраняется в файле .claude/settings.local.json — вместе с паролем или токеном, если они были в ней. Файл должен лежать в .gitignore, но на уровне репозитория это правило не работает. Исследователи Apiiro нашли более 100 000 таких файлов в публичных репозиториях GitHub, и примерно в 1100 из них, у 63 организаций, лежали секреты.
AI-обработка оригинала Ars Technica; редакция Hamidun News
Вы запускаете Claude Code, он предлагает выполнить shell-команду, и вы, чтобы не отвлекаться, жмёте «Yes, and don't ask again». Удобно. Но вместе с удобством вы можете незаметно записать в проект свой пароль от базы данных. Именно это, по данным исследователей из Apiiro, происходит в тысячах репозиториев.
Как секрет попадает в файл
Механика простая. Когда пользователь разрешает команду навсегда, Claude Code сохраняет это решение как правило в локальном файле .claude/settings.local.json. Иногда правило записывается как шаблон. Но нередко команда попадает в файл как есть, со всем, что в неё вписано.
Представьте типичный пример: вы просите агента проверить базу, и он запускает psql со строкой подключения, где пароль указан прямо в тексте. Или делает curl с API-токеном в заголовке. Вы одобряете команду «навсегда», и вся строка с секретом лежит в JSON-файле.
Пока файл остаётся на вашей машине, это терпимо (если машину не взломали). Anthropic в документации пишет, что этот файл добавляется в глобальный .gitignore разработчика. Но глобальный .gitignore живёт на вашем компьютере, а не в репозитории. Клонируете проект на другую машину, превращаете папку в репозиторий позже или работаете в команде, и защита исчезает. Apiiro также пишет, что во многих случаях Claude Code сам коммитит изменения в этот файл без участия пользователя.
Масштаб и почему сканеры не спасают
Аналитики Apiiro нашли больше 100 000 случаев, когда локальный файл настроек Claude Code оказался в публичном репозитории GitHub. Большинство из них безвредны. Но примерно в 1100 файлах из 63 организаций обнаружились настоящие секреты: токены API, пароли к базам данных, приватные ключи и даже root-логины.
Удалить файл из репозитория недостаточно. Если проект успели форкнуть, секреты остаются в форках. А значит, ключ нужно считать скомпрометированным, как только он хоть раз попал в публичный коммит.
Отдельно неприятно, что привычные сканеры секретов не гарантируют защиты. Из ~1100 найденных секретов 215 не заметили ни gitleaks, ни TruffleHog. Причина понятна: секрет зашит в строку команды, а не лежит в привычном формате KEY=value.
История тоже не добавляет доверия. О проблеме писали в баг-репортах ещё в августе 2025 года. Другие репорты упоминали, что файл иногда не попадал в .gitignore, а чувствительные команды могли записываться в другой, вообще не защищённый файл. Все эти обращения закрыли без действий после 60 дней неактивности.
На выходных в треде на Hacker News Борис Черни из команды Claude Code ответил, что команда «изучает, что можно сделать». По его словам, такие файлы почти никогда не должны попадать в git, а проблемные случаи возникают, когда файлы создали и закоммитили вручную. Он посоветовал auto mode, где классификаторы сами решают, какие запросы разрешений рутинные. Когда другой пользователь заметил, что и в auto mode чувствительные команды могут сохраняться в настройки, Черни признал: «хорошая находка». Встроенный сканер секретов в Claude Code в команде рассматривают как возможность на будущее.
Что делать сегодня
Ждать патча не стоит. Вот короткий список для разработчиков и тимлидов:
- Добавьте
.claude/settings.local.jsonв.gitignoreсамого репозитория, а не только в глобальный. - Проверьте историю:
git log --all -- .claude/settings.local.json. Если файл когда-то коммитили, откройте его и поищите пароли и токены. - Всё, что нашли, перевыпустите. Удаление файла не отзывает ключ, особенно если есть форки.
- Не вписывайте секреты в команды, которые одобряете «навсегда». Используйте переменные окружения или менеджер секретов.
- Включите pre-commit сканер секретов и не считайте его панацеей: 215 пропусков показывают, что одного инструмента мало.
- Просматривайте сам файл настроек перед пушем. Это обычный JSON, там легко увидеть лишнее.
Это не первый случай, когда ИИ-агент нечаянно раскрывает данные. В прошлом месяце Meta приостановила функцию шаринга в своём агенте Muse: исследователи выяснили, что ссылки на расшаренные материалы легко угадать.
Урок общий для любых агентских инструментов. Всё, что агент запоминает ради вашего удобства, становится ещё одним файлом, который кто-то может случайно опубликовать. Относитесь к конфигам агентов так же строго, как к .env.
- 12 нояб. 2026 г.Дженсен Хуанг ушёл с поста CEO Nvidia: компания потеряла $1,4 трлн за две недели
- 12 нояб. 2026 г.Claude in Chrome требует разрешать каждый клик на сайтах с категорией 3
- 12 нояб. 2026 г.AWS Quick получил шесть агентов для продактов: от жалоб клиентов до спеки
- 12 нояб. 2026 г.Anthropic с 12 ноября закрывает Claude для компаний России, даже с юрлицом за рубежом
Вопросы и ответы по материалу
Что известно по теме: как секрет попадает в файл?
Механика простая. Когда пользователь разрешает команду навсегда, Claude Code сохраняет это решение как правило в локальном файле .claude/settings.local.json. Иногда правило записывается как шаблон. Но нередко команда попадает в файл как есть, со всем, что в неё вписано. Представьте типичный пример: вы просите агента проверить базу, и он запускает psql со строкой подключения, где пароль указан прямо в тексте. Или делает curl с API-токеном в заголовке.
Что известно по теме: масштаб и почему сканеры не спасают?
Аналитики Apiiro нашли больше 100 000 случаев, когда локальный файл настроек Claude Code оказался в публичном репозитории GitHub. Большинство из них безвредны. Но примерно в 1100 файлах из 63 организаций обнаружились настоящие секреты: токены API, пароли к базам данных, приватные ключи и даже root-логины. Удалить файл из репозитория недостаточно. Если проект успели форкнуть, секреты остаются в форках. А значит, ключ нужно считать скомпрометированным, как только он хоть раз попал в публичный коммит.
Что известно по теме: что делать сегодня?
Ждать патча не стоит. Вот короткий список для разработчиков и тимлидов: Добавьте .claude/settings.local.json в .gitignore самого репозитория, а не только в глобальный. Проверьте историю: git log --all -- .claude/settings.local.json. Если файл когда-то коммитили, откройте его и поищите пароли и токены. Всё, что нашли, перевыпустите. Удаление файла не отзывает ключ, особенно если есть форки. Не вписывайте секреты в команды, которые одобряете «навсегда». Используйте переменные окружения или менеджер секретов.
Соберите рабочего ИИ-агента или сервис своими руками без ручного кода
В Академии Жемала Хамидуна (academy.hamidun.com) открыт бесплатный 72-часовой тест-драйв: интерактивные скетч-уроки по Claude Code и Cursor, живой Tech Radar и готовые шаблоны агентов.
Главное из мира ИИ — раз в неделю
7 ключевых событий недели, отобранных вручную. Без шума, репостов и пресс-релизов.
Готово! Проверьте почту — мы отправили подтверждение.