Phorion обнаружила SSH-бэкдор в расширении Claude Code на Cursor Marketplace
Охранная компания Phorion сообщила, что в официальном расширении Claude Code для VS Code, которое распространялось через Cursor Marketplace, есть бэкдор с постоянным SSH-доступом. Затронуты версии 2.1.312 и 2.1.313 (в первой редакции заметки называлась только 2.1.313; 31 октября 2026 года текст обновили после уведомления Cursor о безопасности, где указаны обе версии для macOS и Windows). Cursor удалил эти версии из своего магазина расширений. Код содержит логику установки и закрепления для macOS, Linux и Windows, но подробно разобрана в основном macOS.
Вредоносная часть, вставленная в начало минифицированного файла extension.js самовызывающаяся функция. Остальной бандл выглядит как обычное расширение: строки про Claude Code и VS Code, стандартные activate и deactivate, интерфейсный код. Вставка подключает модули Node.js (child_process, fs, os, path, http, crypto) и срабатывает, как только Node загружает файл, ещё до штатного вызова activate, так что пользователю не нужно ничего запускать. Расширение работает с правами IDE и пользователя, поэтому сразу получает доступ к локальным файлам, исходному коду и инструментам разработчика.
Этап 1, подготовка SSH-доступа. Код создаёт каталог ~/.ssh (права 0700) и дописывает в ~/.ssh/authorized_keys (права 0600) публичный ключ Ed25519 злоумышленника с комментарием svc-telemetry. Наличие ключа проверяется по этому комментарию, а не по самому ключу, поэтому при поиске следов Phorion советует сверять отпечаток публичного ключа. Затем код пытается включить SSH-сервер: на Linux через systemctl (с запасными вариантами service и /etc/init.d/), на macOS через sudo -n systemsetup -setremotelogin on, на Windows, установкой и запуском OpenSSH Server через PowerShell. Эксплойта повышения привилегий нет: sudo -n не сработает, если у пользователя нет беспарольного sudo.
Ошибка в логике на macOS. Скрипт проверяет состояние удалённого входа командой systemsetup -getremotelogin без прав администратора. Обычному пользователю она выводит в stdout сообщение об ошибке доступа и завершается с кодом 0, а скрипт включает SSH, только если вывод содержит Off. Проверка не срабатывает, шаг включения пропускается, и попытки включения не видно в телеметрии процессов. Если на Mac удалённый вход не был включён, обратный путь внутрь ломается: трафик через туннель упрётся в закрытый порт 22 на localhost. Но SSH-ключи и закрепление всё равно устанавливаются, а если удалённый вход уже включён или его включат позже, бэкдор готов к работе. В пути для Windows, по формулировке Phorion, тоже есть своя ошибка: команду PowerShell передают через вспомогательную функцию, которая жёстко задаёт /bin/sh.
Этап 2, обратный SSH-туннель. Код открывает исходящее SSH-соединение на 134.209.82[.]225 (адрес в источнике записан с защитой от активной ссылки), порт 22, под пользователем tunnel. Для входа используется встроенный незашифрованный закрытый ключ OpenSSH Ed25519 с комментарием svc-telemetry-tun. Его записывают во временный каталог ОС в файл с именем .stk_ плюс первые десять символов MD5 от имени хоста и пути домашнего каталога. Туннель запускается с -R *:0:localhost:22: сервер злоумышленника выделяет случайный порт и пробрасывает всё, что на него придёт, на SSH порта 22 заражённой машины. Когда оператору нужен доступ, он отдельным соединением заходит на выделенный порт и входит по подложенному ключу, получая полноценную интерактивную оболочку и передачу файлов без собственной командной логики на JavaScript. Соединение тихое и неинтерактивное: проверка ключа хоста отключена, known_hosts игнорируется, включены BatchMode и IdentitiesOnly, keepalive 30 секунд (ServerAliveCountMax=3), ExitOnForwardFailure. Если установлен autossh, используется он, иначе обычный ssh; всё обёрнуто в отсоединённый цикл повторов с паузой 60 секунд, поэтому туннель живёт и после закрытия IDE.
Этап 3, закрепление. На macOS и Linux скрипт ~/.config/.smt со встроенным ключом туннеля записывает его в ~/.config/.smtk и запускает цикл переподключения. На macOS добавляется LaunchAgent под видом системного: com.apple.sysmond.plist в ~/Library/LaunchAgents/ с RunAtLoad и KeepAlive.
Этап 4, разведка. Скрипт один раз отправляет сводку: имя хоста, пользователя, платформу и архитектуру, домашний и текущий каталоги, глобальный git-email, публичный IP (через ifconfig[.]me, запасной вариант, api[.]ipify[.]org), статусы шагов установки и до 40 имён переменных окружения, подходящих под шаблон KEY|TOKEN|SECRET|PASS|AWS|GCP. Значения переменных не отправляются: оператору достаётся список того, какие облачные учётные данные и токены есть на машине. Отчёт уходит обычным HTTP POST на /beacon по адресу 134.209.82[.]225:8099 и дублируется на 127.0.0.1:8099; зачем нужна копия на localhost, из образца непонятно, локального слушателя на этом порту скрипт не создаёт.
Итог Phorion: цель нагрузки, долгий интерактивный доступ; ошибка на macOS снижает ущерб, но вредонос остаётся серьёзной угрозой, закрепляется и передаёт данные о хосте. Организациям рекомендовано немедленно проверить, нет ли у них Claude Code для VS Code 2.1.312 или 2.1.313, а при обнаружении подключить реагирование на инциденты. Доступный текст источника обрывается на описании отправки отчёта, поэтому остальное (в том числе перечень индикаторов компрометации) здесь не пересказано.
Ключевые факты
- Phorion нашла бэкдор в расширении Claude Code для VS Code в Cursor Marketplace; затронуты версии 2.1.312 и 2.1.313, Cursor удалил их из магазина.
- Вредоносный код вставлен в начало extension.js и срабатывает при загрузке файла Node, до штатного activate; действий пользователя не требуется.
- Код дописывает SSH-ключ svc-telemetry в authorized_keys, открывает обратный туннель на 134.209.82[.]225:22 и держит его в отсоединённом цикле повторов (пауза 60 секунд), так что туннель живёт и после закрытия IDE.
- Закрепление: файлы ~/.config/.smt и .smtk на macOS и Linux, LaunchAgent com.apple.sysmond.plist на macOS; разовый отчёт включает хост, пользователя, git-email, публичный IP и до 40 имён переменных окружения (без значений).
- На macOS из-за ошибки в проверке systemsetup -getremotelogin SSH не включается сам, но если удалённый вход уже включён или включится позже, бэкдор работает.
Почему это важно
Скомпрометирован не случайный плагин, а расширение, которое называется официальным Claude Code для VS Code, и распространялось оно через магазин расширений Cursor. Вредоносный код выполняется сразу при загрузке модуля с правами пользователя, то есть с доступом к файлам, исходникам и инструментам разработчика. Цель нагрузки, по оценке Phorion, долгий интерактивный доступ: ключ в authorized_keys, обратный туннель и закрепление в системе, а не разовая кража.
Кому это важно
Прежде всего разработчикам и командам, которые ставили Claude Code для VS Code через Cursor Marketplace на macOS и Windows (именно эти платформы указаны в уведомлении Cursor), а также специалистам по безопасности, отвечающим за парк рабочих станций. Логика закрепления есть и для Linux. Phorion адресует рекомендацию организациям: проверить использование версий 2.1.312 и 2.1.313.
Как это применить
Следуйте рекомендации Phorion: срочно проверьте, не стоят ли у вас версии 2.1.312 или 2.1.313, и при обнаружении подключайте реагирование на инциденты. Исходя из описания, при проверке стоит искать: лишний ключ в ~/.ssh/authorized_keys (Phorion советует сверять отпечаток ключа, а не только комментарий svc-telemetry); файлы ~/.config/.smt и ~/.config/.smtk; на macOS, ~/Library/LaunchAgents/com.apple.sysmond.plist; во временном каталоге файлы с именем на .stk_; исходящие SSH-соединения на 134.209.82[.]225 и HTTP-запросы на порт 8099. Полные индикаторы и шаги устранения в доступном тексте не приведены, их нужно смотреть в оригинале.
Можно ли доверять
Источник, технический разбор самой Phorion, охранной компании, которая нашла проблему; независимого подтверждения в доступном тексте нет, кроме ссылки на уведомление Cursor о безопасности. Разбор подробный: приведены фрагменты кода, имена файлов, ключевых комментариев и параметры SSH, что позволяет проверить описание. Оговорки автор делает сам (например, про Windows: «похоже, что»). Текст доступен не полностью и обрывается посреди описания отправки отчёта.
Риски и подводные камни
Ошибка в проверке удалённого входа на macOS, не защита: если SSH уже включён или его включат позже, бэкдор готов к работе, а ключи и закрепление ставятся в любом случае. Отчёт содержит только имена переменных окружения, а не значения, но, по описанию, служит оператору инвентарём того, у каких хостов есть облачные ключи и токены. Из доступного текста неясно, как именно был скомпрометирован бандл, сколько пользователей установило эти версии, как долго они были доступны, затронуты ли другие каналы распространения расширения, и позиция Anthropic не приведена. Копия отчёта на 127.0.0.1:8099 пока необъяснима.
«Вам нужен доступ администратора для запуска этого инструмента... выход!»
— вывод команды systemsetup на macOS при запуске обычным пользователем (цитата из разбора Phorion)