Блог

Как чужой репозиторий может перехватить Claude Code: 7 правил защиты

Markdown

Четыре документированных пути непрямой инъекции через репозитории, GitHub, события Sentry и метаданные MCP. Первичные исследования и границы защитных мер.

Читать статью полностью

Главное

Опубликованные исследования показывают четыре пути непрямой инъекции: инструкции установки, материалы GitHub, телеметрию и метаданные MCP-инструментов. Отчёты вышли в разные даты и относятся к разным клиентам и разрешениям. Ниже — первичные источники и меры ограничения последствий. Ни один файл настроек не гарантирует иммунитет.

Документация Ailoot: API, ключи и подключение.

Четыре документированных пути от недоверенного текста к действиям агента

Главное

Эти примеры относятся к разным периодам исследования и настройкам клиентов, а не четырём открытиям за две недели. Они показывают влияние недоверенных материалов на инструменты агента. Результат определяют ошибки реализации, доступные ключи и разрешения исполнения.

Такой подход называют непрямой промпт-инъекцией (indirect prompt injection): вредоносные указания поступают не непосредственно от пользователя, а из данных, с которыми агент работает, например из стороннего README, сообщения об ошибке, комментария в GitHub или ответа внешнего сервиса. Далее будем говорить об этом проще.

В рассматриваемых сценариях использовались четыре точки входа:

  1. Обычный на вид репозиторий мог привести к запуску reverse shell.
  2. Заголовок Pull Request мог заставить сразу несколько ИИ-агентов выполнить нежелательные действия.
  3. Поддельное сообщение об ошибке из Sentry могло попасть агенту вместо настоящих событий.
  4. Метаданные MCP-инструмента могли влиять на поведение модели, не получая автоматически полномочия системного промпта.

Как README обычного репозитория может привести к reverse shell?

Главное

В proof-of-concept 0DIN от 25 июня 2026 года показан сценарий: пользователь клонирует обычный на вид репозиторий и просит Claude Code запустить его. Во время установки возникает ошибка с подсказкой выполнить команду «исправления». Она обращается к DNS-записи, содержащей команду атакующего, и запускает reverse shell. Это демонстрация возможного сценария, а не подтверждённый реальный инцидент.

Механика устроена так, что каждый отдельный этап может выглядеть рутинным:

  1. Пользователь получает на вид обычный репозиторий и просит Claude Code запустить его.
  2. Репозиторий устанавливает Python-пакет, который намеренно завершается ошибкой при первом использовании.
  3. Сообщение об ошибке предлагает выполнить команду «исправления»: python3 -m axiom init.
  4. Команда init запускает setup.sh.
  5. Скрипт запрашивает TXT-запись DNS. Такие записи часто содержат служебный текст о домене, но могут хранить произвольную строку. В данном сценарии атакующий помещает туда команду в кодировке base64, а затем передаёт её в bash.
  6. Содержимое DNS-записи можно менять. В результате атакующий получает интерактивный reverse shell с правами пользователя и доступом к доступным на компьютере секретам.

В демонстрации окончательная нагрузка получалась из DNS при выполнении, поэтому сканирование только файлов репозитория её не обнаруживало. Это не доказывает бессилие всех сканеров и защит исполнения: проверка полученного содержимого, наблюдение за процессами и сетевые ограничения могут обнаружить или прервать цепочку. Источник — proof-of-concept, а не измерение частоты реальных инцидентов. Он демонстрирует технику, но не устанавливает, как часто её применяли на практике. Для распространения подобных репозиториев могут использоваться разные каналы, включая объявления о вакансиях, обзоры, публикации и личные сообщения.

Как заголовок Pull Request может повлиять на нескольких ИИ-агентов?

Главное

Отчёт Comment and Control, опубликованный 15 апреля 2026 года и обновлённый 4 мая, описывает разные пути инъекции текста GitHub в Claude Code Security Review, Gemini CLI Action и Copilot Agent. Снижение критичности не доказывает исправление всего класса атак. В отчёте разобраны ответы поставщиков и конкретное ограничение инструмента Claude.

Суть сценария: заголовок Pull Request мог напрямую подставляться в промпт агента без очистки от инструкций.

Исследование описывает следующие пути и реакции. Это исторический отчёт, а не проверка каждой текущей версии продуктов:

АгентКак работала атакаКакие данные могли затрагиватьсяСтатус, указанный в исходном описании
Claude Code Security Reviewзаголовок PR попадал в системный промпт без предварительной очисткиANTHROPIC_API_KEY, GITHUB_TOKENПо отчёту: ограничение ps и изменения документации; критичность изменена на None 20 апреля 2026 года
Gemini CLI Actionподдельная секция «Trusted Content» в комментарии могла обходить защитные инструкцииGEMINI_API_KEYGoogle добавил отдельные guardrail-промпты в системный промпт
GitHub Copilot Agentвредоносное содержимое размещалось в невидимом HTML-комментарии markdownGITHUB_COPILOT_API_TOKEN, COPILOT_JOB_NONCEGitHub считает это архитектурным ограничением, а не ошибкой

Изменение критичности и меры снижения риска не устанавливают полного закрытия всех возможных нагрузок. Репозиторий исследовательского PoC документирует показанный путь Claude. Не запускайте атакующую нагрузку на реальных системах.

Эти примеры показывают, почему важно заранее задавать агенту правила безопасности в CLAUDE.md и settings.json, а не полагаться только на память пользователя. Настройки, сохранённые в конфигурации, применяются при новых сессиях Claude Code и помогают ограничить действия агента.

Может ли поддельная ошибка из Sentry захватить управление агентом?

Главное

В описанном сценарии атакующий отправляет поддельное событие Sentry. Агент получает его через MCP вместе с настоящими и может принять встроенную команду за исправление. Отчёт Tenet Agentjacking, обновлённый 17 июня 2026 года, сообщает об успехе 85% в контролируемых волнах проверки и более 100 запусках агентов, включая Claude Code, Cursor и Codex. Указана запись Claude Code 2-1-161 от 2 июня, но нет полного списка моделей, воспроизводимого harness, точного числа испытаний и разбивки по клиентам. 85% — совокупное наблюдение исследователей, а не вероятность компрометации любой текущей установки.

Для отправки события может быть достаточно DSN-ключа Sentry — публичного идентификатора, который иногда размещают непосредственно в клиентском коде.

Затем разработчик просит агента изучить открытые ошибки в Sentry. Агент получает их через MCP-сервер, среди обычных событий видит поддельное и может выполнить содержащуюся в нём команду, приняв её за инструкцию по устранению проблемы.

Tenet сообщает, что действующие средства защиты не подали сигнал в испытанных средах. Это не доказывает отсутствие следов во всех установках: журналы агента и инструментов, телеметрия устройств и сетевые записи могут фиксировать дальнейшие действия. Атака начинается с внешней телеметрии и затем зависит от фактических инструментов и разрешений агента.

Почему описание MCP-инструмента может влиять на поведение агента?

Главное

Метаданные инструмента могут содержать влияющие на модель инструкции, но это не автоматически полномочия системного промпта. MCPTox, впервые поданный 19 августа 2025 года, исследует отравление реалистичных MCP-инструментов и различия уязвимости по моделям и настройкам. Наблюдение о большей восприимчивости некоторых сильных моделей относится к этому бенчмарку, а не является универсальным законом.

При tool poisoning инструкция прячется в описании на вид безобидного инструмента. Агент может прочитать её как часть корректной работы инструмента и выполнить действие, которого пользователь не просил.

Что объединяет атаки и что может пропустить обнаружение?

Главное

Проверка только репозитория может пропустить нагрузку, позднее полученную из инструментов или сети. Обнаружение полезно, но должно учитывать весь путь исполнения. Сочетайте его с ограничениями файлов, ключей, инструментов и сети, не рассчитывая на распознавание инструкции агентом.

При выполнении команд через bash дополнительный риск возникает, если защита полагается только на регулярное выражение, проверяющее строку, созданную моделью. Bash может интерпретировать её иначе, чем предполагает простой текстовый фильтр.

Практический вывод: ограничивайте фактические возможности агента и проверяйте предлагаемые действия. Обнаружение и сдерживание закрывают разные части атаки; привычный вид отдельных фрагментов кода не доказывает безопасность всей цепочки.

Какие встроенные защиты есть в Claude Code и почему их может быть недостаточно?

Главное

Claude Code применяет несколько защит: анализирует запрос на подозрительные указания, отделяет веб-контент в отдельный контекст, проверяет доверие при первом запуске в новой папке и при подключении MCP-серверов. Флаг --dangerously-skip-permissions отключает запросы разрешений и связанные с ними защитные проверки.

Anthropic описывает эти риски и защитные механизмы в документации Claude Code.

Согласно документации, агент анализирует запрос на подозрительные указания, не одобряет curl и wget автоматически, хранит веб-контент в отдельном контекстном окне и запрашивает подтверждение доверия при первом запуске в новой кодовой базе или подключении нового MCP-сервера.

В документации также подчёркивается, что режим bypassPermissions не защищает от промпт-инъекций и непреднамеренных действий.

Если запустить Claude Code с --dangerously-skip-permissions, агент не будет задавать обычные вопросы о разрешениях. Это может убрать важный момент проверки перед выполнением действия. Для повседневной работы можно использовать режим разрешений default или acceptEdits вместе с sandbox: правки файлов выполняются в рамках настроек, а команды терминала ограничены песочницей.

Как включить sandbox и дополнительно ограничить чтение файлов?

Главное

Команда /sandbox в Claude Code позволяет ограничить доступ агента к файлам и сети. На macOS поддержка доступна из коробки; в Linux и WSL2 требуются пакеты bubblewrap и socat. По умолчанию sandbox ограничивает запись, но чтение некоторых файлов, включая ~/.ssh, необходимо запрещать отдельно.

Чтобы включить sandbox для всех проектов, добавьте настройку в ~/.claude/settings.json:

{
  "sandbox": { "enabled": true }
}

По умолчанию команды sandbox могут записывать данные в рабочую папку проекта и временную папку сессии. Сетевые обращения проходят через прокси; при первом обращении к новому домену Claude Code запрашивает подтверждение. Anthropic сообщает, что по внутренним измерениям компании такая изоляция сокращала число запросов разрешений на 84%.

Стандартная настройка sandbox в первую очередь ограничивает запись, но сама по себе не запрещает чтение файлов, например ~/.aws/credentials и ~/.ssh. Доступ к ним можно закрыть отдельным блоком в том же файле:

{
  "sandbox": {
    "enabled": true,
    "credentials": {
      "files": [
        { "path": "~/.aws/credentials", "mode": "deny" },
        { "path": "~/.ssh", "mode": "deny" }
      ],
      "envVars": [
        { "name": "GITHUB_TOKEN", "mode": "deny" },
        { "name": "NPM_TOKEN", "mode": "deny" }
      ]
    }
  }
}

Так можно исключить указанные переменные и файлы из окружения процесса. Даже если внутри песочницы запустится нежелательный shell-процесс, у него не будет доступа к этим конкретным источникам секретов.

Какие правила permissions.deny добавить?

Главное

Правила deny ограничивают совпавшие действия инструментов, но не являются границей доступа ОС. Косвенные команды и другие инструменты требуют отдельных мер.

Пример базового набора правил:

{
  "permissions": {
    "deny": [
      "Read(~/.ssh/**)",
      "Read(~/.aws/credentials)",
      "Read(.env)",
      "Bash(curl *)",
      "Bash(wget *)",
      "Bash(sudo *)"
    ]
  }
}

Приоритет deny относится к совпавшим запросам инструментов. Он не доказывает недоступность секрета любому подпроцессу или другому инструменту. Дополнительно используйте принудительные ограничения файловой системы и среды.

В Claude Code также есть режим auto: перед выполнением действия его проверяет отдельная модель-классификатор. По умолчанию она блокирует, в частности, схему «скачать код и сразу выполнить его» (curl | bash). Anthropic описывает этот режим как исследовательский: он может уменьшить число запросов разрешений, но сам по себе не гарантирует безопасность. Используйте его как дополнительный уровень защиты, а не вместо sandbox и permissions.deny.

Как проверить репозиторий и MCP-сервер перед подключением?

Главное

Перед запуском стороннего репозитория проверьте его возраст, историю коммитов и источник ссылки. MCP-серверы выбирайте у поставщиков, которым доверяете; Anthropic отдельно указывает, что не проводит аудит безопасности сторонних серверов. Несколько простых проверок помогают оценить источники данных и инструментов, доступных агенту.

Перед запуском репозитория проверьте следующее:

  1. Не начинайте установку по ссылке из письма, публикации или обзора от незнакомого источника, не проверив происхождение проекта.
  2. Если при установке появляется ошибка с предложением выполнить команду для исправления, сначала разберитесь, что именно делает эта команда.
  3. Оцените возраст репозитория и историю коммитов, а не только количество звёзд: популярность сама по себе не подтверждает надёжность.
  4. Незнакомый проект устанавливайте в виртуальной машине, а не на рабочем компьютере с реальными ключами. Anthropic рекомендует изолировать работу с внешними сервисами.

Anthropic рекомендует создавать собственные MCP-серверы либо использовать серверы поставщиков, которым вы доверяете. Компания проверяет коннекторы на соответствие критериям включения в каталог, но не проводит аудит безопасности и не управляет сторонними MCP-серверами.

Ответственность за проверку стороннего MCP-сервера остаётся у пользователя. Дополнительные меры могут включать проверку конфигурации на подозрительные описания инструментов, фиксацию версии пакетов и запись отпечатков описаний в журнале проверок. Эти меры дополняют, но не заменяют ограничения доступа и проверку действий агента.

Семь правил защиты: краткий список

Главное

Основные меры включают настройки sandbox, ограничение доступа к секретам и правила permissions.deny, а также осторожную работу с чужим кодом, ошибками и MCP-серверами. Настройки можно внести в один файл, после чего соблюдать несколько простых правил при повседневной работе.

  1. Включите sandbox командой /sandbox или настройкой "sandbox": {"enabled": true} в ~/.claude/settings.json, а также добавьте блок credentials, запрещающий доступ к ~/.ssh и ~/.aws/credentials.
  2. Настройте permissions.deny для секретных файлов и выбранных команд bash, включая curl, wget и sudo. Запрещающее правило имеет приоритет над разрешением.
  3. Не используйте --dangerously-skip-permissions при работе с чужим или непроверенным кодом: этот флаг отключает запросы разрешений и связанные с ними проверки.
  4. Не разрешайте Claude Code выполнять команду исправления из сообщения об ошибке, пока не проверите её назначение.
  5. Подключайте MCP-серверы только из источников, которым доверяете; Anthropic не проверяет сторонние серверы вместо вас.
  6. Разделяйте сессии по доступу: одна может работать с личными данными, другая — анализировать чужие письма, репозитории и тикеты без секретов, а отдельная — публиковать только материалы, которые вы лично подтвердили. Не объединяйте эти роли в одном чате.
  7. Обновляйте Claude Code и подключённые сценарии автоматизации: исправления известных проблем могут включаться в новые версии.

Что важно запомнить

Ни один отдельный уровень защиты не гарантирует полного иммунитета. Не следует рассчитывать, что Claude Code всегда распознает вредоносное указание в сообщении об ошибке или комментарии к issue. Sandbox и permissions.deny помогают ограничить доступ агента и последствия возможной ошибки.

Если нужен доступ к нейросетям через Ailoot, ознакомьтесь с Ailoot.

Подробнее

Вопросы и ответы

Предсказывает ли заявленный успех 85% риск моей текущей установки?

Нет. Это сводка контролируемых волн Tenet без полного публичного списка моделей, воспроизводимого harness и точного числа испытаний. Инструменты, подтверждения, ключи и сеть вашего агента определяют возможные действия.

Почему недостаточно сканировать только клонированный репозиторий?

Окончательная нагрузка может прийти позже через ошибку, метаданные инструмента или DNS. Проверяйте весь путь исполнения и ограничивайте ключи, файлы, инструменты и сеть. Одни сканеры и deny не доказывают полного сдерживания.

Все статьи