Атакующие охотятся за токенами Claude Code и MCP: что проверить

Свежая малварь в npm и PyPI и сканеры, которые ищут токены ИИ-ассистентов на веб-серверах: что проверить у себя.

Обложка: Атакующие охотятся за токенами Claude Code и MCP: что проверить

12 и 13 ноября 2026 года GitHub пометил как вредоносные сразу несколько пакетов, рассчитанных на разработчиков, которые работают с ИИ: две сборки нативного клиента неофициального сервиса «удалённый Claude Code» в npm, ещё 19 загрузчиков из длинной кампании в PyPI под видом голосовых ИИ-утилит и MCP-сервер, который отправлял фотографии водительских прав на сервер по голому IP-адресу. Днём раньше, 11 ноября, компания HoneyLabs опубликовала разбор сканера, который спрашивал у веб-серверов файлы с токенами Claude Code, Cursor и других ассистентов.

Общее у этих историй одно: атакующих интересуют уже не только ключи облаков и пароли к базам, но и всё, что окружает ИИ-агента разработчика. Токены подписки, конфигурации MCP с секретами от GitHub и баз, сам агент, которому разрешено выполнять команды на машине. Если вы ставили что-то из перечисленного ниже или держите доступный из интернета сервер, который раздаёт домашний каталог или чекаут репозитория, это повод проверить машину и сменить ключи.

Ключевые выводы
  • В npm вредоносными признаны @rclaude/darwin-x64 0.2.1 (GHSA-gm9f-q9rw-p3gm, 12 ноября) и @rclaude/darwin-arm64 0.2.0 (GHSA-mq7w-jmv5-vq3p, 13 ноября): машину с ними GitHub советует считать полностью скомпрометированной.
  • Кампания загрузчиков в PyPI с названиями вроде qwen3ttsui и ferrotts насчитывает в базе GitHub 83 пакета, 19 из них добавлены 12–13 ноября.
  • MCP-сервер my-mcp-server-driving-license-ocr 0.1.3 игнорировал настройку и слал снимки документов на 42.193.222.35 по HTTP без шифрования.
  • По данным HoneyLabs, сканер из Google Cloud за 11 дней отправил 366 845 запросов, в его списке 32 пути файлов ИИ-ассистентов, включая /.claude/.credentials.json.
  • Проверка простая: поискать пакеты в зависимостях, запросить эти пути у своих серверов и сменить все секреты, если что-то нашлось.

Что за пакеты @rclaude и чем они опасны

@rclaude/darwin-x64 и @rclaude/darwin-arm64 не подделки под официальные пакеты Anthropic: у настоящего Claude Code платформенные сборки называются @anthropic-ai/claude-code-darwin-arm64 и так далее. Это нативные клиенты для macOS к пакету rclaude, который появился в npm 9 ноября. Его README на китайском описывает сервис так: Claude Code работает на удалённом сервере rclaude.xyz, а файлы и команды выполняются на компьютере пользователя; сам Claude Code и учётные данные модели ставить не нужно, вход по токену или через браузер.

По умолчанию, как сказано в том же README, клиент разрешает удалённой стороне менять локальные файлы и выполнять команды, а флаг --read-only эти права сужает. Даже без вредоносного кода такая схема означает, что чужой сервер управляет вашим терминалом. С версии 0.2.1 клиент, по описанию, сначала ходит на «ускоренную линию» и лишь при ошибке возвращается на основной сайт, а учётные данные кладёт в ~/.rclaude.

В advisory GitHub нет технических подробностей, только стандартный вердикт для малвари: компьютер, где пакет был установлен или запущен, следует считать полностью скомпрометированным, все секреты и ключи с него нужно сменить с другого устройства, а удаление пакета не гарантирует, что вредоносный код исчезнет. Затронуты конкретные версии: @rclaude/darwin-x64 0.2.1 и @rclaude/darwin-arm64 0.2.0. Сейчас этих версий в реестре npm уже нет, а остальные (последняя 0.2.6) и основной пакет rclaude на 13 ноября в базе вредоносных не числятся. Что именно делали помеченные сборки, публично не описано.

Как устроена кампания загрузчиков в PyPI

13 ноября GitHub опубликовал advisory по пакету qwen3ttsui, название которого отсылает к голосовой модели Qwen3-TTS. Он входит в кампанию, которую исследователь под ником kam193 назвал 2026-10-voice-synthesis-profiles. По его описанию, это семейство похожих загрузчиков: сами пакеты вредоносной нагрузки не содержат, а умеют скачать и выполнить код по заданному URL. Как их используют, неизвестно, но скоординированный выпуск множества обманчивых способов загрузить чужой код исследователь считает явно вредоносным. Сам qwen3ttsui в PyPI описан как «крошечный загрузчик и запускатель удалённых Python-профилей».

Мы выгрузили из GitHub Advisory Database все записи с меткой этой кампании: их 83. Первые 43 появились 22 октября, ещё 21 на следующий день, 15 добавлены 12 ноября и 4 утром 13 ноября. Примерно половина названий маскируется под синтез и распознавание речи (ferrotts, lumitts, voxcpmttslora, acustoviasr), остальные похожи на утилиты для очередей задач и бенчмарков (taskquay, evalometer, stackvane). Во всех записях затронута версия 0.1.0.

Пакеты, добавленные 12–13 ноября: acustoviasr, eulaliatts, evalometer, ferrotts, flowmetry, garviscope, garvisometerui, garvisuite, inframetric, lumitts, melstagen, phoneliasr, qwen3ttsui, spectrova, stackvane, voxcpmttslora, voxgramasr, voxrelitts, wavforge.

Почему MCP-сервер для распознавания прав признан вредоносным

my-mcp-server-driving-license-ocr предлагает агенту инструмент analyze_image для распознавания водительских удостоверений. По advisory на основе находки Amazon Inspector, в версии 0.1.3 инструмент принимает ссылку на картинку или её байты в base64 и отправляет их POST-запросом на http://42.193.222.35:8000/ocr_pic. Код читает адрес из переменной окружения MY_API_URL, но сразу перезаписывает его захардкоженным IP, так что направить запросы на свой сервер нельзя. Адрес никак не раскрыт издателем, соединение идёт без TLS, а получатель видит изображения документов с персональными данными.

Мы скачали все пять опубликованных версий: в 0.1.0–0.1.2 и в последней 0.1.5 адрес берётся только из MY_API_URL, захардкоженный IP есть лишь в 0.1.3. В 0.1.5 сообщение об ошибке отсылает к настройкам на ModelScope, китайской площадке моделей и MCP-серверов. Похоже ли это на небрежную отладку или на сознательный сбор данных, по коду не скажешь, но для пользователя результат один: документы уходили на неизвестный сервер. Для MCP-серверов из каталогов это хороший пример, почему стоит читать код инструмента до подключения, а версии фиксировать.

Кто просит у веб-серверов .claude/.credentials.json

HoneyLabs держит сеть ловушек-honeypot и разобрала незапрошенный трафик с 27 августа по 9 ноября 2026 года. 4 сентября сканер из Google Cloud (AS396982), который с 27 августа ежедневно запрашивал одни и те же 543 пути (логи Laravel, ключи почтовых сервисов, дампы баз), за одну секунду добавил в список 49 новых. 32 из них относятся к ИИ-ассистентам: /.claude.json, /.claude/settings.json, /.claude/.credentials.json, /.cursor/mcp.json, /.windsurf/mcp.json, /.aider.env, /.continue/config.json, /.mcp.json, /.vscode/mcp.json, /litellm_config.yaml и другие. В /.claude/.credentials.json Claude Code хранит OAuth-токены на машине без системного хранилища ключей, а MCP-конфиги в блоке env держат токены от GitHub, баз и Slack. Остальные 17 путей — история и стартовые файлы оболочки вроде /.zsh_history и /.bashrc, где тоже оседают строки вида export ANTHROPIC_API_KEY=....

Атакующие охотятся за токенами Claude Code и MCP: что проверить_16
Запросы к файлам ИИ-ассистентов по неделям. Изображение: HoneyLabs

За первые 11 дней наблюдения сканер отправил 366 845 запросов с 2 894 адресов, 2 499 из них встречались лишь один день: похоже на короткоживущие облачные машины, поэтому блокировать по IP почти бесполезно. Запросы шли на 203 порта, и 443 был только 28-м по нагрузке; чаще всего стучались на 8190, 8085 и 4567, где обычно оказываются открытые внутренние панели и dev-серверы. Файлы ИИ-ассистентов этот сканер запрашивал с 4 по 7 сентября, 8 сентября исчез, но другие клиенты продолжили: с 8 сентября по 9 ноября HoneyLabs насчитала 8 067 таких запросов, хотя бы несколько каждую неделю. Для масштаба: только за неделю с 4 сентября их было 18 707.

Оговорка авторов важна: ловушки видят только то, что сканеры спрашивают, и узнать, отвечал ли им хоть один настоящий сервер, нельзя. Первые такие запросы ещё в июле описал SANS Internet Storm Center на логах одного маленького хостинга, а к сентябрю эти пути попали в общий словарь для поиска учётных данных.

Что проверить у себя прямо сейчас

  1. npm: npm ls -g --all для глобальных установок и npm ls --all в проектах (платформенные сборки ставятся как необязательные зависимости rclaude), плюс каталог ~/.rclaude. Если стояли @rclaude/darwin-x64 0.2.1 или @rclaude/darwin-arm64 0.2.0, по рекомендации GitHub считайте машину скомпрометированной и меняйте с другого устройства все ключи и токены, которые на ней были.
  2. PyPI: поищите пакеты кампании в окружениях и lock-файлах, например pip list | grep -iE 'tts|asr|qwen3ttsui|garvi|wavforge|spectrova', и сверьте с полным списком в базе GitHub по метке кампании. Загрузчик сам по себе ничего не крадёт, но код, который он скачал и выполнил, мог сделать что угодно.
  3. MCP: если подключали my-mcp-server-driving-license-ocr, проверьте версию; 0.1.3 отправляла картинки на сторонний IP. Документы, которые через неё проходили, стоит считать утёкшими.
  4. Веб-серверы: запросите у своих хостов пути /.claude.json, /.claude/.credentials.json, /.cursor/mcp.json, /.mcp.json, /.aider.env. Код 200 сам по себе ничего не доказывает: сайт может отдать обычную страницу. Откройте тело ответа; если там действительно лежит запрошенный файл, корень сайта указывает на домашний каталог или чекаут, и все секреты из этого файла нужно сменить, для MCP-конфига это каждый токен в блоке env.
  5. Блокировка по путям: адреса сканеров меняются ежедневно, поэтому HoneyLabs советует отсекать сами пути, например одним блоком location в nginx (ниже).
			for p in /.claude.json /.claude/.credentials.json /.cursor/mcp.json /.mcp.json /.aider.env; do
  curl -s -o /dev/null -w "%{http_code} %{size_download} $p\n" "https://your-host$p"
done
		
			location ~* ^/(\.claude|\.cursor|\.aider|\.continue|\.codeium|\.windsurf|\.litellm|\.mcp\.json|\.vscode/mcp\.json) {
    return 404;
}
		

Те же файлы утекают и через Git: в начале ноября Apiiro нашла 1 122 публичных копии .claude/settings.local.json с настоящими секретами, мы разбирали, как они туда попадают. А мартовская атака на LiteLLM показала, как пакет для работы с нейросетями превращается в стилер секретов разработчика: полный разбор той атаки. Каталоги .claude/, .cursor/ и MCP-конфиги на ноутбуке и сервере стоит защищать так же, как .env.

Чего пока не известно

Число пострадавших ни по одному из пакетов не названо. GitHub не объяснил, что именно делали помеченные сборки @rclaude, и не пометил остальные версии; у кампании загрузчиков в PyPI неизвестна полезная нагрузка, которую они должны были скачивать. HoneyLabs не может сказать, получил ли сканер хоть один настоящий файл с токенами. Если появятся разборы кода @rclaude или сведения об отзыве токенов со стороны Anthropic и Cursor, мы обновим материал.

Источники: GitHub Advisory: Malware in @rclaude/darwin-x64 (GHSA-gm9f-q9rw-p3gm), GitHub Advisory: Malware in @rclaude/darwin-arm64 (GHSA-mq7w-jmv5-vq3p), GitHub Advisory: Malicious code in qwen3ttsui (GHSA-jh3g-jv4f-xccp), kam193 Bad packages: qwen3ttsui, GitHub Advisory: Malicious code in my-mcp-server-driving-license-ocr (GHSA-wg5f-m5mv-gmjg), HoneyLabs: We analyzed 366,845 requests from a scanner that asks web servers for .claude.json and .cursor/mcp.json, npm: rclaude

Изображение на обложке: Данные: GitHub Advisory Database; расчёт Tproger