Разбор взлома расширения Claude Code для Cursor: бэкдор с SSH-доступом и 11 часов в маркетплейсе

Разбор взлома расширения Claude Code для Cursor: бэкдор с SSH-доступом и 11 часов в маркетплейсе

Вредоносная версия 2.1.313 попала в маркетплейс через официальный аккаунт Anthropic и затронула до 5000 разработчиков.

29 октября 2026 года в каталоге расширений редактора Cursor появились вредоносные сборки официального расширения Anthropic для Claude Code под номерами 2.1.312 и 2.1.313. Пакеты распространялись через официальный верифицированный профиль Anthropic и находились в открытом доступе около 11 часов — с 02:27 до 13:35 по тихоокеанскому времени (PDT), пока каталог не отключили на аудит.

Сообщение команды Cursor об инциденте в официальном блоге. Источник: Cursor
Сообщение команды Cursor об инциденте в официальном блоге. Источник: Cursor

Масштаб инцидента и каналы распространения

  • По данным Cursor, скомпрометированные пакеты успели установить или получить через автоматическое обновление до 5000 разработчиков на платформах macOS (darwin-arm64) и Windows (win32-x64).
  • Каталог Cursor VS Code Marketplace по умолчанию загружает обновления установленных расширений в фоновом режиме, если эта настройка не была отключена вручную в конфигурации редактора.
  • Официальные каналы дистрибуции Anthropic не пострадали: пакет @anthropic-ai/claude-code в реестре npm, а также расширения в Microsoft Visual Studio Marketplace и Open VSX скомпрометированы не были.
  • Команда Anthropic подтвердила изданию Ars Technica, что её внутренняя инфраструктура разработки не подвергалась взлому, а вредоносные сборки были загружены напрямую в каталог Cursor.
  • Для замены вредоносных версий разработчики выпустили очищенную сборку 2.1.314, пропустив промежуточные номера.

Архитектура полезной нагрузки и сбор телеметрии

Анализ компаний Phorian, StepSecurity и Microsoft Threat Intelligence показал, что злоумышленники изменили заглавный файл extension.js. В самое начало минифицированного скрипта была внедрена самовызывающаяся функция (IIFE), которая исполнялась в среде Node.js в момент загрузки файла редактором — ещё до вызова стандартной функции активации расширения.

  • Скрипт работал с правами процесса Cursor и мгновенно получал доступ к локальной файловой системе и переменным окружения текущего пользователя.
  • Первым этапом вредоносный код собирал профиль хоста: имя компьютера, имя пользователя, архитектуру операционной системы, путь к домашнему каталогу, конфигурацию Git (включая рабочий email), публичный IP-адрес и список имён всех переменных окружения.
  • Имена переменных окружения передавались операторам атаки для поиска токенов AWS, GCP, GitHub и ключей к API языковых моделей, чтобы отобрать наиболее ценные рабочие станции для дальнейшего проникновения.
  • Собранный массив данных отправлялся открытым HTTP POST-запросом на сервер атакующих с адресом 134.209.82.225 на порт 8099 по пути /beacon без шифрования трафика.

Попытка установки SSH-бэкдора и ошибки атакующих

После передачи телеметрии скрипт приступал к развёртыванию постоянного удалённого доступа. Вредоносная программа пыталась добавить публичный SSH-ключ с комментарием svc-telemetry в файл ~/.ssh/authorized_keys, включить системную службу SSH и запустить обратный туннель к командному серверу с интервалом повтора каждые 60 секунд.

  • На macOS скрипт создавал конфигурацию LaunchAgent в каталоге пользователя, чтобы туннель автоматически восстанавливался при каждой перезагрузке системы.
  • На Windows полезная нагрузка пыталась создать фоновую задачу через планировщик задач (Task Scheduler) с правами SYSTEM, а при отказе копировала bat-скрипт в папку автозагрузки (Startup).
  • На Linux внедрялась строка в crontab с инструкцией перезапуска после загрузки ядра.
  • Удалённый доступ не сработал на большинстве машин из-за ошибок в коде: включение локальной службы SSH и правка системных сервисов требовали повышенных прав администратора (root или SYSTEM), которых процесс Cursor в штатном режиме не имеет.
  • Несмотря на сбой сетевого туннеля, запись публичного ключа злоумышленников в authorized_keys и сохранение файлов автозапуска в пользовательских директориях проходили успешно.

Порядок проверки и очистки рабочей станции

Удаление расширения в интерфейсе Cursor или обновление до чистой версии 2.1.314 не убирает внедрённый SSH-ключ и сценарии автозапуска. Для устранения последствий инцидента необходима ручная ревизия системы.

Шаг 1. Проверить файл авторизованных ключей SSH на наличие строки svc-telemetry:

test -f ~/.ssh/authorized_keys && grep "svc-telemetry" ~/.ssh/authorized_keys || true

Если команда возвращает совпадение, ключ svc-telemetry удаляется из authorized_keys вручную или текстовым редактором.

Шаг 2. Проверить директории автозапуска. На macOS следует просмотреть каталог пользовательских служб:

ls -la ~/Library/LaunchAgents 2>/dev/null || true
  • На macOS необходимо удалить все подозрительные файлы конфигурации .plist, появившиеся в ~/Library/LaunchAgents 29 октября 2026 года.
  • На Linux проверяются задания планировщика командой crontab -l на наличие неизвестных вызовов bash и curl.
  • На Windows проверяются назначенные задания в Task Scheduler и каталог автозагрузки shell:startup.
  • Шаг 3. Отозвать и перевыпустить токены доступа к API, облачным провайдерам и репозиториям кода, имена которых присутствовали в переменных окружения на момент активности вредоносного расширения.

Реакция сервисов и контекст

  • После выявления проблемы команда Cursor отключила маркетплейс, удалила пакеты 2.1.312 и 2.1.313, связалась с хостинг-провайдером сервера управления для нейтрализации IP-адреса и обновила ключи доступа к каталогу.
  • К моменту возобновления работы маркетплейса сервер злоумышленников 134.209.82.225 уже не отвечал на входящие подключения.
  • В августе 2026 года стартап Cursor вошёл в состав компании SpaceX.
  • В начале октября 2026 года независимые аналитики неоднократно обращали внимание на уязвимость экосистем плагинов к атакам на цепочки поставок при отсутствии обязательной верификации бинарных сборок перед публикацией.

Всё самое интересное — в нашем Telegram-канале «Claude без воды».