Когда прединтервью code review в LinkedIn упирается в NPM-трояна

На Dev.to автор разбирает переписку с «рекрутером»: обещание удалённой роли «Software Engineer at a DEX», просьба просмотреть код до техинтервью, ссылки на GitHub и приглашение в Calendly. В типичном сценарии фигурирует легенда «remote Web3/AI engineering role» — то есть слова про ИИ входят в приманку найма. Там же приводят ссылку на Microsoft Security Blog (Contagious Interview): в материале отмечены маски «поставщиков решений на базе ИИ» (AI-based solution providers) и среди цепочек — пример Visual Studio Code / Cursor App → cmd / PowerShell / bash без количественных метрик кампании — как пересечение социальной инженерии в найме и привычного инструментария IDE.
Легенда вакансии: DEX, Web3 и «AI engineering» перед ссылкой на репозиторий
В развёрнутом тексте связка такая: рекрутинг в LinkedIn и просьба «заранее» открыть код. Репозиторий выставлен как React + web3 dApp, имя metabiteorg/NitroGem указано явно; отмечено, что репозиторий зарепорчен в категории GitHub Trust & Safety — по описанию первоисточника, с ожиданием удаления.
Смысл сюжета не в угадывании мотива «рекрутёра», а в наблюдаемом шаблоне «инженер наймается под стек AI/Web3/DEX» с запросом на локальные действия над репозиторием. Именно этот переход между социальной инженерией и техникой Microsoft описывает отдельно для сегментов криптовалютные торговые фирмы и поставщиков решений на базе ИИ, где жертве предлагают клонировать и выполнять NPM-пакет с GitHub, GitLab или Bitbucket.
Подменённый процесс найма упирается в артефакты привычного dev-пайплайна: аккаунт на Git-хостинге, клонирование и установка зависимостей.
После npm install: пять стадий, Google Doc и отправка переменных окружения
Цепочка по описанию сценария в статье выглядит так:
- Скрипт жизненного цикла
prepareвpackage.jsonзапускаетnode app/index.js. app/index.jsподтягиваетfrontController.js; при загрузке модуля вызываетсяgetGoogleDriveValue()в диапазоне строк 591–619 этого файла.- Оттуда загружается публичный Google Doc по HTTPS.
- Тело документа декодируют (указано как base64) в URL; вспомогательная
verify()воsettingController.jsотправляет содержимоеprocess.envна этот URL черезaxios.post. - Ответ управляющего сервера исполняется через
new (Function.constructor)("require", responseData)с переданным настоящимrequire— в итоге описывают произвольное исполнение JavaScript и доступ к модулям вродеfs,child_process,net.
Важное следствие для работы разработчика: lifecycle-скрипты NPM включаются при установке там, где дерево файлов принимают без проверки.
В том же официальном разборе Microsoft про кампанию Contagious Interview говорится о social engineering, таргете на разработчиков, злоупотреблении доверием в рекрутинге и сценарии с Visual Studio Code: при первом открытии предлагают доверять автору репозитория, после чего конфигурация задач запускается автоматически и ведёт к загрузке бэкдора — параллель к цепочке выше через запуск кода после быстрого знакомства с чужим репозиторием.
Маскировка под CRA, install.cmd и отсечение Gitpod с Codespaces
В package.json строка prepare оформлена как длинная связка с react-scripts и флагами вроде --kill-others; рабочая часть — npm run app:pre, остальное имитирует «Create React App» как «визуальное украшение». Есть npm install.cmd, который запускает обычный npm install без --ignore-scripts, и скрипт install:fix с более безопасным --ignore-scripts.
Вспомогательный check-environment.js может отказать при npm start в Gitpod, GitHub Codespaces или терминале VS Code под Windows 11 — в материале это трактуют как антианалитический фильтр. Речь уже не про ИИ-агента, а про конфигурации сред разработки и облачных IDE, где часто открывают «кандидатские» задачи перед собеседованием.
npm install --ignore-scripts
(У легитимных нативных модулей позже может понадобиться точечный npm rebuild.)
Совпадение двух текстов: браузер против локального клонирования
Первоисточник подчёркивает разницу поверхности: просмотр на github.com в браузере не выполняет lifecycle-скриптов; риск — у локального клонирования и npm install.
Рекомендации: сначала читать package.json, проверять scripts, особенно prepare / postinstall / preinstall / install, при странностях останавливаться и читать скрипт; для незнакомого репозитория — ставить npm install --ignore-scripts.
В материале Microsoft, опубликованном 2026-03-11, в блоке про реагирование приводят кампанию Contagious Interview с активностью не ранее декабря 2022 и отдельно выделяют примеры цепочек «Visual Studio Code / Cursor App → cmd / PowerShell / bash → …» как шаблон для поиска подозрительного исполнения.
Это не инструкция «куда кликнуть», а готовое пересечение: официально описанная угроза и рабочее место, где IDE, NPM и секреты в окружении идут рядом.
В том же тексте на Dev.to кейс связан с блоком отчётов Microsoft Threat Intelligence, Mandiant, Palo Alto Unit 42 и набором имён (Sapphire Sleet, DEV#POPPER, BeaverTail, InvisibleFerret, UNC4899); приложена ссылка на gist с таблицей IOC.
Источники
- Vladimir Novick, A LinkedIn Recruiter Sent Me Malware Disguised as a "Pre-Interview Code Review" — Dev.to (дата доступа: 2026-05-04, UTC).
- Microsoft, Contagious Interview malware delivered through fake developer job interviews — https://www.microsoft.com/en-us/security/blog/2026/03/11/contagious-interview-malware-delivered-through-fake-developer-job-interviews/ (дата доступа: 2026-05-04, UTC).
- Gist с IOC (ссылка из поста на Dev.to) — https://gist.github.com/vnovick/86dc0af8ffcb39260b7d9d01278a6263 (дата доступа: 2026-05-04, UTC).