В маркетплейсе Cursor лежал Claude Code 2.1.313 с бэкдором

29 октября с 2:27 до 13:35 по тихоокеанскому времени в маркетплейсе расширений Cursor лежала вредоносная сборка Claude Code 2.1.313 (Anthropic.claude-code). По данным Cursor, пострадали не больше 5000 пользователей: сборка дописывает в систему SSH-ключ атакующего, ставит автозапуск и пытается открыть обратный туннель. Если вы ставили или обновляли расширение в Cursor в этот промежуток, проверьте ~/.ssh/authorized_keys на ключ с меткой svc-telemetry: удалить расширение может быть недостаточно, потому что отдельные скрипты автозапуска продолжают работать.
Вредоносную активность на рабочих машинах первой заметила Phorion. Разбор с индикаторами компрометации (следами, по которым ищут заражённые машины) опубликовал исследователь Кевин Бомонт на Doublepulsar. По его словам, Cursor сама обновила расширение до заражённой версии. Со всеми пострадавшими Cursor обещает связаться напрямую.
Как проверить машину
Cursor дала по одной команде на платформу. На macOS:
grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "svc-telemetry key found" || echo "No key found; machine not impacted"
На Windows в PowerShell (проверяются и пользовательский файл ключей, и C:\ProgramData\ssh\administrators_authorized_keys):
$files = "$HOME\.ssh\authorized_keys", "C:\ProgramData\ssh\administrators_authorized_keys" | Where-Object { Test-Path $_ } if ($files -and (Select-String svc-telemetry $files)) { "svc-telemetry key found" } else { "No key found; machine not impacted" }
В Phorion советуют не полагаться на одну метку. Вредоносный скрипт сам проверяет, есть ли в файле строка svc-telemetry, а не сам ключ, поэтому искать надёжнее по отпечатку ключа: SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk.
Если ключ нашёлся, Cursor просит изолировать машину и запустить скрипт очистки из своего уведомления. На macOS remediate-macos.sh запускается от имени пострадавшего пользователя, не от root, на Windows remediate-windows.ps1 запускается из PowerShell с правами администратора. Скрипты удаляют расширение, автозапуск, процессы туннеля и ключ атакующего и завершаются с ненулевым кодом, если что-то осталось. Дальше Cursor советует решить, не пересобрать ли машину, и с доверенной системы сменить все учётные данные и сессии, доступные с неё. Сбор переменных окружения был ограниченным, но это не исключает, что позже через бэкдор могли добраться до секретов, объясняют в Cursor.
Командам с централизованным мониторингом Cursor предлагает искать по телеметрии конечных точек, сети и установок расширений. Главные приметы:
- сеть: адрес 134[.]209[.]82[.]225, SSH на порт 22 под пользователем tunnel, HTTP POST на
/beaconпорта 8099; - macOS:
~/.config/.smt,~/.config/.smtk,$TMPDIR/.stk_<10 hex>и LaunchAgentcom.apple.sysmond; - Windows:
%USERPROFILE%\.config\smt.cmd,%USERPROFILE%\.config\smtk, задача планировщика SysMon и запаснойsysmon.cmdв папке автозагрузки; - процессы:
ssh -N -R '*:0:localhost:22'иautossh -M 0.
Обращения к ifconfig[.]me и api[.]ipify[.]org сами по себе ничего не значат: это легитимные сервисы определения IP. Для Microsoft Defender for Endpoint Бомонт выложил готовые KQL-запросы, а хеши обеих заражённых сборок VSIX, для macOS на Apple Silicon и для Windows x64, есть и у него, и у Cursor.
Что делал вредоносный код
По разбору Phorion, в начало минифицированного extension.js вставлена функция, которая вызывает сама себя в момент загрузки файла. Она срабатывает, как только Node подгружает модуль, ещё до штатного activate, так что открывать панель Claude Code не требовалось. Расширения работают с правами IDE и пользователя, поэтому код сразу получает доступ к локальным файлам, исходникам и инструментам разработчика.
Первым делом он собирает сведения о машине: имя хоста и пользователя, ОС и архитектуру, домашний и рабочие каталоги, глобальный email из Git, публичный IP. Как уточняет The Hacker News, из переменных окружения берутся имена (до 40 штук), в которых встречаются KEY, TOKEN, SECRET, PASS, AWS или GCP. Самих значений в первом отчёте нет, говорит Пол Маккарти, но и имена кое-что выдают. Всё это уходит по незашифрованному HTTP на сервер атакующего.
Затем код добавляет ключ в authorized_keys, пытается включить локальный SSH-сервер и открыть обратный туннель на свой сервер, через который атакующий мог бы зайти на машину. Включение SSH требует прав администратора, которых у расширения на большинстве машин с macOS и Windows нет. По словам Cursor, этот шаг из-за ошибок в коде проваливался везде, кроме редких случаев, когда сам Cursor запущен от администратора, и на таких машинах войти через туннель атакующий не мог. На macOS Phorion нашла конкретный промах: под обычным пользователем systemsetup -getremotelogin печатает ошибку доступа и завершается с кодом 0 вместо ответа Off, а скрипт включает SSH, только когда видит Off.
Ключ и автозапуск при этом всё равно ставятся. На macOS это LaunchAgent, на Windows задача планировщика, которая пытается работать от SYSTEM, с запасным вариантом через папку автозагрузки. Фоновые скрипты пытаются поднять туннель примерно раз в 60 секунд. Сервер атакующего Cursor вместе с облачным провайдером отключила, так что туннель и отправка данных сейчас не работают.
Только маркетплейс Cursor?
Cursor пишет, что убрала вредоносную версию сразу после обнаружения, на всякий случай полностью остановила свой маркетплейс VS Code, проверила доступы, сменила ключи, пересобрала маркетплейс и вернула его в работу. Других изменённых расширений не нашли, признаков заражения других версий или официального канала распространения у компании нет. В OpenSourceMalware в обновлённом посте тоже говорят, что пакет в npm и расширения в Open VSX и Microsoft VS Code Marketplace чистые, а вредоносное обновление шло только через Cursor. При этом Бомонт отмечает, что версии 2.1.313 сейчас нет ни в Open VSX, ни в Visual Studio Marketplace, ни в Cursor.
В уведомлении Cursor сказано, что эту версию разрабатывала не Anthropic. Бомонт возражает: сборка была загружена от верифицированного аккаунта Anthropic, и бэкдор, конечно, писала не Anthropic, но речь об инциденте безопасности, который привёл к атаке на цепочку поставок. Сборка шла под настоящим идентификатором anthropic.claude-code, а не как отдельное поддельное расширение. Как именно туда попало обновление, пока неизвестно.
Anthropic заменила 2.1.313 версией 2.1.314, которая, по словам Бомонта, судя по всему, убирает бэкдор из самого расширения. Но на уже заражённых машинах обновление не удаляет ни SSH-бэкдор, ни последствия уже проведённого сбора данных.
Дальше
claude-mem при установке шлёт на cmem.ai промпты за 30 дней
Свежий установщик claude-mem молча забирает промпты за 30 дней из Claude Code и других агентов и отправляет в облако сервиса. Флажок согласия включён по умолчанию, но его снятие загрузку не останавливает. Вы проверяете, куда сторонний плагин шлёт данные, до установки или после?
Читайте также
- Claude Code 2.1.314: запрет записи, группы IdP и сжатие
- Claude Code получит локальную песочницу для команд
- Confessor восстанавливает, к каким файлам обращался Claude Code
- Vanta выпустила GrantGuard для аудита разрешений Claude Code
- Claude Code 2.1.311 разрешил агенту rm -rf ~ по переменной
- Claude Code шлёт Anthropic хеши файлов даже с DeepSeek
Комментарии
Пока никто не написал. Будьте первым.
Присоединяйтесь к разговору
Войдите, чтобы оставить комментарий. Он появится после модерации.

