Claude Code сохранил пароли в 1122 публичных файлах на GitHub, а расширение браузера могло командовать Claude Desktop

Claude Code сохранил пароли в 1122 публичных файлах на GitHub, а расширение браузера могло командовать Claude Desktop

Кнопка «Да, и больше не спрашивать» в Claude Code оставила пароли и ключи в 1122 публичных файлах на GitHub. Расширение браузера могло отдавать команды Claude Desktop. А забытый ключ от платформы агентов привёл к заражённому релизу LiteLLM.

Главная проблема во всех этих случаях — не сама модель, а доступы, которые скапливаются вокруг агента и о которых никто не помнит.

Коротко

  • Компания Apiiro нашла в публичных репозиториях 1379 уникальных паролей, токенов и ключей, которые Claude Code сохранил в файле .claude/settings.local.json. Если учитывать историю git и сохранённые логи агентов, секретов набралось 2539 в 1994 репозиториях.
  • Forever Security показала, что расширение браузера с доступом к claude.ai могло через функцию Dispatch заставить Claude Desktop запустить программу на компьютере. Anthropic закрывает Dispatch, но, по словам исследователей, та же архитектура осталась в других функциях.
  • У LiteLLM утёкший в мае мастер-ключ от внутренней платформы агентов так и не отозвали. В октябре через него украли токены GitHub и выпустили вредоносную версию пакета.
  • Общий вывод: конфиги и платформы агентов нужно защищать так же, как файлы .env и учётные записи администраторов.

Что случилось

Все эти истории стали публичными в первую неделю ноября, хотя начались раньше. Их объединяет одно: ИИ-агент получает доступ к командам, ключам и чужим системам, а этот доступ остаётся в местах, где его никто не ищет.

Агент — это программа на основе языковой модели, которая не только отвечает на вопросы, но и сама выполняет действия: запускает команды в терминале, правит файлы, открывает pull request. Чтобы работать, ей нужны те же права и пароли, что и разработчику.

Как пароль попадает в файл «больше не спрашивать»

Механика

По умолчанию Claude Code спрашивает разрешения, прежде чем выполнить команду в терминале. Если выбрать «Да, и больше не спрашивать», программа записывает правило-разрешение в файл .claude/settings.local.json внутри проекта. Так это описано в документации Claude Code.

Правило может быть шаблоном, например «любой запуск npm test». А может быть одной конкретной командой целиком. Если в команде был пароль — например, для подключения к базе данных, — он сохраняется в файле открытым текстом.

Масштаб

Apiiro опубликовала исследование 6 ноября. Подробности пересказывает The Hacker News:

  • на GitHub нашлось 104 185 копий этого файла в 103 617 репозиториях;
  • в 1122 копиях — примерно 1,1% — есть хотя бы один секрет, всего 1379 уникальных;
  • больше трети секретов открывают доступ к базам данных напрямую, среди них 379 паролей от баз;
  • ещё там есть 43 логина SSH к публичным серверам, 42 токена GitHub, GitLab и npm, 23 ключа AWS;
  • в старых версиях файла, которые остались в истории git, — ещё 734 секрета, а 211 форков повторяют секреты оригиналов.

Почему не спасает .gitignore

Claude Code пытается не допустить попадания файла в git. Когда он впервые создаёт файл в репозитории, он добавляет его в глобальный список исключений git на компьютере пользователя.

Но эта защита работает только на одной машине и только для одного человека. В собственный .gitignore проекта файл не добавляется, поэтому коллега или CI-сервер могут закоммитить его без предупреждения. Уже закоммиченные копии она тоже не трогает.

Исследователи заметили ещё одну деталь. В 539 из 1105 отслеженных репозиториев файл изменял коммит, где соавтором указан Claude. То есть агент нередко коммитит этот файл сам.

Почему не спасают сканеры

Сканеры секретов ищут знакомые форматы: ключ AWS или токен GitHub выглядят узнаваемо. А пароль, вписанный в команду после PGPASSWORD= или mysql -p, для них — обычный текст. По данным Apiiro, два популярных сканера, gitleaks и TruffleHog, вместе пропустили 215 из 1122 файлов с секретами.

Что известно о реакции

Исследователи сравнили документацию 16 агентов для программирования. По их данным, только Claude Code по умолчанию сохраняет одобренную команду целиком в файле проекта.

Похожий баг-репорт в репозитории Claude Code появлялся ещё в августе 2025 года. Как пишет The Hacker News, его и четыре похожих отчёта закрыл бот за неактивностью, а ответа от Anthropic не было. Публичной реакции компании на исследование на момент публикации нет.

Если коротко: одна удобная кнопка превращает пароль из терминала в строчку JSON, которая потом уходит в git.

Как расширение браузера получило доступ к Claude Desktop

Вторая история — про связь веб-версии Claude и десктопного агента. Claude Desktop умеет работать с файлами и выполнять команды на компьютере. Функция Dispatch позволяла отправлять ему задачи с телефона.

Исследователь Forever Security Гал Вайцман обнаружил, что интерфейс Dispatch был доступен из обычной вкладки claude.ai. Значит, расширение браузера, которому разрешено управлять этим сайтом, могло отправить Claude Desktop задание так, будто его написал сам пользователь.

Кого это касается

По данным исследователей, для атаки нужны два условия:

  • расширение, которое может запускать скрипты на claude.ai. Это может быть вредоносное расширение, легальное с заражённым обновлением или легальное с уязвимостью;
  • пользователь, который вошёл и в claude.ai, и в Claude Desktop, с включённым Dispatch.

Уязвимость браузера для этого не нужна. Поскольку Dispatch связывает устройства, расширение могло дотянуться и до Claude Desktop на другом компьютере с тем же аккаунтом.

Исследователи пишут, что встречали у клиентов личные аккаунты Claude на рабочих ноутбуках. Тогда расширение из домашнего браузера могло бы достать до корпоративной машины.

Тест проводили на одном компьютере, а о реальных атаках, как отмечает The Hacker News, не сообщается.

Хронология раскрытия

  • 14 мая 2026. Forever Security сообщила о проблеме Anthropic.
  • 19 мая. Anthropic признала находку обоснованной, но закрыла отчёт как дубликат проблемы, которую уже нашла сама.
  • 13 октября. Anthropic сообщила, что Dispatch закроют к концу октября.
  • 4 ноября. Forever Security опубликовала разбор.

Главная претензия исследователей — не к самой функции. По их словам, Claude Code Remote Control и сессии Cowork устроены по той же схеме: веб-интерфейс может управлять локальным агентом. Свою позицию они сформулировали так:

«Anthropic закрывает Dispatch, но не архитектуру, на которой он построен» — Forever Security, 4 ноября 2026

Разбор этих двух функций исследователи обещают в следующей публикации.

Один забытый ключ — и заражённый релиз LiteLLM

LiteLLM — популярная Python-библиотека, через которую приложения обращаются к разным языковым моделям. У команды была экспериментальная внутренняя платформа для облачных агентов, которые сами открывают pull request. Для этого платформе выдали токен GitHub владельца организации.

Мастер-ключ — это ключ, который даёт полный доступ к сервису. Вот как, по собственному разбору LiteLLM, развивались события:

  • 27 мая 2026. В публичный репозиторий попал конфиг с мастер-ключом от платформы агентов. Коммит затёрли через force-push, но сам ключ не отозвали.
  • 10 октября. Злоумышленник воспользовался ключом и получил от платформы токен GitHub владельца организации. Права у этого токена не были ограничены.
  • 21 октября, 11:39 UTC. Через украденные токены атакующий перенаправил процесс релиза на поддельный репозиторий и опубликовал на PyPI вредоносную версию 1.107.0.
  • 21 октября, 13:23 UTC. PyPI заблокировал эту версию, после того как исследователь Upwind сообщил об атаке.

По данным The Hacker News, вредоносный пакет крал учётные данные и ставил бэкдор. На той же неделе команда ослабила правило подтверждения релизов, и это облегчило атаку.

Вся цепочка одной строкой: ключ от агента → токен с лишними правами → контроль над релизами.

Botpress: доступ сотрудника к чужим ботам

Четвёртый случай не про агентов для программирования, но про ту же проблему. Botpress — платформа для создания чат-ботов, в том числе на основе ИИ. 6 ноября компания раскрыла инцидент.

Злоумышленник проник во внутренние инструменты, получил API-ключ сотрудника и прочитал настройки ботов в 16 клиентских воркспейсах. У этого сотрудника был доступ администратора к этим воркспейсам, потому что он в них состоял.

В настройках бота хранятся ключи подключённых сервисов: API ИИ-провайдеров, токены мессенджеров, доступы к CRM. Botpress просит клиентов считать все такие ключи скомпрометированными и пересматривает, когда сотрудникам вообще нужен админский доступ к клиентским воркспейсам.

Что общего у этих историй

На наш взгляд, все четыре случая показывают одно и то же. Агент становится новым местом, где скапливаются секреты и права, и это место пока не попадает в привычные проверки безопасности.

  • Конфиги агентов — новый .env. Про .env все знают, что его нельзя коммитить. Про .claude/, .cursor/ и похожие папки — пока нет.
  • У агентов слишком широкие права. Платформе LiteLLM хватило бы токена на один репозиторий, а у неё был токен владельца организации.
  • Подтверждение в интерфейсе — не гарантия. Forever Security отдельно предупреждает, что запрос подтверждения, который показан в интерфейсе, подконтрольном атакующему, не доказывает согласия пользователя.
  • Удалить — не значит отозвать. И LiteLLM, и Apiiro приходят к одному выводу: ключ, попавший в публичный доступ, нужно менять, а не только стирать из файла.

Ограничения и оговорки

  • Исследования делали компании, которые продают защиту. Apiiro занимается безопасностью кода, Forever Security — защитой рабочих устройств. Их цифры и выводы стоит читать как заявления заинтересованной стороны, хотя методику Apiiro описала подробно.
  • Неизвестно, сколько секретов ещё работают. Apiiro не проверяла их. Одна компания из уведомлённых подтвердила, что её ключ был рабочим.
  • Реальных атак через Dispatch не зафиксировано. Исследователи показали возможность, а не инцидент.
  • Позиция Anthropic известна только частично. Компания закрывает Dispatch, но публично не комментировала ни Apiiro, ни выводы о Remote Control и Cowork.
Открытый вопрос. Если агент получает те же права, что и разработчик, кто должен отвечать за то, где он хранит эти права: сам разработчик, его компания или создатель агента?

Что делать разработчикам и компаниям

Если вы пользуетесь Claude Code

  • Проверьте свои репозитории на файлы .claude/settings.local.json и .claude/settings.json, в том числе в истории git.
  • Если там есть пароли или ключи — сначала смените их у сервиса, а потом удаляйте из файла. Ротация — это замена ключа на новый, после которой старый перестаёт работать.
  • Уберите файл из отслеживания командой git rm --cached .claude/settings.local.json и добавьте его в .gitignore самого проекта.
  • Не вписывайте пароли прямо в команды. Передавайте их через переменные окружения или менеджер секретов.
  • Разрешайте шаблоны команд, а не конкретные команды с аргументами.

Если вы отвечаете за безопасность команды

  • Считайте папки агентов (.claude/, .cursor/, .gemini/, .specstory/) такими же опасными, как .env, — и в репозиториях, и на ноутбуках.
  • Добавьте .claude/settings.local.json в шаблоны .gitignore для всех репозиториев организации.
  • Настройте проверку перед коммитом и в CI так, чтобы она ловила пароли внутри команд, а не только известные форматы ключей.
  • Выдавайте агентам токены с минимальными правами — на один репозиторий и с ограниченным сроком.

Если вы пользуетесь Claude Desktop

  • Отключите удалённое управление агентом с других устройств, если оно вам не нужно.
  • Проверьте, каким расширениям браузера разрешён доступ к claude.ai.
  • Не входите в личный аккаунт Claude на рабочем компьютере, где включены функции удалённого управления.

Вывод

Ни одна из этих историй не про ошибку в самой модели. Агенты делали то, для чего их создали: запоминали одобренные команды, принимали задачи с другого устройства, открывали pull request с токеном владельца.

Удобство агентов строится на том, что им доверяют доступы. Значит, проверять нужно не только код, который они пишут, но и всё, что они хранят и что им разрешено. Начать можно сегодня: поиск по .claude/ в ваших репозиториях займёт пару минут.

Полезная новость?

Читайте также

Комментарии

 logo