Кодинг-агент получает доступ к вашему терминалу, файловой системе и сети. Это делает его полезным — и уязвимым. В августе 2026 года исследователь Johann Rehberger показал, что Claude Code в auto mode можно заставить выполнить произвольный код с вероятностью до 80%. Механизм атаки — не «игнорируй предыдущие инструкции», а многоходовая цепочка, в которой безопасное решение агента само становится вектором эксплуатации.
В этой статье — разбор конкретной атаки, объяснение, почему режим auto mode не гарантирует безопасность, и пошаговый чек-лист защиты.
Что такое prompt injection
Prompt injection — класс атак на языковые модели, при котором злоумышленник встраивает инструкции во входные данные так, что модель выполняет их вместо (или поверх) задачи пользователя.
Термин пришёл из мира LLM-чат-ботов: пользователь писал в чате «IGNORE PREVIOUS INSTRUCTIONS AND DO X», и модель подчинялась. В 2024–2025 годах подобные примитивные атаки перестали работать на продвинутых моделях.
Ситуация изменилась с появлением кодинг-агентов. Агент не просто отвечает текстом — он запускает команды, читает файлы, подключается к сети. Prompt injection теперь не просьба «напиши стихотворение» вместо кода — а средство выполнить curl на вредоносный сервер и запустить полученный скрипт.
Прямая и косвенная инъекция
Прямая инъекция — инструкция встроена прямо в промпт пользователя или системный промпт. Модели научились противостоять таким атакам: прямые приказы «ignore previous instructions» на frontier-моделях почти всегда отклоняются.
Косвенная (indirect) инъекция — инструкция спрятана во внешних данных, которые агент обрабатывает: веб-страница, файл в репозитории, документ, данные из MCP-сервера. Агент не воспринимает их как «враждебные» — он видит задачу (например, «просуммируй страницу») и выполняет её, не подозревая, что страница содержит отравленный контент.
Именно косвенные инъекции стали актуальной проблемой в 2026 году. Агент работает с ненадёжным контентом — кодом от других разработчиков, зависимостями из npm/PyPI, веб-страницами для скрапинга.
Почему кодинг-агенты — особая мишень
Чат-бот без доступа к инструментам: максимум ущерба — галлюцинация или утечка данных из контекста.
Кодинг-агент с доступом к shell, файлам и сети:
- Shell:
bash,python,curl— выполнение произвольных команд - Файловая система: чтение/запись файлов, включая credential’ы и ключи
- Сеть: скачивание и отправка данных, подключение к C2-серверам
- Git: коммиты, пуши — распространение вредоносного кода
Доступ к инструментам — это и есть основная ценность агента, но одновременно максимальная поверхность атаки.


Атака Rehberger на Claude Code auto mode: пошаговый разбор
26 августа 2026 года Johann Rehberger (embracethered.com) опубликовал разбор многозаходной атаки на Claude Code Opus 5 в режиме auto mode. Вероятность успеха — 60–80% при малом размере выборки.
Входная точка
Пользователь даёт агенту задачу:
Summarize https://archive.[redacted].uk/
Сайт выглядит как каталог записей из блокнотов. На нём есть ссылка на ZIP-архив с «каталоговыми записями» в нестандартном кодировании.
Шаг 1: Переключение с WebFetch на curl
Claude Code по умолчанию использует инструмент WebFetch для получения содержимого страниц. Сервер возвращает ошибку 415 Unsupported Media Type. Агент интерпретирует это как «нужно скачать напрямую» и запускает curl:
WebFetch got a 415. Let me try directly.
Вредоносный сервер не приказывает агенту использовать curl. Он просто создаёт ситуацию, при которой curl — логичный следующий шаг. Ключевой принцип: атака не говорит модели, что делать. Она подталкивывает её к решению, которое ведёт к эксплуатации.
Шаг 2: Скачивание ZIP-архива
curl получает HTTP 303 редирект на ZIP-архив. Внутри — README, CSV-каталог, несколько записей в Base85/zlib-кодировании, бинарный декодер decoder-darwin для macOS и файл struct.py.
Шаг 3: Агент отказывается от бинаря — и это ловушка
Claude видит бинарный файл decoder-darwin и отказывается его запускать. Это đúng с точки зрения безопасности. Но это и есть часть атаки — бинарный декодер служит приманкой.
Шаг 4: Агент пишет свой декодер
Вместо бинаря Claude решает написать Python-скрипт для декодирования:
import base64, zlib, json
Команда выполняется из директории распакованного архива. Python добавляет текущую директорию в sys.path. ZIP-архив содержит файл struct.py — с тем же именем, что и стандартный модуль Python.
Шаг 5: Module shadowing
Когда Python выполняет import base64, модуль base64 внутри себя импортирует struct. Python находит struct.py в текущей директории раньше, чем в стандартной библиотеке. Загружается отравленный модуль.
Вредоносный struct.py экспортирует правильный интерфейс _struct, поэтому обычное декодирование продолжается нормально. Агент получает валидные JSON-записи. Но на этапе импорта также выполняется обфусцированный эксплуат-код.
Шаг 6: Скачивание и запуск финального payload
Обфусцированный код запускает дочерний процесс python3 -I -c ... (флаг -I — изолированный режим, чтобы дочерний процесс сам не заразился рекурсивно). Дочерний процесс скачивает нативный бинарник, делает его исполняемым и запускает. Запускается C2-колбэк, открывается Calculator — доказательство контроля над системой.
Шаг 7: Auto mode блокирует исправление
После выполнения эксплойта Claude иногда замечает проблему и пытается убить вредоносный процесс. Но safety classifier блокирует команду kill — он разрешил создание процесса, но запрещает его завершение:
The safety mechanism itself can become part of the failure. The classifier allowed the creation of the malware process, but then it blocked the command intended to stop it!
— Johann Rehberger
Это ключевой момент: механизм защиты становится частью проблемы. Агент хочет исправить ситуацию, но safety classifier не даёт ему это сделать.
Simon Willison (27.08.2026) прокомментировал:
Run unattended coding agents in a container, VM or OS sandbox. Restrict network egress. Monitor your agents. Do not expose home directories, SSH keys, cloud credentials,… to the agent runtime.
(Запускайте неattended кодинг-агентов в контейнере, VM или песочнице ОС. Ограничьте сетевой исходящий трафик. Мониторьте агентов. Не подвергайте домашние директории, SSH-ключи и облачные credential’ы рантайму агента.)
Auto mode — не «режим безопасности»
Auto mode стал режимом по умолчанию в Claude Code с середины августа 2026 года. Вместо запросов разрешений у пользователя работает второй модели — safety classifier, который принимает решение за вас: можно или нельзя.
Что говорит Anthropic
Boris Cherny из Anthropic (Hacker News Library) заявил:
We just cannot demonstrate prompt injection anymore.
(Мы больше не можем продемонстрировать prompt injection.)
Anthropic заказал стороннюю оценку у Trajectory Labs: 72 сценария косвенных инъекций, по 10 прогонов каждый — 0.00% успех атак на Opus 5 в auto mode.
Что показал Rehberger
Его таргетированная цепочка (ZIP + module shadowing) не входила в набор 72 сценариев. Результат — 60–80% успеха. Оба утверждения верны одновременно: бенчмарк показывает 0.00% на фиксированных сценариях, а реальная таргетированная атака работает.
Anthropic закрыл отчёт как Informative — поведение «working as designed». Позиция: auto mode — удобство, а не гарантия безопасности. Настоящая граница — изоляция ОС и контроль сетевого трафика.

Слои защиты: от классификатора до контейнера
Нет одного решения, закрывающего все вектора атаки. Эффективна комбинация независимых слоёв.

Уровень 1: Auto mode (safety classifier)
Встроенный классификатор Claude Code проверяет каждое действие агента и решает, одобрить или отклонить. Не заменяет изоляцию — работает на уровне логики модели, а не операционной системы.
Уровень 2: –restricted (Claude Code 2.1.248)
Флаг --restricted (или переменная окружения CLAUDE_CODE_RESTRICTED=1), добавленный 27 августа 2026:
- Убирает встроенные tools для запуска команд и кода (Bash и аналоги)
- Убирает
WebFetch(кроме явно указанных в--tools) - Файловые операции ограничены рабочей директорией
- Отказывает в
bypassPermissions - Игнорирует пользовательские, проектные и локальные settings-файлы
Этот флаг устраняет ключевой вектор атаки Rehberger — агент не может выполнить curl или запустить Python-скрипт. Но не заменяет песочницу: если агент найдёт обход (например, через MCP-сервер с файловым доступом), изоляции ОС по-прежнему нет.
claude --restricted "проанализируй код в текущей директории"
Уровень 3: Песочница (контейнер / VM / smolvm)
Рекомендация Simon Willison и Rehberger: изоляция на уровне операционной системы.
Варианты:
— Docker/Podman: docker run --rm -v $(pwd):/app -w /app claude-code — агент работает внутри контейнера без доступа к домашней директории
— VM: полная виртуальная машина с ограниченной сетью и файловой системой
— smolvm: hardware-isolated VM от Simon Willison, cold start 0.6–1.5 с, read-only input mounts
Ключевой принцип: агент не должен видеть SSH-ключи, облачные credential’ы, домашнюю директорию. Рабочее пространство — минимальный набор файлов для задачи.
Уровень 4: Мониторинг и сетевые ограничения
Даже песочница не абсолютна ( sandbox escape — реальность). Дополнительные меры:
- Restrict egress: файрвол, блокирующий исходящие соединения кроме явно разрешённых
- Логирование команд: запись всех shell-вызовов агента для аудита
- Kill cord: hard-stop по времени или по лимиту токенов
- Отдельные credential’ы: временные ключи с минимальными правами
Сравнение режимов безопасности Claude Code

| Режим | Что делает без запроса | Защита от injection | Когда использовать |
|---|---|---|---|
| Manual (default) | Только чтение файлов | Максимальная — каждый шаг одобряется вручную | Чувствительные задачи, незнакомый код |
| acceptEdits | Чтение + правка файлов | Средняя — команды всё ещё запрашиваются | Итерация на коде с ревью |
| Auto | Всё через safety classifier | Зависит от атаки — 0% на бенчмарке, до 80% на таргетированной цепочке | Длинные задачи, но не как замена изоляции |
| –restricted | Файлы в CWD, без shell/fetch | Высокая — устраняет ключевые вектора | Непроверенные задачи, CI/CD |
| bypassPermissions | Всё без ограничений | Минимальная | Только в контейнере/VM |
Ключевой вывод: auto mode + –restricted > каждый по отдельности. Но оба уступают песочнице для работы с ненадёжным контентом.
Чек-лист: как защитить кодинг-агента
-
Включить –restricted для задач, где агент работает с внешними данными или незнакомым кодом:
bash
claude --restricted "рефактори модуль X" -
Запускать агента в контейнере или VM, если он обрабатывает ненадёжный контент (веб-страницы, fork’и, зависимости):
bash
docker run --rm -v $(pwd):/workspace -w /workspace ubuntu:24.04 -
Ограничить сетевой трафик — файрволом или правилами контейнера:
bash
docker run --network none ... # полная изоляция от сети -
Не хранить в рабочей директории SSH-ключи,
.envс токенами, облачные credential’ы. -
Использовать отдельные credential’ы с минимальными правами для агента — не ваш личный API-ключ Anthropic/OpenAI.
-
Настроить логирование — записывать все команды, которые выполняет агент, для последующего аудита.
-
Установить kill cord — лимит по времени и/или токенам, после которого агент принудительно останавливается.
-
Проверять git-диффы — не сливать коммиты агента без ревью. Агент может незаметно внедрить вредоносный код.
-
Не доверять auto mode как барьеру — использовать его для удобства, а не для безопасности.
Честные ограничения
- –restricted убирает функционал: без shell и web-доступа агент не сможет запускать тесты, скачивать зависимости, обращаться к документации. Для таких задач он бесполезен.
- Песочница добавляет overhead: настройка Docker/VM, передача файлов, ограничение возможностей — всё это замедляет работу.
- Нет 100% защиты: даже sandbox escape — реальная угроза. Дополнительные слои снижают вероятность, но не исключают её.
- Модели улучшаются, но и атаки тоже: Rehberger отмечает, что frontier-модели помогают создавать эксплойты. Каталог атак растёт.
- Classifier непредсказуем: поведение safety classifier не документировано полностью. Одно и то же действие может быть разрешено или запрещено в зависимости от контекста.
- На момент публикации: Claude Code 2.1.248 (27.08.2026). Версии, флаги и поведение могут измениться.
Блок российских реалий
Claude Code работает из России через VPN и API. Подписка оплачивается картами Visa/Mastercard, которые в РФ не работают напрямую — реальные способы: виртуальные карты, криптовалюта через промежуточные сервисы, посредники с иностранными картами. Многие используют VPN для подключения к Claude API — Anthropic не публикует список заблокированных регионов, но единичные случаи блокировки аккаунтов при подключении из определённых юрисдикций описываются на форумах.
Тема prompt injection в контексте кодинг-агентов в русскоязычном сегменте практически не освещена. На Habr есть материалы по LLM-безопасности в общем (habr.com/ru/search/?q=prompt+injection), но специфика кодинг-агентов и атаки типа module shadowing не разобраны. На vc.ru и Tproger публикаций по теме на момент написания не обнаружено.
