> · · 8 мин

Claude Code за неделю закрыл четыре обхода собственных разрешений. И удалил ultraplan

Claude Code за неделю закрыл четыре обхода собственных разрешений. И удалил ultraplan

Если читать changelog Claude Code как список фич, за прошлую неделю не случилось ничего: пара удобных мелочей и удаление одной команды. Если читать его как список закрытых дыр, картина другая. В версиях 2.1.221 и 2.1.222 Anthropic починила четыре разных способа обойти собственную модель разрешений. И один из них ровно тот, которым сейчас пользуется npm-червь.

TL;DR: 2.1.221 закрыл обход разрешений Bash через zsh и поломанные проверки PowerShell на путях с кавычками. 2.1.222 закрыл побег из worktree-изоляции в деструктивные git-команды, обход tool-ограничений через собственные PreToolUse-хуки в фоновых агентах и, главное, запретил repo-local настройкам включать Remote Control. Плюс ultraplan удалён совсем — через четыре месяца после появления.

Какие дыры закрыли и почему это важнее фич

Все четыре — про одно: диалог подтверждения показывал одно, а выполнялось другое. Это самый неприятный класс багов в агенте, потому что он обесценивает единственный механизм, который у тебя есть.

Обход разрешений Bash через zsh. В 2.1.221 значится: Fixed Bash tool permission bypass where zsh could execute hidden commands. То есть команда, которую ты одобрил, и команда, которую выполнил zsh, могли отличаться. Проверка шла по видимой строке.

Проверки PowerShell на путях с кавычками. Там же: Fixed PowerShell permission checks on paths containing quote characters. Отдельный привет всем, кто работает из Windows — а это, судя по нашей статистике, немалая часть читателей. Кавычка в пути ломала проверку прав.

Побег из worktree-изоляции. В 2.1.222: Fixed worktree-isolated sessions and their subagents being able to run destructive git commands. Изоляция через worktree — это то, что продаётся как безопасный способ дать агенту порулить репозиторием. Выяснилось, что и сессия, и её субагенты могли выполнять деструктивные git-команды в обход изоляции.

Собственные хуки как средство обхода. Тоже 2.1.222: Fixed PreToolUse auto-allow hooks bypassing tool restrictions in background agent tasks. Ты ставишь PreToolUse-хук, чтобы автоматически разрешать безобидные вещи и не жать Enter сто раз. В фоновых задачах агента этот хук снимал и те ограничения, которые ты снимать не собирался. Механизм для удобства работал как механизм для эскалации.

Почему запрет repo-local настроек на Remote Control — главная строчка недели

Потому что до 2.1.222 файл .claude/settings.json внутри клонированного репозитория мог включить автостарт Remote Control. Теперь может только выключить, а включается это исключительно на уровне пользователя через /config.

Формулировка из changelog: Changed Remote Control auto-start so repo-local settings can no longer enable it. Асимметрия здесь и есть суть правильного дизайна: настройка из недоверенного источника вправе ослабить свои же полномочия, но не вправе их себе выдать.

Насколько это не теория, показывает червь ChainDrop, который прошёл по npm 4 августа: найдя GitHub-токен, он коммитит вредоносные хуки в .claude/settings.json до 50 веток на репозиторий, чтобы заражать разработчиков друг от друга в обход реестра пакетов. То есть класс атаки «репозиторий приносит настройки агента с собой» уже эксплуатируется в проде — и это не про Remote Control конкретно, а про всё, что можно включить из файла в репозитории.

Практический вывод, который не зависит от версии Claude Code: .claude/settings.json, .vscode/tasks.json и любые агентские конфиги — это исполняемый код. В ревью их надо смотреть отдельно и внимательнее, чем обычный диф.

Ещё одна мера из той же серии, но полезная сама по себе: в 2.1.221 добавили mode: 'mask' для файлов с кредами внутри песочницы на Linux и WSL. Агент видит, что файл существует и что-то в нём есть, но не видит содержимого. Дешёвый способ не отдавать .env целиком тому, кому достаточно знать, что переменная задана.

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

Его удалили. Строчка Removed ultraplan feature в 2.1.222 закрывает историю, которая началась 5 апреля, когда мы разбирали его появление в 2.1.90–92.

Официального объяснения нет, но по контексту релизов оно и не нужно. Ultraplan был отдельной сущностью для «планирования в облаке», а за прошедшие месяцы его работу растащили по механизмам, которые оказались общее: dynamic workflows с настраиваемым размером (workflowSizeGuideline появился в 2.1.219), вложенные субагенты до глубины 3 вместо 1 и обычный plan mode. Когда три механизма делают то же самое, четвёртый становится долгом.

Если у тебя в скриптах или в CLAUDE.md осталось упоминание ultraplan — оно теперь мёртвое, и молча. Это единственное, что стоит проверить прямо сейчас.

Что ещё поменялось из полезного

Из мелочей, которые реально меняют рабочий день, самое заметное — Focus view и новое поведение /fork.

  • Focus view (2.1.221) — переключатель в меню чата, который прячет активность инструментов за сводкой по каждому ходу. Когда агент делает сорок вызовов подряд, читать это построчно бессмысленно, а сводку — можно.
  • /fork теперь создаёт новый worktree (2.1.221). Раньше форк сессии жил в том же рабочем каталоге, и две ветки мысли дрались за одни файлы. Теперь разъезжаются физически.
  • /status показывает вид сессии: interactive, attached или unattended. Полезно, когда не помнишь, в фоне у тебя агент или нет — а это ровно тот случай, когда разница в правах максимальная.
  • Фоновые сессии больше не открывают draft PR по своей инициативе — только если задача этого требует. Меньше мусора в репозитории.
  • /usage перестал приписывать расход MCP-серверам (2.1.222) и Stats-панель наконец считает кеш-токены в общих суммах (2.1.221). Если ты сверял расход по /usage и не сходилось — вот причина, цифры до этих версий были кривые.
  • WebSearch больше не падает с 400 на xhigh/max effort без thinking. Мелочь, но она ломала ровно тот режим, в котором ищут сложное.
  • Плагины из /plugin активируются сразу, когда это безопасно, а claude plugin validate теперь предупреждает про имена, которые будут отклонены маркетплейсом.

Подводные камни

  • Обновление не чинит уже испорченное. Патч запрещает repo-local настройкам включать Remote Control, но если вредоносный хук уже лежит у тебя в .claude/settings.json из заражённого репозитория, он никуда не денется. Файлы надо проверить руками.
  • Твои PreToolUse-хуки могли работать шире, чем ты думал. Если ты полагался на связку «хук авторазрешает + ограничения инструментов держат периметр» в фоновых задачах, до 2.1.222 периметра там не было. Стоит перечитать, что именно ты автоматически разрешал.
  • Worktree перестал быть железной границей ещё до патча. Если ты гонял агентов в worktree-изоляции и считал, что деструктивные git-команды туда не дотянутся, это было неверно. Смотри reflog в затронутых репозиториях, а не только текущее состояние.
  • mode: 'mask' только для Linux и WSL. На macOS этого нет, а Mac — основное железо у большой части разработчиков. Маскирование кредов пока не кросс-платформенное.
  • /diff теперь игнорирует твои diff-драйверы и textconv. Изменение правильное с точки зрения безопасности (сырой git blob вместо того, что подсунул конфиг репозитория), но если у тебя настроен кастомный textconv для бинарников или ноутбуков, диффы станут выглядеть иначе. Это не баг.
  • Удаление ultraplan не задепрекейтили заранее. Фича просто исчезла в патч-версии. Для инструмента, который зовут из скриптов, это неприятный паттерн, и он повторится.

Альтернативы: чем ещё ограничить агента

  • sandbox.network.strictAllowlist (появился в 2.1.219) — запрещает всё, чего нет в списке хостов. Самая недооценённая настройка Claude Code: она превращает «агент не должен ходить в интернет» из просьбы в отсутствие маршрута. Ровно то, к чему пришла британская AISI после инцидента с агентами на кибер-полигоне.
  • --ignore-scripts и прокси-реестр — защита не от Claude Code, а от того, что агент поставит в проект. После ChainDrop это стало обязательным, а не опциональным.
  • microsoft/agent-governance-toolkit — внешний слой политик (OPA/Cedar) и tamper-evident аудита, если не хочется зависеть от того, насколько корректно работает permission-модель конкретного вендора. Правильный ответ на неделю, в которой нашлось четыре обхода.
  • Отдельный юзер в ОС или контейнер под агента — скучно и надёжно. Все четыре бага этой недели упирались в то, что процесс агента мог больше, чем показывал. Границу уровня ОС так не обойти.

Вердикт

Обновляйся сегодня, без раздумий: claude update. Это не релиз с фичами, это релиз, где закрыли четыре обхода модели разрешений, включая два, которые ломали изоляцию фоновых агентов и worktree. Отдельно быстро обновляются те, кто работает из Windows (проверки PowerShell на путях с кавычками) и те, кто автоматизирует подтверждения через PreToolUse-хуки.

Только не считай обновление достаточным. Патч про Remote Control закрывает один вход, а класс атаки «репозиторий приносит с собой настройки твоего агента» уже работает в реальном мире — сходи и прочитай глазами свои .claude/settings.json во всех проектах и ветках. И убери из скриптов ultraplan, он теперь просто не существует.

Как попробовать

  1. Обнови и сверь версию: claude update, затем claude --version. Тебе нужна 2.1.222 или новее, полный changelog лежит в репозитории.
  2. Проверь агентские конфиги на чужие правки, во всех ветках: git log -p --all -- .claude/settings.json .claude/settings.local.json .vscode/tasks.json.
  3. Проверь, что Remote Control включён там, где ты этого хотел: /config на уровне пользователя, и убедись, что ни один репозиторий не пытается его поднять.
  4. Перечитай свои хуки: cat .claude/settings.json | grep -A5 PreToolUse — и подумай, что именно они авторазрешали в фоновых задачах до патча.
  5. Включи то, что стоит включить: sandbox.network.strictAllowlist со минимальным списком хостов, а на Linux/WSL — mode: 'mask' для файлов с кредами. И попробуй Focus view в меню чата на длинной задаче, разница в читаемости заметна сразу.
$ ls ./related/

Похожие статьи

turbofieldfare-gemma-2gb.md
26B-модель в 2 ГБ памяти: Gemma 4 на восьмигиговом MacBook Air, потому что память подорожала
> · 6 мин

26B-модель в 2 ГБ памяти: Gemma 4 на восьмигиговом MacBook Air, потому что память подорожала

TurboFieldfare держит в памяти только общее ядро модели на 1,35 ГБ, а экспертов под каждый токен стримит с SSD. Gemma 4 26B укладывается примерно в 2 ГБ вместо 14,3 ГБ и выдаёт 5–6 токенов в секунду на 8-гиговом M2 MacBook Air.

ai llm open-source macos
copilot-word-ai-worm.md
AI-червь в Word: Copilot вклеивает чужие инструкции в твой документ, и он заражает следующий
> · 6 мин

AI-червь в Word: Copilot вклеивает чужие инструкции в твой документ, и он заражает следующий

Скрытые инструкции в документе заставляют Copilot for Word изменить создаваемый файл и скопировать в него сам вредоносный промпт белым текстом. Заражённый документ становится новым вектором. На 28 июля атака воспроизводится со всеми митигациями Microsoft.

ai security copilot microsoft
kimi-k3-weights-vs-opus-5.md
Веса Kimi K3 выложили: 2,8T параметров бесплатно и 164 секунды до первого токена
> · 8 мин

Веса Kimi K3 выложили: 2,8T параметров бесплатно и 164 секунды до первого токена

Moonshot выложила веса Kimi K3 27 июля вместе с техническим отчётом. Независимые замеры: Opus 5 впереди по общему баллу, K3 берёт мультимодальность и стоит на 40% дешевле — ценой 164,6 секунды до первого токена против 21,7 у Opus.

ai llm open-source benchmark
subscribe.sh

$ cat /dev/blog/updates

> Свежие заметки о программировании,

> DevOps и AI — прямо в мессенджер

./subscribe