РелизКод / SDK · В работуTG: @neuraldvig (Нейродвиж)→ оригинал

Claude Code по кнопке «Не спрашивать» сохраняет пароли в файл — 2539 секретов утекли на GitHub

Claude Code при выборе «Да, больше не спрашивать» сохраняет команду целиком, вместе с вшитыми в неё паролями и ключами, в файл .claude/settings.local.json. Если файл попадает в публичный репозиторий, секреты видны всем. Apiiro нашла 2539 секретов в 1994 репозиториях, а удаление файла не помогает, потому что Git хранит историю.

AI-обработка оригинала TG: @neuraldvig (Нейродвиж); редакция Hamidun News
Claude Code по кнопке «Не спрашивать» сохраняет пароли в файл — 2539 секретов утекли на GitHub
Источник: TG: @neuraldvig (Нейродвиж). Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникTG: @neuraldvig (Нейродвиж) ↗
Главный редактор
Ключевой факт #1Найдено 2539 секретов в 1994 публичных репозиториях
Среди утечекпароли БД, SSH-доступы, ключи AWS
Ключевой факт #3Добавьте settings.local.json в .gitignore и смените ключи

Кнопка «Да, больше не спрашивать» экономит секунды, а потом может стоить вам ключей от облака. Исследователи Apiiro обнаружили, что Claude Code при таком подтверждении записывает разрешённую команду в файл настроек целиком, и если в ней были секреты, они остаются там открытым текстом.

Как это происходит

Представьте, что вы просите агента подключиться к базе данных. Он формирует команду вроде psql с паролем прямо в строке подключения или запускает curl с токеном в заголовке. Claude Code спрашивает разрешение, вы нажимаете «Да, больше не спрашивать», и чтобы не переспрашивать в будущем, агент сохраняет правило разрешения в .claude/settings.local.json. Правило содержит команду буквально, вместе с паролем.

Дальше работает обычная человеческая рассеянность. Файл лежит в проекте, разработчик делает git add . и git push, и секрет оказывается в публичном репозитории. Название файла со словом local создаёт ложное ощущение, что он никогда не покинет машину, но на практике его часто никто не исключает из индекса.

Масштаб проблемы

Apiiro нашла 2539 секретов в 1994 репозиториях. Среди них пароли от баз данных, SSH-доступы и ключи AWS. Это не теоретический сценарий, а уже случившиеся утечки, причём такие данные боты-сборщики находят в публичных репозиториях очень быстро.

Отдельная неприятность в том, что удаление файла следующим коммитом ничего не решает. Git хранит всю историю, и секрет остаётся доступен в старых коммитах. Единственный надёжный путь: считать ключ скомпрометированным, немедленно отозвать его и выпустить новый. Чистка истории через filter-repo нужна, но только как дополнительная мера.

Что делать прямо сейчас

  • Проверьте репозитории на наличие .claude/settings.local.json и посмотрите, что в нём записано.
  • Добавьте этот файл в .gitignore, а лучше в глобальный gitignore на машине.
  • Включите pre-commit хуки и сканеры секретов вроде gitleaks или push protection на GitHub.
  • Не передавайте секреты в командах: используйте переменные окружения, менеджеры секретов и профили AWS.
  • Если файл уже был опубликован, ротируйте все указанные там ключи и пароли, не откладывая.

Ограничения и вывод

В этой истории нет злого умысла модели: это дефект дизайна удобной функции, в которой разрешение запоминается в виде полной строки. Остаётся вопрос, как быстро Anthropic изменит поведение, например начнёт сохранять шаблон без аргументов или маскировать чувствительные значения. Пока этого не произошло, ответственность лежит на команде.

Для продактов и основателей вывод шире: любой инструмент с функцией «запомнить моё решение» создаёт новый артефакт с чувствительными данными. Его нужно учитывать в модели угроз так же, как логи, дампы и .env. Агентам мы выдаём всё больше доступа, а гигиена вокруг их файлов настроек пока отстаёт. Потратьте десять минут на аудит сегодня, пока это не сделал кто-то другой за вас.

Сюжет

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

Что известно по теме: как это происходит?

Представьте, что вы просите агента подключиться к базе данных. Он формирует команду вроде psql с паролем прямо в строке подключения или запускает curl с токеном в заголовке. Claude Code спрашивает разрешение, вы нажимаете «Да, больше не спрашивать», и чтобы не переспрашивать в будущем, агент сохраняет правило разрешения в .claude/settings.local.json. Правило содержит команду буквально, вместе с паролем. Дальше работает обычная человеческая рассеянность. Файл лежит в проекте, разработчик делает git add .

Что известно по теме: масштаб проблемы?

Apiiro нашла 2539 секретов в 1994 репозиториях. Среди них пароли от баз данных, SSH-доступы и ключи AWS. Это не теоретический сценарий, а уже случившиеся утечки, причём такие данные боты-сборщики находят в публичных репозиториях очень быстро. Отдельная неприятность в том, что удаление файла следующим коммитом ничего не решает. Git хранит всю историю, и секрет остаётся доступен в старых коммитах. Единственный надёжный путь: считать ключ скомпрометированным, немедленно отозвать его и выпустить новый.

Что известно по теме: что делать прямо сейчас?

Проверьте репозитории на наличие .claude/settings.local.json и посмотрите, что в нём записано. Добавьте этот файл в .gitignore, а лучше в глобальный gitignore на машине. Включите pre-commit хуки и сканеры секретов вроде gitleaks или push protection на GitHub. Не передавайте секреты в командах: используйте переменные окружения, менеджеры секретов и профили AWS. Если файл уже был опубликован, ротируйте все указанные там ключи и пароли, не откладывая.

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

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

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

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