Технологии

Claude Code сохранял пароли открытым текстом, и 1122 файла оказались на GitHub

Susan Hill
Добавьте нас в Google

Прежде чем выполнить большинство команд оболочки, Claude Code запрашивает разрешение. Среди предложенных вариантов есть «Да, и больше не спрашивать». Если выбрать его для команды с паролем — например, с данными для входа в базу данных, — Claude Code может записать команду целиком, вместе с паролем, в текстовый файл настроек внутри проекта. Исследователи в сфере безопасности обнаружили тысячи таких паролей и ключей в публичных репозиториях кода на GitHub, где их может прочитать кто угодно.

Если вы пользуетесь Claude Code, ищите файл с названием settings.local.json. Он находится в скрытой папке .claude в корне репозитория и перемещается вместе с проектом, если этому не помешать. Так происходит во всех странах, где доступен инструмент. Изменить привычку можно за минуту, а вот устранение последствий утечки пароля занимает гораздо больше времени: удаление файла не убирает его из истории git и форков других пользователей.

Как сообщает The Hacker News со ссылкой на исследование компании Apiiro, специализирующейся на безопасности программного обеспечения, при поиске по публичным репозиториям GitHub были обнаружены 104 185 копий этого файла в 103 617 репозиториях. Примерно в 1,1% случаев — то есть в 1 122 копиях — нашёлся как минимум один секрет, а всего исследователи выявили 1 379 разных учётных данных. Более трети из них давали прямой доступ к базам данных; в том числе речь идёт о 379 паролях к базам данных. Среди находок также 43 учётные записи SSH для публичных серверов, 42 токена для GitHub, GitLab и npm, а также 23 ключа Amazon Web Services.

Проблема коснулась не только любителей. Apiiro установила, что файлы принадлежали 63 организациям, преимущественно софтверным компаниям разного масштаба. Среди самых тревожных находок — облачный ключ с правами администратора, принадлежащий поставщику баз данных, и пароль владельца базы медицинских записей. В старых версиях файла из истории git обнаружились ещё 734 секрета в 509 репозиториях, а в 211 форках 74 репозиториев сохранились те же секреты, что и в оригиналах. Если добавить общий файл настроек, который команды намеренно включают в репозитории, и сохранённые журналы переписки с агентом, число вырастает до 2 539 секретов в 1 994 репозиториях.

Claude Code действительно пытается не допустить попадания файла в систему контроля версий. В документации Anthropic по настройкам сказано, что при первой записи файла инструмент добавляет правило в глобальный список исключений git пользователя, благодаря чему git игнорирует файл на этом компьютере. Но это правило не переносится вместе с проектом на ноутбук коллеги, сервер сборки или новую машину и не поможет, если файл уже попал в коммит. В 539 из 1 105 исследованных репозиториев, которые удалось проследить, файл менялся в коммите, где Claude указан соавтором; это позволяет предположить, что нередко его коммитит сам агент. Из 16 программных агентов для кодинга, чью документацию сравнила Apiiro, только Claude Code, как удалось подтвердить, по умолчанию сохраняет полную одобренную команду в файле проекта.

Обычные средства защиты пропускают немало таких случаев. Apiiro проверила все копии двумя популярными сканерами секретов с открытым исходным кодом — gitleaks и TruffleHog. Первый обнаружил секреты в 564 из 1 122 файлов, второй — в 643, а 215 файлов не выявил ни один из них. Чаще всего пропущенными оказывались пароли, введённые после PGPASSWORD=, sshpass -p или mysql -p: для инструмента, который ищет известные форматы ключей, они выглядят как обычные слова.

У этих выводов есть оговорки. Apiiro продаёт инструменты для защиты разработки с применением ИИ, поэтому исследование одновременно служит рекламой её продуктов. Компания не проверяла, работают ли найденные учётные данные до сих пор, хотя одна из организаций, получивших уведомление, подтвердила, что её ключ всё ещё был активен. Значение считалось секретом, если соответствовало известному формату ключа или находилось рядом с адресом публичного сервера и проверка с помощью ИИ подтверждала находку, — так что часть результатов может оказаться ложноположительной. Apiiro также отмечает, что наличие Claude среди соавторов коммита не доказывает, будто именно он добавил каждый раскрытый секрет. И GitHub — лишь видимая часть проблемы: файл представляет собой обычный JSON в папке проекта, поэтому он может попасть и в пакет npm, образ Docker, ZIP-архив или синхронизируемую папку.

Первый совет исследователей — заменить все пароли, токены и ключи, которые когда-либо хранились в этом файле, и только потом наводить порядок: если секрет был опубликован, его уже следует считать скомпрометированным, даже если переписать историю. Затем нужно прекратить отслеживать файл с помощью git rm —cached, добавить его в собственный файл .gitignore репозитория и открыть /permissions в Claude Code, чтобы удалить все сохранённые правила с секретами. Если обращаться к учётным данным через переменные окружения, в сохранённом правиле будет храниться имя вроде $DB_URL, а не сам пароль. А одобрение шаблонов вместо отдельных команд вообще не позволит заносить в файл буквальные значения аргументов.

Пользователи уже сообщали об этой проблеме. В заявке об ошибке, поданной 11 августа 2025 года, говорилось, что одобренные команды с ключами API и токенами дословно сохраняются в settings.local.json. 3 января автоматический бот закрыл её с пометкой «не планируется к исправлению» после 60 дней без активности. Apiiro, опубликовавшая результаты 6 ноября, сообщает, что все четыре упомянутые ею связанные заявки были закрыты тем же ботом; последняя — 6 ноября, без ответа от Anthropic. По состоянию на 2 ноября каждый обнаруженный файл всё ещё находился в основной ветке своего репозитория; в половине случаев он оставался там не менее 217 дней.

Ни The Hacker News, ни Apiiro не сообщают об ответе Anthropic, а описанное поведение не изменилось: в следующий раз, когда вы выберете «больше не спрашивать» для команды с введённым в неё паролем, этот пароль тоже сохранится.

Теги: , , , , ,

Добавьте нас в Google

Обсуждение

Имеется 0 комментариев.