Эфир 18.11 · Поток 318 ноября в 19:00 МСК — бесплатный практический эфир по ИИ-агентам · Живой Поток 3 стартует 23.11Эфир 18 ноября →Поток 3 (23.11)
РелизКод / SDK · В работуArs Technica→ оригинал

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 сливает пароли в GitHub: Apiiro нашла секреты в 1100 файлах настроек
Источник: Ars Technica. Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникArs Technica ↗
Главный редактор
Ключевой факт #1Секреты нашли в ~1100 файлах; 215 не поймали gitleaks и TruffleHog
Ключевой факт #2Баг-репорты с августа 2025 закрыли без действий через 60 дней
Ключевой факт #3Проверьте .claude/settings.local.json и добавьте его в .gitignore репо

Вы запускаете 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.

Сюжет

Вопросы и ответы по материалу

Что известно по теме: как секрет попадает в файл?

Механика простая. Когда пользователь разрешает команду навсегда, 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. Если файл когда-то коммитили, откройте его и поищите пароли и токены. Всё, что нашли, перевыпустите. Удаление файла не отзывает ключ, особенно если есть форки. Не вписывайте секреты в команды, которые одобряете «навсегда». Используйте переменные окружения или менеджер секретов.

ЖХ
Жемал Хамидун — CPO Alpina Digital, продакт-менеджер AlpinaGPT. Делает AI-продукты с 2019 года. Hamidun News — pet project, который вырос в production-агрегатор с 6000+ читателей.
✦ Практика · Hamidun Academy

Соберите рабочего ИИ-агента или сервис своими руками без ручного кода

В Академии Жемала Хамидуна (academy.hamidun.com) открыт бесплатный 72-часовой тест-драйв: интерактивные скетч-уроки по Claude Code и Cursor, живой Tech Radar и готовые шаблоны агентов.

Открыть 72ч бесплатный доступ →Интенсив по Вайб-кодингу
Что вы думаете?
Загружаем комментарии…