
Файл налаштувань Claude Code розкриває секрети у 1,122 публічних копіях GitHub
Apiiro знайшла 1,122 публічних копій файлу .claude/settings.local.json Claude Code, що містять принаймні один секрет. Файл може зберігати паролі та ключі API, коли розробники підтверджують команди варіантом Yes, and don't ask again.
Apiiro повідомила, що пошук у публічному GitHub виявив 1,122 копії файлу .claude/settings.local.json Claude Code, які містять принаймні один секрет. Файл може зберігати паролі та ключі API, коли розробники підтверджують команди варіантом Yes, and don't ask again. Одна компанія, яку Apiiro повідомила, підтвердила, що її ключ був активним; дослідники не перевіряли, чи всі секрети досі працюють.
Як зберігаються секрети
Claude Code за замовчуванням запитує перед виконанням більшості команд оболонки, відповідно до документації з дозволів. Коли користувач підтверджує команду і обирає не запитувати знову, Claude Code зберігає правило дозволу у .claude/settings.local.json у проєкті. Пізніше відповідні команди виконуються без запиту. Правило може охоплювати шаблон, наприклад npm test *, або одну точну команду. Якщо точна команда містить пароль або токен, секрет також зберігається у відкритому тексті. Apiiro відтворила поведінку з Opus 5.5 і Fable 5.1.
Claude Code намагається не додавати файл до git. Його документація з налаштувань каже, що під час першого запису файлу у репозиторії git він додає його до глобальних виключень користувача. Цей захист залишається в налаштуваннях git одного користувача на одному комп'ютері і не допомагає файлу, який уже був зафіксований, повідомила Apiiro. Claude Code ніколи не додає файл до власного .gitignore проєкту, тому захист не поширюється разом із проєктом.
Що знайшла Apiiro
Пошук Apiiro виявив 104,185 копій файлу у 103,617 публічних репозиторіях GitHub. Близько 1,1%, або 1,122 копії, містять принаймні один секрет, і разом вони містять 1,379 різних секретів. Більше ніж третина відкриває базу даних безпосередньо, зокрема 379 паролів баз даних. Інші включають 43 входи SSH для публічних серверів, 42 токени для GitHub, GitLab і npm, а також 23 ключі AWS. Серед власників є 63 організації, переважно програмні компанії різного розміру.
Станом на понеділок кожен файл із секретом усе ще перебував на гілці за замовчуванням свого репозиторію, а в половині цих репозиторіїв він був там щонайменше 217 днів. Старіші версії містять ще 734 секрети у 509 репозиторіях, яких немає в жодній поточній копії. Секрети також містяться у 298 із 76,011 копій спільного файлу .claude/settings.json. Якщо врахувати їх, старіші версії та збережені журнали чатів агента, загалом виходить 2,539 секретів у 1,994 репозиторіях.
Що робити
Apiiro рекомендує шукати у GitHub-організаціях файли .claude/settings.local.json і .claude/settings.json та перевіряти історію git кожного репозиторію. Дослідники радять ротувати кожен пароль, токен і ключ, які ці файли будь-коли містили, перед очищенням. Розробникам слід припинити відстеження локального файлу командою git rm --cached .claude/settings.local.json і додати його до власного .gitignore репозиторію. Вони мають видалити кожне правило, що містить секрет, і посилатися на секрети як на змінні з менеджера секретів, наприклад $DB_URL. Розробникам слід підтверджувати шаблони, такі як Bash(npm run:*), замість окремих команд. Для команд безпеки Apiiro рекомендує вважати папки агентів і файли пам'яті агентів такими, що містять секрети, і додавати їх до попередньої перевірки комітів і сканування секретів у CI.
Звичайні сканери секретів пропускають багато з цих файлів. Дослідники запустили gitleaks і TruffleHog по кожній копії без верифікації. З 1,122 файлів із секретом gitleaks позначив 564, а TruffleHog позначив 643, і жоден не позначив 215. Більшість пропусків є паролями, введеними всередині команд.
Джерела: The Hacker News
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.