Уязвимость Brotli в Claude Code: почему мало обновить Node.js

Обновите Claude Code и отдельные среды Node.js или Bun, проверьте, какой исполняемый файл запускается, и проведите инвентаризацию CI. Номер версии клиента сам по себе не подтверждает исправление встроенного декодера.

Содержание
Уязвимость Brotli в Claude Code: почему мало обновить Node.js

Если вы проверяете Claude Code из-за уязвимости Brotli, обновите тот исполняемый файл, который действительно запускаете, перезапустите клиент и отдельно установите исправления для Node.js или Bun, используемых другими инструментами. Обновление системного Node.js не заменяет встроенную среду выполнения Claude Code; это относится и к актуальной установке через npm, которая поставляет нативный исполняемый файл. По состоянию на 2026-10-23 примечание Anthropic к выпуску 2.1.308 не подтверждает исправление Brotli, поэтому одного этого номера версии недостаточно, чтобы считать проверку безопасности завершённой.

Почему стоит проверить агентов, которые загружают веб-страницы

Опасность возникает, когда процесс распаковывает данные Brotli, которыми управляет атакующий. Агент может получить такие данные при загрузке документации или сборе содержимого сайта — ещё до того, как модель увидит текст страницы.

CVE-2026-111497 — запись за пределами буфера в декодере Google Brotli. В записи CVE, подготовленной Google, описаны возможная утечка памяти, отказ в обслуживании и выполнение произвольного кода при обработке специально сформированного сжатого потока. Google оценивает уязвимость в 9.2 балла по CVSS 4.0, уровень Critical; в бюллетене Node.js её влияние на Node.js отнесено к уровню High.

Согласно документации Bun по fetch, автоматическая распаковка ответов включена по умолчанию и поддерживает Brotli. Поэтому инструмент, использующий fetch() в Bun, может вызвать этот декодер, когда сервер возвращает Content-Encoding: br.

Это основание проверить инструменты, которые загружают данные локально. Попадёт ли конкретная операция Claude Code в уязвимый декодер, зависит от её реализации и от того, где выполняется загрузка. Локальный MCP-сервер, команда оболочки и удалённый сервис получения страниц могут работать в разных средах выполнения.

Защита входящих запросов с помощью WAF не охватывает все такие случаи. В рекомендациях Vercel отдельно разобраны входящие запросы и ответы, которые приложение получает по собственным запросам: WAF не заменяет обновление среды выполнения, обрабатывающей эти ответы.

Какие версии действительно содержат исправление

Исправленные версии Node.js и Bun подтверждены первичными источниками. Какой именно выпуск Claude Code первым получил исправление, нужно подтвердить отдельно.

По состоянию на 2026-10-23:

КомпонентПодтверждённая версия с исправлениемЧто обновить
Node.js 22.x22.23.4Исполняемый файл Node, который использует конкретное приложение или инструмент
Node.js 24.x24.22.1Исполняемый файл Node, который использует конкретное приложение или инструмент
Node.js 26.x26.12.1Исполняемый файл Node, который использует конкретное приложение или инструмент
Официальные выпуски Bun1.4.4Отдельную установку Bun либо приложение, в которое он встроен
Claude CodeПервый исправленный выпуск не установлен по проверенным официальным источникамОбновить клиент через его канал установки и сохранить подтверждения для конкретной сборки

В бюллетене Node.js от 21 октября перечислены все три исправленные версии Node. Сравнивайте версии внутри соответствующей ветки: для Node 24 нужна 24.22.1 или последующая версия с исправлением, а не просто номер, численно превышающий 22.23.4. Для Node.js 20 это исправление не выпускается; Vercel рекомендует перейти на поддерживаемую ветку.

В Bun исправление можно проследить до конкретного выпуска: Jarred Sumner обновил зависимость Brotli до 1.2.1, а файл зависимости из тега Bun 1.4.4 выбирает именно эту исправленную версию. Официальный выпуск опубликован 22 октября.

Утверждение о конкретных версиях Claude Code происходит из публикации @ryaneshea от 22 октября: автор сообщил, что обнаружил Bun 1.4.3 внутри Claude Code 2.1.296, и рекомендовал 2.1.308 или новее. Это сообщение участника сообщества; Anthropic не подтвердила такое соответствие версий.

В примечании Anthropic к 2.1.308 есть только общая формулировка об исправлении ошибок и повышении надёжности. В журнале изменений также указан выпуск 2.1.309, но нет недостающего подтверждения версии Bun или исправления Brotli для 2.1.308. Обновите клиент без промедления, отдельно фиксируя два результата: клиент обновлён и исправление встроенного декодера подтверждено.

Как обновить нужную установку Claude Code

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

В Bash выполните:

type -a claude
claude --version
claude doctor

type -a показывает псевдонимы команд, функции оболочки и найденные пути к исполняемым файлам. В справке CLI команда claude doctor описана как диагностика установки и настроек: она не меняет их и не запускает сеанс.

Сохраните работу и завершите открытые сеансы Claude Code перед заменой исполняемого файла. Затем выберите способ обновления, соответствующий вашей установке.

Нативная установка

В Bash запустите:

claude update

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

Для нативной установки настройки канала выпуска различают latest и канал stable, в который версии поступают с задержкой. Проверьте /config → Auto-update channel; пользовательская настройка хранится в ~/.claude/settings.json. При централизованном развёртывании обновляйте установленную версию вместе с политикой её обновления.

Установка через npm

Обновите установку, которой управляет npm, в Bash:

npm install -g @anthropic-ai/claude-code@latest

Согласно актуальной инструкции для npm, для установки требуется Node.js 22 или новее. Сам npm-пакет устанавливает тот же нативный исполняемый файл, что и отдельный установщик. Используйте исправленную версию Node из таблицы выше. Документация рекомендует явную команду установки вместо npm update -g: последняя может оставить пакет в прежнем диапазоне версий.

Для Homebrew используйте brew upgrade claude-code или brew upgrade claude-code@latest — в зависимости от установленного cask-пакета. Для WinGet выполните winget upgrade Anthropic.ClaudeCode в PowerShell. У этих способов свои правила обновления через пакетный менеджер.

После завершения выбранного обновления откройте новый терминал. В Bash проверьте:

hash -r
command -v claude
claude --version
claude doctor

Версия должна совпадать с выпуском, который вы собирались установить, а найденная команда — вести к нужной установке. Если command -v указывает на функцию или псевдоним, по предыдущему выводу type -a выясните, что именно они запускают.

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

Что проверить, если обновление не сработало

Выбирайте действие по наблюдаемому симптому. В руководстве Anthropic по устранению проблем установки разобраны конфликты нескольких установок, сбои обновления и отсутствие нативного файла после установки через npm.

СимптомЧто проверить и исправитьКак проверить результат
Обновление завершилось, но claude --version показывает прежний выпускНайдите конкурирующие установки с помощью type -a claude и which -a claude. Исправьте команду запуска или запись в PATH, которая выбирает старую копию.Откройте новый терминал и снова проверьте найденную команду и версию.
Собственная обёртка ~/.local/bin/claude по-прежнему запускает старый выпускПроверьте, какой файл она запускает. Нативный механизм обновления сохраняет такие обёртки, поэтому при развёртывании нужно также сменить выбранную в ней версию.Проверьте версию через эту обёртку, а не только прямым запуском скачанного файла.
Error: claude native binary not installed.Проверьте, не исключены ли необязательные зависимости npm и не пропущен ли скрипт postinstall. Восстановите необходимые этапы установки и переустановите пакет.claude --version успешно выполняется.
Auto-update failed · Run claude doctorЗапустите claude doctor и разберите указанную им ошибку установки или загрузки по соответствующему разделу руководства.Повторите обновление подходящим способом, затем проверьте нужную версию в новом процессе.

Если механизм обновления не находит более новой разрешённой версии, проверьте канал и установленную администратором верхнюю границу версии. Успешный запуск подтверждает работоспособность установки, но не проверяет уязвимость Brotli.

Можно ли узнать версию Bun внутри Claude Code

Документированные команды Claude показывают версию приложения и состояние установки. В проверенной справке CLI не описана поддерживаемая команда для вывода версии встроенного Bun.

bun --version проверяет отдельный исполняемый файл Bun, найденный в PATH. Аналогично, запрос версии у системного процесса Node описывает именно этот процесс. Ни одна из этих проверок не определяет среду выполнения, встроенную в Claude Code.

В документации Bun есть режим BUN_BE_BUN=1 для автономных исполняемых файлов. Однако он не описан как средство диагностики Claude Code, а в обращении kk-mats №24575 сообщается, что его поведение зависит от версии Claude. На этот приём нельзя без дополнительной проверки полагаться при контроле безопасности установок Claude.

Опубликованный манифест Claude Code 2.1.308 содержит сведения о выпуске, сборке, платформах и контрольных суммах, но не версию Bun. Проверка подписанного манифеста по инструкции Anthropic позволяет установить, что исполняемый файл соответствует выпуску производителя. Для подтверждения исправления декодера дополнительно нужны сведения о компонентах или исправлениях, относящиеся именно к этому файлу.

Для проверки безопасности в команде зафиксируйте версию Claude, платформу, источник установки, используемый исполняемый файл и его контрольную сумму. Если требуется официальное подтверждение исправления встроенной среды, запросите его у производителя для конкретного выпуска и платформы. Пока такого подтверждения нет, запишите результат как «клиент обновлён; исправление встроенной среды выполнения не подтверждено» и приостановите затронутые автоматические загрузки недоверенного содержимого, если этого требует ваша оценка риска.

Как проверить компьютеры команды, контейнеры и CI

Собирайте сведения внутри каждой среды, где агент действительно выполняет задачи. Результаты с ноутбука разработчика не описывают контейнер, учётную запись собственного раннера CI или отдельно развёрнутый MCP-сервер.

Добавьте этот блок Bash в существующее задание централизованного управления машинами или шаг CI:

set -u
uname -srm
id -un

for tool in claude node bun; do
  if executable=$(type -P "$tool"); then
    printf '%s\t%s\t' "$tool" "$executable"
    "$executable" --version || exit 1
  else
    printf '%s\tNOT_FOUND\n' "$tool"
  fi
done

Вывод содержит операционную систему, пользователя, найденный в PATH исполняемый файл каждого инструмента и его версию. NOT_FOUND — результат инвентаризации: нативная установка Claude не требует отдельной команды Bun в PATH.

Скрипт не выдаёт вердикт «проверка безопасности пройдена» (PASS). Сравните версии Node и отдельно установленного Bun с подтверждёнными исправленными версиями, а сведения о сборке Claude оцените отдельно. Команда Bash type -P ищет исполняемые файлы в PATH; скрипты-обёртки и пути, заданные явно в настройках, требуют отдельной проверки.

Обновляйте окружения команды в таком порядке:

  1. Проверьте среду выполнения. Запустите блок от имени служебного пользователя внутри итогового контейнера или среды CI, после обычной настройки PATH. Отдельно проверьте пути, используемые MCP-серверами, процессами, использующими SDK, и интеграциями редактора.
  2. Обновите описание сборки или развёртывания. Замените уязвимые версии Node/Bun и установку Claude. Пересоберите образы так, чтобы кэшированный слой установки не сохранил прежний исполняемый файл.
  3. Замените работающие процессы и контейнеры. Пересоздайте контейнеры и перезапустите раннеры CI или службы, которые ещё используют старую установку. Повторите инвентаризацию в новом окружении и сохраните хеш образа (digest) вместе с результатами.
  4. Проверьте обычную рабочую задачу. Убедитесь, что обновлённая среда выполняет нужную команде операцию. Зафиксируйте это как проверку совместимости, отдельно от подтверждения исправления декодера.

Если отдельной установкой Bun управляет сам Bun, в инструкции к выпуску указано следующее обновление. Выполните в Bash:

bun upgrade
bun --version

Так обновляется именно эта установка Bun. Приложению со встроенным Bun нужна новая сборка самого приложения.

Почему при работе через API-шлюз тоже нужно обновлять клиент

Пользовательский ANTHROPIC_BASE_URL меняет адрес API, но не заменяет локальный исполняемый файл Claude Code. Обновляйте клиент, даже если запросы через шлюз проходят успешно. Доступность API и возможность скачать обновление клиента проверяются отдельно.

В официальном журнале изменений Claude Code описаны два отдельных исправления совместимости со шлюзами:

  • 2.1.305: устранена регрессия 2.1.304, из-за которой могли завершаться ошибкой все запросы, если Vertex, Bedrock, другой сервис или шлюз отклонял поиск инструментов. Это затрагивало и конфигурации, где ToolSearch запрещён или не включён в --tools. Теперь клиент повторяет запрос без поиска инструментов.
  • 2.1.307: прекращена отправка бета-заголовка prompt-caching-scope через шлюзы с пользовательским ANTHROPIC_BASE_URL и в Foundry, где этот заголовок не действует.

После обновления повторите небольшую рабочую задачу через шлюз, которая раньше завершалась ошибкой. Если сбой сохранился, проверяйте ответ сервиса и настройки уже с актуальным клиентом: сообщение об исправлении Brotli не объясняет любую ошибку шлюза. Успешный запрос подтверждает совместимость в этой задаче; наличие исправления во встроенной среде выполнения по-прежнему требует отдельного подтверждения.

Готовы оптимизировать LLM workflow?

Подключите единый API, управляйте ключами и контролируйте расходы на AI-модели в BetterToken.

Начать бесплатно