В реестре пакетов npm обнаружен вредоносный пакет @withgoogle/stitch-sdk, имитирующий официальный SDK для инструмента дизайна Google Stitch с помощью техники скоупингового сквоттинга. Пакет был опубликован под областью видимости @withgoogle, которая внешне совпадает с частью доменного имени продукта (stitch.withgoogle.com), но не является официальной областью Google. На момент установки вредоносная программа без предупреждения собирает учётные данные разработчиков из восьми источников и передаёт их на подконтрольный злоумышленнику сервер.
Описание
Инцидент затрагивает разработчиков, использующих AI-инструменты и платформы для совместной работы. Пакет @withgoogle/stitch-sdk был опубликован в двух версиях - v0.1.1 и v0.1.2. За первые сутки после публикации (19 июня 2026 года) было зафиксировано 87 загрузок. Автором указан учётная запись npm maximus-mcmillan (адрес электронной почты maximus-mcmillan@outlook.com), которая не имеет отношения к Google. Домен управления и контроля stitch-production.org был зарегистрирован через GoDaddy 19 июня 2026 года в 11:07 UTC, за 75 минут до публикации первой версии пакета в 12:22 UTC. Домен разрешается в IP-адреса Cloudflare (172.67.189.185, 104.21.65.94) и работает под управлением nginx/1.18.0 на Ubuntu за обратным прокси-сервером.
Вредоносный код представляет собой чистый, читаемый JavaScript без обфускации, шестнадцатеричного кодирования или минификации. Атакующий сделал ставку на то, что доверие, вызываемое областью видимости @withgoogle, позволит избежать ручной проверки кода. Техника скоупингового сквоттинга отличается от обычного тайпсквоттинга - опечаток в имени пакета. В данном случае злоумышленник зарегистрировал область видимости, которая соответствует реальному домену Google (withgoogle.com), и опубликовал пакет с тем же базовым именем, что и у легитимного SDK. Разработчик, знакомый с адресом stitch.withgoogle.com, может ошибочно принять @withgoogle/stitch-sdk за официальный пакет. Google публикует свой SDK как @google/stitch-sdk, использующий область @google, а не @withgoogle. Версионность вредоносного пакета (v0.1.1 и v0.1.2) совпадает с версиями легитимного SDK (у которого также есть выпуски 0.1.1 и 0.1.2-next).
Пакет содержит пять файлов общим объёмом 19 Кбайт. Два из них несут полезную нагрузку. Первый путь выполнения - хук preinstall в файле scripts/preinstall.js, который запускается автоматически при установке пакета через npm install до разрешения зависимостей. Вывод жизненного цикла подавляется, когда пакет устанавливается как зависимость, поэтому сбор данных происходит бесшумно. Второй путь - файл bin/cli.js, который регистрируется как исполняемая команда stitch-sdk в переменной PATH пользователя. При запуске этой команды или вызове npx @withgoogle/stitch-sdk также выполняется идентичный вредоносный код. Оба файла содержат одинаковую логику сбора учётных данных.
Функция main() последовательно вызывает восемь функций-сборщиков: collectClaude(), collectGitConfig(), collectGitconfigFiles(), collectGitCredentials(), collectSshPubkeys(), collectGh(), collectNpm(), collectDocker(). Первой выполняется collectClaude(), что указывает на целенаправленное нацеливание на учётные данные AI-инструмента Claude Code. Функция проверяет наличие установленной утилиты claude, затем запускает claude auth status, разбирает JSON-вывод и извлекает адрес электронной почты аутентифицированного пользователя. Это приоритетная цель - большинство вредоносных пакетов npm нацелены на токены git, npm или облачных провайдеров, а явное выделение Claude Code говорит об особой ценности AI-инструментов для атакующего.
Сборщик git считывает конфигурацию через два параллельных пути: выполняет команды git config --global user.email и git config --system user.email через execSync, а также читает файлы ~/.gitconfig и ~/.config/git/config напрямую с диска с помощью fs.readFileSync. К содержимому применяется регулярное выражение EMAIL_RE, которое извлекает любые строки, похожие на адрес электронной почты, включая старые строки конфигурации и комментарии. Аналогичное выражение применяется к ~/.git-credentials (хранилище HTTPS-паролей и токенов в формате URL), ко всем файлам *.pub в ~/.ssh/ (комментарии открытых ключей SSH обычно содержат email владельца), а также к ~/.npmrc и ~/.docker/config.json (могут содержать токены аутентификации реестров). Для GitHub вызывается интерфейс командной строки gh с запросом API-метода gh api user --jq .email, который извлекает основной адрес электронной почты пользователя через аутентифицированную сессию.
Каждое собранное учётное данное передаётся через единую функцию emit(). Функция отправляет HTTPS GET-запрос на эндпоинт https://stitch-production.org/api/v1 с параметрами src и user, где src - тег источника (например, git_config--global, claude_api_user, file:~/.npmrc), а user - само значение. TLS-сертификат не проверяется из-за флага rejectUnauthorized: false. Используется механизм дедупликации через Set, чтобы одно и то же значение не отправлялось дважды. Счётчик _pending и обратный вызов _maybeExit() гарантируют, что процесс не завершится до окончания всех HTTP-запросов. В версии v0.1.2 добавлен фолбэк-сигнал для случаев, когда ни одно учётное данное не найдено: отправляется GET-запрос с параметром email-not-found=true, что подтверждает факт установки пакета на машине.
Файл README вредоносного пакета содержит ложное предупреждение безопасности: "Хуки preinstall/install/postinstall выполняют произвольный код на машине установки и являются известной поверхностью атаки в цепочке поставок. Держите их минимальными и прозрачными, никогда не загружайте удалённый код, не совершайте телефонные звонки и не трогайте файлы вне пакета". Там говорится, что хук "намеренно безвреден" и якобы проверяет версию Node.js. На деле он собирает учётные данные и связывается с C2-сервером. Текст справки CLI в v0.1.2 ссылается на реальные пакеты (@google/stitch-sdk, ai, @ai-sdk/google) и официальную документацию Google (https://stitch.withgoogle.com/docs/mcp/setup), позиционируя вредоносный пакет как "новую версию" легитимного. Единственная видимая опечатка - "Alternitevly" вместо "Alternatively".
Как показал [анализ пакета, учётная запись npm maximus-mcmillan и GitHub-пользователь maximus-mcmillan, на который ссылается поле repository, не существуют. Вся личность атакующего сфабрикована. Никаких других пакетов под областью @withscope не опубликовано. Домен C2, учётная запись npm и GitHub-идентичность были созданы специально для этой единственной операции.
Разработчикам, установившим @withgoogle/stitch-sdk, следует немедленно сменить учётные данные для всех инструментов, настроенных на скомпрометированной машине: git (включая токены доступа), GitHub, токены публикации npm, аутентификацию Docker-реестра и сессии Claude Code. Использование утилит проверки lock-файлов, таких как vet, может выявить пакеты со скоупинговым сквоттингом до их установки. Инцидент демонстрирует растущую тенденцию нацеливания на AI-инструменты в атаках на цепочки поставок, где доверие к области видимости становится новым вектором социальной инженерии.
Индикаторы компрометации
Package
- @withgoogle/stitch-sdk v0.1.1, v0.1.2
IPv4
- 172.67.189.185
- 104.21.65.94
Domain
- stitch-production.org
SHA256
- 638b523ddd3382b622c412e37f274db1a9a6505893fa7236183f0b67a5355e94
- ba5b2a9a7fe596734fb69bdf1a35071d1a2f435a36e8c870bd4390c562d9f614