Перейти к содержанию

claude-code

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

Claude News

Исследователи включили песочницу Claude Code, выставили самый строгий режим разрешений, открыли репозиторий и отправили одно короткое сообщение. Команда из этого репозитория выполнилась на их Mac снаружи песочницы и без единого запроса, причём, как пишет Accomplish, запроса не было именно из-за песочницы.

Коротко

  • Anthropic закрыла цепочку 26 августа 2026 года в Claude Code 2.1.247: каждая git-команда обвязки с тех пор гасит core.fsmonitor, и конфиг репозитория ничего не запускает.
  • С включённой песочницей Claude Code заворачивает команды агента в Seatbelt и перестаёт спрашивать, но собственные git-команды обвязки идут мимо песочницы, и вызов git ls-files остался без защитных флагов.
  • Правило Seatbelt, запрещающее переименование папки в .git, действует только для корня проекта, поэтому скрипт собирает отравленную .git в подкаталоге и подсовывает её фоновой индексации.

Если вы не следили за этой линией: та же группа раньше публиковала побег из песочницы Claude Cowork, где, по описанию Accomplish, хватило подключённой папки и одного сообщения, а отчёт закрыли со статусом Informative. Параллельно похожий класс ошибок описывала Manifold Security: по данным The Hacker News, восемь находок в семи консольных агентах, где конфиг самого репозитория называет команду, а агент выполняет её на машине разработчика.

Обвязка запускает git мимо песочницы, и вызов git ls-files остался невычищенным

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

В git есть настройка core.fsmonitor: в ней лежит команда, которую git выполняет, чтобы узнать об изменившихся файлах, и читает её git из .git/config самого репозитория. Похоже на записку на двери склада: кто заглянул внутрь, сначала делает то, что там написано.

Команды, которые обвязка запускает снаружи, закалены: им передают флаги, гасящие core.fsmonitor и другие опасные опции. Один вызов остался без них, git ls-files, тот самый, что обновляет индекс файлов, и через него всё и получилось.

Переименовать папку в .git нельзя только в корне проекта

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

Запрет работает для .git в корне проекта. Правила Seatbelt, которое запрещало бы то же самое для вложенной папки, в профиле нет. Установочный скрипт собирает git-папку под другим именем, вписывает в её конфиг core.fsmonitor и переименовывает её в .git внутри подкаталога.

Остаётся заставить обвязку выполнить git именно там. Она работает не в корне проекта, а в том каталоге, где последний раз работал Bash-инструмент, так что скрипт просто переходит в подкаталог с отравленной .git.

Чтение одного файла подгружает навык, а навык обновляет индекс

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

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

Участия пользователя на этих шагах уже не нужно, хватает одного сообщения в Claude Code. По описанию Accomplish, ту же цепочку можно завести и через непрямую инъекцию промпта, когда инструкцию агенту подсовывает содержимое, которое он читает.

Anthropic закрыла цепочку за полтора месяца, а Accomplish держит агента в виртуальной машине

Отчёт ушёл в Anthropic 13 июля 2026 года и был разобран в тот же день. 6 августа вышло первое усиление в 2.1.223, но оно зацепило не все git-вызовы, и побег переехал на соседний. Исследователи отправили список оставшихся, и 26 августа в 2.1.247 дыру закрыли целиком.

Свой агент Accomplish целиком держит в виртуальной машине: bash, git и все порождённые процессы. Настоящие учётные данные в гостя не попадают, у агента только заглушки, а трафик идёт через прокси на хосте, который агент не может перенастроить. Отравленный core.fsmonitor там тоже выполнится, но уже внутри виртуальной машины. До вашего Mac команда из репозитория не дотягивается.

Странно, что запрет на переименование папки в .git оказался привязан к корню проекта: остальные ограничения на запись внутрь .git расписаны подробно, а вложенные каталоги из набора выпали. Что делать тем, кто сидит на версиях до 2.1.247, кроме обновления, в разборе не сказано, как и то, как сценарий с непрямой инъекцией выглядит на практике.

Вторая цепочка ещё открыта

По данным The Hacker News, при перепроверке 1 сентября исправления вышли для goose, Claude Code и Cursor, а Hermes Agent, Qwen Code, Grok Build и второй путь в Claude Code на тот момент всё ещё выполняли команды из репозитория. Сроков по ним не называют. Обновление до 2.1.247 закрывает описанную в Beltdown цепочку, но за версиями, которые выйдут дальше, стоит следить отдельно.

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

  1. GitSpawn запускает код через Git в Claude Code
  2. Claude Code получит локальную песочницу для команд
  3. permcheck прорезает узкое исключение в deny Claude Code
  4. Из аккаунтов Claude Max воруют токены через инфостилеры
  5. Embrace The Red описал обход авторежима Opus 5
  6. Обходы входа в четырёх реализациях SAML нашёл Opus

Комментарии

Пока никто не написал. Будьте первым.

Присоединяйтесь к разговору

Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.

Из Google мы используем только имя и аватар. Почту не сохраняем.