Песочница Claude Code сама убрала запрос разрешения

В Accomplish включили песочницу Claude Code, выставили самый строгий режим разрешений - «не спрашивать» - и отправили в открытом репозитории одно короткое сообщение. Команда из этого репозитория выполнилась у них на Mac: снаружи песочницы и без единого запроса на подтверждение. Дыру Anthropic закрыла в Claude Code 2.1.247.
Запроса не было как раз из-за песочницы, и это самое неожиданное в разборе Accomplish. Когда её включаешь, Claude заворачивает команды агента в Seatbelt - механизм изоляции macOS - и перестаёт спрашивать перед запуском: границы заданы заранее, остальное режет операционная система.
Но свои git-команды обвязка Claude Code запускает мимо песочницы. Она делает это в фоне, чтобы индексировать репозиторий. А у git есть настройка core.fsmonitor: git читает её из .git/config и выполняет как shell-команду каждый раз, когда заглядывает в рабочее дерево. Тот же вектор через конфиг недоверенного репозитория описывали в исследовании GitSpawn.
Значит, агенту, который хочет выбраться, нужно записать core.fsmonitor в какой-нибудь .git/config и заставить обвязку выполнить git-команду, которая эту настройку прочитает. Сама команда уже снаружи песочницы. Мешают четыре преграды, и каждую удалось обойти.
Четыре преграды
- Git-команды укреплены: те, что Claude Code запускает снаружи, идут с флагами, которые гасят
core.fsmonitorи прочие опасные опции. Но один вызов остался без них -git ls-files, обновляющий индекс файлов. - Папку
.gitзащищают: файловые инструменты Claude не пишут внутрь неё, Seatbelt тоже блокирует запись, а свежий клон чужой.git/configне приносит. Переименовать другую папку в.gitзапрещено - но только в корне проекта. Правила Seatbelt для вложенной.gitнет. - git в корне проекта видит чистую
.git. На деле он запускается в том каталоге, где последний раз работал инструмент Bash, - скрипт просто переходит в подкаталог с отравленной.git. - Обвязка не перезапускает ту git-команду сама. Запустить её можно через автозагрузку навыков: когда Claude читает файл, он проверяет его папку на навыки и подгружает найденное, а загрузка навыка обновляет индекс файлов.
Цепочка складывается так: установочный скрипт собирает git-папку под другим именем, пишет в её конфиг core.fsmonitor, переименовывает в .git внутри подкаталога и последней строкой просит Claude прочитать там отчёт о сборке. Чтение подгружает навык, навык запускает обновление индекса - тот самый невычищенный git ls-files - и он выполняется в подкаталоге с отравленной .git. Запроса разрешения нет нигде. Запустить всё это можно и через непрямую инъекцию инструкций - вредоносный текст в данных, которые читает агент.
Граница пожёстче
Укрепление git закрывает именно этот путь, но оставляет принцип: песочница укрывает только shell-команды, а файловые инструменты, MCP-серверы и hooks работают снаружи. В документации Claude Code на этот случай советуют запускать сам процесс в контейнере или виртуальной машине - чтобы всё оказалось под одной границей.
Так устроен и собственный подход Accomplish: весь агент - Bash, git, все запущенные им процессы - сидит в виртуальной машине. Настоящие доступы в гостевую систему не попадают, у агента только заглушки, а его трафик уходит через прокси на хосте, который он не может перенастроить. Отравленный core.fsmonitor при этом всё равно срабатывает, но уже внутри виртуальной машины.
Как закрыли
В Accomplish сообщили о проблеме 13 июля 2026 года, Anthropic разобрала отчёт в тот же день. Первое укрепление вышло 6 августа в 2.1.223, но зацепило не все git-вызовы, и обход просто переехал на другой - исследователи прислали оставшиеся вызовы. Полное исправление приехало 26 августа, в 2.1.247.
Теперь каждая git-команда обвязки гасит core.fsmonitor, и конфиг репозитория ничего запустить не может.
Дальше
Шифр золотых слитков не вскрыли, потому что шифра нет
Из 200 000 смоделированных строк ни одна не вышла такой ровной, как «шифр» с золотых слитков 1933 года. В проекте с Claude буквы пересчитали: 21 из 26 встречается ровно по десять раз, а так не умеет ни один шифр.
Читайте также
- Отчёт о тестах мог украсть ключи через Claude Code Desktop
- Claude по просьбе отдал дамп памяти своей песочницы
- GitSpawn запускает код через Git в Claude Code
- Claude Code получит локальную песочницу для команд
- permcheck прорезает узкое исключение в deny Claude Code
- Пароли из Claude Code осели в 1 122 публичных файлах
Комментарии
Пока никто не написал. Будьте первым.
Присоединяйтесь к разговору
Войдите, чтобы оставить комментарий. Он появится после модерации.

