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

Если вы проверяете 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.x | 22.23.4 | Исполняемый файл Node, который использует конкретное приложение или инструмент |
| Node.js 24.x | 24.22.1 | Исполняемый файл Node, который использует конкретное приложение или инструмент |
| Node.js 26.x | 26.12.1 | Исполняемый файл Node, который использует конкретное приложение или инструмент |
| Официальные выпуски Bun | 1.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; скрипты-обёртки и пути, заданные явно в настройках, требуют отдельной проверки.
Обновляйте окружения команды в таком порядке:
- Проверьте среду выполнения. Запустите блок от имени служебного пользователя внутри итогового контейнера или среды CI, после обычной настройки PATH. Отдельно проверьте пути, используемые MCP-серверами, процессами, использующими SDK, и интеграциями редактора.
- Обновите описание сборки или развёртывания. Замените уязвимые версии Node/Bun и установку Claude. Пересоберите образы так, чтобы кэшированный слой установки не сохранил прежний исполняемый файл.
- Замените работающие процессы и контейнеры. Пересоздайте контейнеры и перезапустите раннеры CI или службы, которые ещё используют старую установку. Повторите инвентаризацию в новом окружении и сохраните хеш образа (digest) вместе с результатами.
- Проверьте обычную рабочую задачу. Убедитесь, что обновлённая среда выполняет нужную команде операцию. Зафиксируйте это как проверку совместимости, отдельно от подтверждения исправления декодера.
Если отдельной установкой 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 не объясняет любую ошибку шлюза. Успешный запрос подтверждает совместимость в этой задаче; наличие исправления во встроенной среде выполнения по-прежнему требует отдельного подтверждения.