Отчёт о тестах мог украсть ключи через Claude Code Desktop

Чтобы увести с машины разработчика SSH-ключи и токены, атакующему хватало положить в публичный репозиторий раздутый отчёт о покрытии тестами и подождать, пока жертва попросит Claude на него взглянуть. Эту цепочку в панели предпросмотра Claude Code Desktop описали исследователи Noma Labs.
Коротко
- Панель предпросмотра сама отрисовывает HTML, который Claude читает или правит, и жертве не нужно ничего открывать вручную или подтверждать — достаточно одной просьбы посмотреть файл.
- Файлы до 256 КБ грузятся как data: URL под политикой CSP, запрещающей скрипты, а файлы крупнее идут через file://, где этой политики нет и скрипт в Chromium читает локальные файлы.
- Anthropic оценила находку в 8,7 по CVSS и приравняла её к выполнению кода на хосте; первый патч Noma Labs обошла, вынеся запрос в Web Worker из blob: URL.
Если вы редко думаете о панели предпросмотра, напомним: это встроенный рендерер артефактов. Всякий раз, когда Claude читает или правит HTML-файл, панель сразу показывает его в отдельном окне приложения. Claude Code Desktop работает как Electron-приложение, значит его интерфейс крутится на движке Chromium со всеми обычными веб-API.
Одной просьбы посмотреть отчёт хватало для полной компрометации
Noma собрала репозиторий, который выглядел как обычный проект: исходники, тесты и отчёт о покрытии. Такие отчёты тестовые инструменты генерируют сами, они обычно большие из-за карт исходников и CSS, так что отчёт на 500 КБ не вызывает вопросов. В него зашили JavaScript. Жертва клонирует репозиторий, просит Claude взглянуть на отчёт — рутинная просьба. Claude читает файл, панель предпросмотра отрисовывает его автоматически, и зашитый код запускается. Скрипт по пути к временному файлу вычисляет домашнюю папку и начинает тянуть файлы через fetch() и XMLHttpRequest: SSH-ключи, ключи и секреты AWS, токены npm и GitHub, учётные данные Kubernetes, авторизацию Docker-реестра, Git-идентичность. Туда же уходят OAuth-токены самого Claude и реальный IP-адрес жертвы через WebRTC, причём запроса на подтверждение не появляется ни разу.
Почему панель пропустила чужой скрипт
Anthropic защищает панель тремя барьерами: политика CSP со script-src 'none' блокирует скрипты, data: URL даёт странице изолированное происхождение, а фильтр запросов на прокси dev-сервера ловит исходящие обращения рендерера. Noma обошла все три. Политика CSP навешивается только на путь с data: URL. Путь через file:// её не получает, поэтому скрипт в крупном файле работает без ограничений. Фильтр запросов, который должен блокировать чтение через file://, включается, когда панель проксирует запущенный dev-сервер вроде локального React или Node, но для статичного HTML прямо с диска, как у отчёта о покрытии, не срабатывает. Проще говоря, система проверяет гостей на входе через одну дверь, а крупные файлы заходят через другую, где охраны нет. Три бреши складываются в чтение любого локального файла: раздуть файл за 256 КБ, воспользоваться отсутствием CSP, пройти мимо спящего фильтра.
Первый патч не закрыл Web Worker
Данные скрипт отправлял на сервер атакующего через navigator.sendBeacon() — веб-API, который тихо делает одиночный POST в фоне; у Claude Code Desktop нет CSP, ограничивающего исходящие запросы. Noma сообщила о проблеме Anthropic 4 июля 2026 года, 9 июля компания присвоила ей 8,7 по CVSS v4.0. К 24 июля Anthropic выпустила патч, заблокировав прямые вызовы fetch() и XMLHttpRequest к file:// из основного контекста страницы, и попросила перепроверку. В тот же день Noma показала обход: если вынести fetch() в Web Worker, созданный из blob: URL, запрос идёт из контекста, который фильтр не покрывает, и все три исходные бреши снова открыты. 3 августа Anthropic подтвердила, что исправление неполное, и вернула отчёт в работу. Полный фикс вышел 17 августа в Claude Desktop 1.30096.1 и новее через автообновление.
Независимая проверка пока ограничена: General Analysis отмечает, что заявление об исправленной версии идёт из отчёта Noma, и сам эксплойт она не воспроизводила. Из Black Duck замечают, что опора на пороги по размеру и клиентские фильтры как на границу безопасности хрупка по своей природе. На наш взгляд, развилка на 256 КБ и есть та самая слабость: один и тот же файл проходит через разные механизмы защиты только из-за своего веса.
Когда появится CVE Как сообщает CSO Online со ссылкой на Эли Айнхорна из Noma, Anthropic готовит GitHub Security Advisory и запросила номер CVE, а публикация на момент отчёта оставалась в ожидании с ориентиром на октябрь 2026 года. Фикс уже разъехался через автообновление, так что проверить стоит одно: версия Claude Desktop не ниже 1.30096.1. Точной даты советника пока нет.
Дальше
Квартал Anthropic принёс больше выручки, чем весь 2025 год
Один квартал принёс Anthropic 16,8 миллиарда долларов выручки, пишет Bloomberg со ссылкой на источники, хотя за весь 2025 год вышло около 4,6 миллиарда. Эти цифры компания показала инвесторам перед IPO. Сколько в месяц вы сами платите Anthropic?
Читайте также
- Песочница Claude Code сама убрала запрос разрешения
- Из аккаунтов Claude Max воруют токены через инфостилеры
- Embrace The Red описал обход авторежима Opus 5
- Обходы входа в четырёх реализациях SAML нашёл Opus
- Трекер китайских пользователей исчез из Claude Code
- В 6 из 10 тестов авторежим пропустил запуск чужого кода
Комментарии
Пока никто не написал. Будьте первым.
Присоединяйтесь к разговору
Войдите, чтобы оставить комментарий. Он появится после модерации.

