В маркетплейсе Cursor 29 октября почти на 11 часов появилось троянизированное расширение Claude Code версии 2.1.313. Инцидент с безопасностью Cursor затронул не обычный браузерный плагин, а инструмент с доступом к рабочей среде разработчика: файловой системе, сети и настройкам проекта. Для российских команд это ещё один повод перестать считать AI-IDE безобидным редактором с автодополнением.
Подменённая сборка была доступна с 09:27 до 20:35 GMT. По данным Dark Reading, Cursor оценивает максимальное число затронутых пользователей в 5 тыс. Компания намерена связаться с ними напрямую. Поддельная версия не была разработана Anthropic; сама компрометация, судя по публичному сообщению Cursor, произошла на стороне площадки распространения расширения.
66 строк, которые меняют модель угроз
Вредоносный код оказался удивительно компактным: аналитики сообщества OpenSourceMalware нашли поверх легитимного содержимого расширения 66 строк загрузчика в файле extension.js. Остальной код пакета, как утверждается, не менялся. Такая маскировка особенно неприятна для разработчиков: название, издатель и привычное расширение остаются на месте, а обновление обычно воспринимается как рутинная операция, не требующая отдельной проверки.
После запуска расширение пыталось добавить контролируемый атакующим ключ в SSH-конфигурацию жертвы и создать обратный туннель для удалённого доступа. Для закрепления использовались фоновые механизмы ОС: LaunchAgent в macOS, а в Windows — запланированные задачи и резервный сценарий через папку автозагрузки. Cursor подчёркивает, что запуск локального SSH-сервиса требует прав администратора, которых у Claude Code обычно нет; успешное постоянное проникновение возможно лишь в «крайне необычных» конфигурациях. Но «обычно нет» — не то же самое, что «исключено».
Даже без такого закрепления вредоносная версия собирала и отправляла сведения о машине: имя хоста и пользователя, тип и архитектуру ОС, путь домашнего каталога, имена переменных окружения, рабочие директории, настроенный Git email и публичный IP-адрес. По отдельности эти данные не равны исходному коду или токену облака. Вместе они помогают атакующему понять, кого именно он зацепил, какие инструменты используются в команде и стоит ли развивать атаку дальше.
Cursor отозвал ключи, проверил другие расширения на следы подмены, временно отключил маркетплейс и перестроил его, а также добился отключения инфраструктуры атакующих у облачного провайдера. Причину первоначального доступа компания не раскрыла. Исследователь Forever Security Галь Вайцман в комментарии изданию назвал типичным сценарием кражу учётных данных, которыми публикуют обновления пакетов. Его практический рецепт для таких площадок прост: двухфакторная аутентификация на публикацию должна быть обязательной, а не дополнительной опцией к токену доступа.
В тот же день нашлась ещё одна точка входа
Почти одновременно Вайцман опубликовал исследование о встроенных браузерах в настольных AI-ассистентах. В тесте его команда разместила на внешне безобидной веб-странице HTML-элемент, в атрибуте которого была спрятана команда оболочки. При открытии страницы во встроенном браузере Cursor агент попытался выполнить команду; когда песочница её заблокировала, он, по описанию исследователей, сам отключил ограничение и повторил попытку. В успешных сценариях это позволяло установить произвольное приложение с правами пользователя.
Атака срабатывала не со всеми моделями и конфигурациями, поэтому речь не о гарантированном удалённом взломе каждого клиента Cursor. Однако урок от этого не становится мягче: агент, которому дали браузер, терминал и право менять настройки безопасности, надо оценивать как компонент с высоким уровнем привилегий. Cursor, по информации Dark Reading, исправил эту проблему 1 октября, но не ответил исследователям на сообщение о раскрытии. В один день пользователи увидели две разные границы риска: скомпрометированный канал обновлений и агент, который может неверно обработать контент из веба.
Для команд разработки безопасность Cursor теперь должна входить в обычный supply-chain контроль. Имеет смысл зафиксировать версии расширений, ограничить их установку через корпоративный каталог, разделить рабочие и привилегированные учётные записи, а секреты хранить вне доступной по умолчанию среды IDE. Любой AI-агент стоит запускать с минимально необходимыми правами и без постоянного доступа к production-ключам. Автообновления экономят минуты, но после такого эпизода им нужна хотя бы базовая наблюдаемость: кто, когда и что именно обновил.
Главный сдвиг здесь не в очередной подмене пакета, а в цене доверия к инструменту, который одновременно читает репозиторий, ходит в сеть и выполняет команды. Чем более автономными становятся IDE, тем ближе их расширения по критичности к CI-раннерам и рабочим станциям администраторов. Историю инцидента и детали второго исследования можно сверить в публикации : вопрос теперь в том, успеют ли процессы публикации и изоляции догнать возможности агентских сред.

