Исследователи Apiiro обнаружили в общедоступных репозиториях GitHub 1 122 копии файла настроек Claude Code, содержащие как минимум один пароль, токен или ключ. В выборку вошли 104 185 копий .claude/settings.local.json из 103 617 репозиториев: секреты нашлись примерно в 1,1% файлов.
Исследователи не устанавливали, остаются ли все найденные учётные данные действительными. Одна из организаций, уведомлённых в начале недели, подтвердила работоспособность своего ключа. Доказательств использования найденных секретов третьими лицами в исследовании не приводится.
Как секреты попадают в настройки
Claude Code обычно запрашивает разрешение на выполнение команд оболочки. Если выбрать вариант «Да, и больше не спрашивать», инструмент создаёт правило, позволяющее запускать одобренную команду в следующих сессиях без нового запроса.
Правило может содержать шаблон, например npm test *, или конкретную командную строку. Во втором случае Claude Code сохраняет команду целиком. Если разработчик передал в ней пароль, API-ключ либо токен, это значение записывается в .claude/settings.local.json в открытом виде.
Apiiro нашла в публичных файлах сохранённые команды с такими данными и воспроизвела это поведение в актуальных моделях Opus 5.5 и Fable 5.1. Claude Code пытается не допустить попадания локального файла в репозиторий: при первом создании .claude/settings.local.json в git-репозитории файл добавляется в глобальный список исключений git пользователя.
Однако эта настройка действует только для конкретного пользователя и компьютера. Она не защитит проект, если файл уже закоммичен, и не создаёт правила в .gitignore самого репозитория. В 539 из 1 105 изученных репозиториев файл менялся в коммите, где Claude был указан соавтором. По оценке исследователей, это может указывать, что Claude Code нередко сам включает файл в коммит.
Что нашли в GitHub
В 1 122 публичных копиях .claude/settings.local.json выявили 1 379 различных секретов. Значение относили к секретам, если оно соответствовало известному формату ключа либо если пароль или токен находился рядом с адресом публичного сервера; затем вывод должен был подтвердить ИИ-рецензент.
Более трети значений дают прямой доступ к базам данных. В числе находок:
- 379 паролей к базам данных;
- 43 SSH-учётные данные для публичных серверов;
- 42 токена GitHub, GitLab и npm;
- 23 ключа AWS.
Файлы принадлежали 63 организациям, преимущественно разработчикам ПО разных масштабов. К наиболее серьёзным примерам Apiiro отнесла облачный ключ с правами администратора у поставщика СУБД и пароль владельца базы данных с медицинскими записями.
По состоянию на понедельник все файлы с секретами оставались в ветке по умолчанию соответствующих репозиториев. В половине случаев они находились там не менее 217 дней. Удаление файла из актуальной версии проекта само по себе не устраняет утечку: в истории git 509 репозиториев сохранились старые версии ещё с 734 секретами, отсутствующими в текущих файлах, обычно из-за удаления самого файла. Ещё 211 форков 74 репозиториев содержали те же секреты, что и исходные проекты.
Секреты были и в общем файле .claude/settings.json, который команды обычно коммитят намеренно для хранения правил разрешений: их нашли в 298 из 76 011 копий. С учётом этих данных, прежних версий файлов и сохранённых журналов чатов агентов исследователи оценили общий объём утечек в 2 539 секретов из 1 994 репозиториев.
При выборе SIEM-платформы можно отдельно изучить Security Capsule SIEM и сопоставить её с требованиями своей инфраструктуры.
Новости информационной безопасности, технологий и государственного регулирования, а также анонсы новых исследований Tech Threat Lab.
Apiiro также сравнила документацию 16 ИИ-агентов для разработки. По результатам этого сравнения, Claude Code — единственный продукт, для которого подтверждено сохранение полной одобренной команды в файле проекта по умолчанию.
Почему сканеры видят не всё
Исследователи проверили все 1 122 файла с выявленными секретами с помощью gitleaks и TruffleHog, минуя этап верификации самих инструментов. Gitleaks нашёл секреты в 564 файлах, TruffleHog — в 643, а оба сканера одновременно пропустили 215 файлов.
Проблема не ограничивается GitHub. .claude/settings.local.json — обычный JSON-файл в каталоге проекта, поэтому он может попасть в npm-пакет, Docker-образ, ZIP-архив или синхронизируемую папку. Исследователи также отмечают, что вредоносное ПО уже искало секреты на рабочих станциях разработчиков: в сентябре 2025 года червь Shai-Hulud запускал на заражённых системах сканер TruffleHog, который пометил как содержащие секреты более половины файлов.
Что проверить разработчикам и ИБ-командам
Организациям, использующим Claude Code, исследователи рекомендуют искать .claude/settings.local.json и .claude/settings.json во всех репозиториях GitHub организации и отдельно проверять историю git. Проверка нужна и для файлов, удалённых из актуальной ветки.
До очистки необходимо заменить все пароли, токены и ключи, которые когда-либо находились в этих файлах. Только после ротации следует прекратить отслеживание локального файла командой git rm --cached .claude/settings.local.json и добавить его в .gitignore репозитория.
Проверить нужно и локальные копии, даже если они никогда не попадали в git: из правил следует удалить команды с секретными значениями. Вместо передачи учётных данных в командной строке исследователи предлагают использовать переменные, получаемые из менеджера секретов, например $DB_URL. В сохранённом правиле в таком случае останется имя переменной, а не значение. Вместо одобрения единичных команд также рекомендуется разрешать шаблоны, например Bash(npm run:*).
Для ИБ-команд каталоги ИИ-агентов — .claude/, .cursor/, .gemini/, .specstory/ — и файлы памяти агентов следует рассматривать как потенциальные носители секретов наравне с .env. Это относится и к рабочим станциям, и к репозиториям.
Такие пути стоит включить в pre-commit-проверки и сканирование в CI, причём с анализом истории git. Сканер должен распознавать пароли внутри команд, а не ограничиваться известными форматами ключей. .claude/settings.local.json также рекомендовано добавить в корпоративные шаблоны .gitignore. В первую очередь следует проверять учётные данные, связанные с публично доступными серверами: именно они могут обеспечить прямой доступ извне.
О проблеме сообщали с 2025 года
Пользователи Claude Code сообщали о таком поведении ранее. В отчёте об ошибке от 11 августа 2025 года указывалось, что одобренные команды с API-ключами и токенами сохраняются в settings.local.json дословно.
3 января, после 60 дней без активности, автоматический бот закрыл этот отчёт со статусом «не запланировано». По данным Apiiro, все четыре связанных отчёта были закрыты тем же ботом, последний — вчера. Как утверждается в исследовании, Anthropic не ответила на эти обращения.
Практический вывод: настройки и файлы памяти ИИ-агентов нужно включить в инвентаризацию секретов и правила контроля исходного кода. Если .claude/settings.local.json или .claude/settings.json уже публиковались, приоритетная мера — ротация всех когда-либо записанных в них учётных данных, а не только удаление файлов из текущей версии репозитория.
