Слогер Создать блог
Разработка

Тестовое задание как ловушка: как фейковое собеседование заражает ноутбук через npm

Никаких интервью, только ссылка на GitHub и просьба «склонировать и запустить». Внутри — чужой npm-токен и пакет, которого нет в публичном реестре. Разбираем схему по шагам и проверяем, что делать, если вы уже нажали npm install.

Работу дали без интервью. Это должно было насторожить сразу. «Рекрутер» из компании Carmlize добавил разработчика в рабочий Slack, никто не позвонил, никто не спросил про опыт, ни один инженер не написал ни строчки. Первое живое сообщение — ссылка на GitHub и дружелюбное «вот техническое задание, склонируйте и запустите». Он не запустил. Полез смотреть.

Через несколько недель вышло совместное предупреждение государственных ведомств по кибербезопасности — ровно про этот приём. Фейковые собеседования скомпрометировали больше 30 000 машин в 100+ странах примерно за восемь месяцев. Интуиция оказалась дешевле любого антивируса.

Масштаб, который плохо укладывается в голове

  • 30 000+ устройств в 100+ странах с декабря 2025-го по июль 2026 года.
  • 7 000+ криптокошельков, украдено около $10,7 млн.
  • 338+ вредоносных npm-пакетов, связанных с приманками «собеседование», скачали больше 50 000 раз. Исследователи Socket считают их с июля 2025 года.
  • Одна волна в ноябре 2025-го добавила 197 пакетов и 31 000+ загрузок.
  • В июне 2025-го 24 разных npm-аккаунта опубликовали 35 пакетов, и часть успели удалить раньше, чем их толком посчитали.

Каждая из этих загрузок — разработчик, который думал, что выполняет тестовое.

Как устроена приманка

Схема выглядит безобидно ровно до момента, когда вы открываете файлы. Репозиторий Carmlize — приличный на вид проект: дашборд на Next.js с живыми котировками, экраном обмена, движком сопоставления ордеров, подключением кошелька и небольшим контрактом на Solidity. Бриф для кандидата при этом честно сообщает: «никакого Solidity, никакой работы с RPC». А в репозитории — ровно это. Мелочь, которая многое объясняет: бриф просто скопировали и наклеили на чужую приманку.

Вредоносного кода внутри самого проекта нет. Так и задумано — ловушка не в репозитории, а в том, что репозиторий подтягивает.

Шаг первый: токен в .npmrc

В корне лежит файл .npmrc со строкой вида //registry.npmjs.org/:_authToken=... Легитимное тестовое с учётными данными в комплекте — это нонсенс. С этим файлом npm install залогинится в реестр как кто-то другой и получит доступ к пакетам, которых публично не существует.

Шаг второй: безобидный плагин для анимаций

В package.json прописан dev-зависимостью пакет animatecss-tailwind-adapter, а конфиг Tailwind его подгружает с настройками длительности и задержки. Кто станет допрашивать помощник для анимации? Смотрим метаданные — и картинка складывается: единственная существующая версия 2.0.6, впервые опубликована 28 июля 2026 года (пакет, стартующий с двойки, имитирует солидную историю), аккаунт мейнтейнера не совпадает ни с автором в package.json, ни с владельцем GitHub-репозитория.

Шаг третий: пакет, которого нет

Анимационный плагин зависит от @aaron205whitmore/postcss-animate-utils. Публичный реестр на этот запрос отдаёт 404 — ни посмотреть, ни скачать, ни прочитать. Достать его можно только с правильными правами. Например, с тем самым токеном из .npmrc.

Дальше всё сходится:

  1. Вы запускаете npm install. npm молча использует вложенный токен.
  2. Скачивается скрытый пакет, и его install-скрипты выполняются немедленно.
  3. Вы запускаете npm run dev. Tailwind читает конфиг, конфиг грузит плагин, плагин подтягивает скрытый пакет внутри вашего Node-процесса — с правами, которые есть у вашей учётной записи.

Читать код можно построчно и ничего не найти. Репозиторий — просто фургон доставки.

Легитимное тестовое против приманки

ПризнакНормальное тестовоеПриманка
Начало процессаСозвон, вопросы про опыт, живой инженер в перепискеСразу Slack и ссылка на репозиторий
Что смотрятВаш код и решения, запуск не обязателенНастойчивая просьба «склонировать и запустить»
Учётные данные в репозиторииИх нет, ключи выдаются отдельно и личноТокен в .npmrc, приватный registry-адрес
ЗависимостиИзвестные пакеты с историей версийСвежий пакет, стартующий с версии 2, чужой мейнтейнер
Конфиги сборкиЗагружают только стандартные пресетыtailwind.config, postcss.config, vite.config тянут код
КомпанияЕсть продукт, клиенты, реальные людиВиртуальный адрес на сотни компаний, профили с одной публикацией

Что именно ищут на вашей машине

В предупреждении перечислены семейства вредоносных программ с почти мультяшными именами: BeaverTail, InvisibleFerret, OtterCookie. Работа у них прозаичная: криптокошельки и seed-фразы, куки браузера и сохранённые пароли, SSH-ключи, файлы .env, учётные данные GitHub и облачных сервисов. Плюс закладка на будущее, чтобы вернуться.

Отдельно стоит сказать вот о чём: в предупреждении указано, что украденные учётные данные разработчика открывают атакующим путь в инфраструктуру его работодателя. Служебный ноутбук в этой истории — не только ваш риск.

Восемь признаков, что тестовое — приманка

  1. Вас «наняли» или добавили в Slack до того, как с вами поговорил хоть один человек.
  2. Настаивают именно на запуске. Настоящему проверяющему интересен ваш код, а не работоспособность их сборки.
  3. В репозитории лежат учётные данные: токены, настоящие ключи, приватные registry-адреса.
  4. Зависимость подозрительно новая. npm view <pkg> time maintainers repository занимает секунды и рассказывает много.
  5. Конфиги подгружают пакеты: tailwind.config, postcss.config, next.config, vite.config выполняют код при сборке.
  6. Есть install-скрипты. Читайте каждый preinstall, postinstall и prepare.
  7. Живых людей в компании не найти: общий виртуальный офис, профили-призраки, никто не отвечает.
  8. Бриф и код противоречат друг другу — как «никакого Solidity» рядом с контрактом на Solidity.

Как смотреть такое тестовое безопасно

  • Открывайте в редакторе и ничего не устанавливайте. VS Code спрашивает, доверяете ли вы папке, — отвечайте нет, потому что задачи из .vscode тоже умеют запускать код.
  • Изучайте пакеты без запуска: npm view <pkg> для метаданных, npm pack <pkg> чтобы скачать tarball и прочитать содержимое.
  • Если запустить всё-таки нужно — только одноразовая виртуалка или контейнер без кошельков, SSH-ключей, браузерных сессий и облачных доступов. Файл .npmrc удалить до всего остального.
  • npm install --ignore-scripts закрывает часть сценариев, но не спасёт от плагина, который подгружается из конфига во время сборки. Это и есть основной вектор описанной атаки.

Двадцать минут на проверку адреса компании, мейнтейнера зависимости и содержимого .npmrc стоят дешевле, чем разговор с безопасниками.

Если вы уже запустили

  1. Отключите машину от сети.
  2. С другого, чистого устройства переведите крипту на новый кошелёк, смените пароли и перевыпустите SSH-ключи, токены GitHub и облачные ключи.
  3. Разлогиньтесь во всех важных сессиях: почта, GitHub, биржи, Google.
  4. Просканируйте машину. Надёжнее — снести и переустановить.
  5. Сообщите о пакетах в службу безопасности npm, а о рабочем пространстве и «рекрутере» — в Slack и LinkedIn.

Спасает в таких историях не хитрый инструмент, а ощущение, что что-то не так, и привычка посмотреть вокруг до запуска. Код в приманках выглядит чистым специально — выдают их детали вокруг: компания, которой нет, сотрудники, которых нет, отсутствие интервью и пароль, который никто не должен был класть в архив. Нормальный работодатель спокойно проведёт собеседование и не обидится на вопросы до запуска его кода. Если торопят — это и есть ответ.

По материалам: career. Текст переработан редакцией Слогера.

← На главную

Рекламное место — Конец поста
Реклама · Слогер

Комментарии (0)

Войдите, чтобы комментировать.

Пока нет комментариев. Будьте первым.

AI

Почему просмотры не превращаются в деньги: разбор шага между «увидели» и «купили»

Агент с бюджетом в токенах потратил 1200 токенов на песню, портрет, витрину и страницу — и заработал ноль. Разбираем, что стоит между вниманием и оплатой и как это проверить на себе.

Слогер 14.10.2026 ▲ 0
Карьера

Какие вакансии для выпускников растут, а какие падают: разбор 13 профессий по данным ONS

ONS ежемесячно считает новые онлайн-объявления о работе в Британии. Эти данные никто не читает, потому что они выходят неудобной таблицей. Мы разобрали двенадцать месяцев по тринадцати профессиям, в которые попадают выпускники, — и там есть сюрпризы.

Слогер 14.10.2026 ▲ 0
Маркетинг

Мессенджер для компании: каналы, клиенты и акции в одном месте

У компании в мессенджере может быть своё место: профиль с логотипом, каналы, группы для команды и актуальные предложения. Клиентов приглашают в канал по ссылке, а акцию публикуют с ценой и кнопкой, которая ведёт на нужную страницу.

Слогер 13.10.2026 ▲ 1
Fluxs lenta
Реклама · fluxs.ru
Разработка

Как одному собрать серьёзный продукт: разбор опыта разработчика, который 5 лет писал платформу по вечерам

Один человек, пять лет вечеров после основной работы — и живая платформа с дешёвым обслуживанием. Что из этого опыта применимо к вашему проекту, а что лучше не повторять.

Слогер 13.10.2026 ▲ 0
AI

Как построить AI-скрининг резюме на Node.js: разбор пайплайна и его ограничений

Почти все демо AI-рекрутинга — это Python-монолит. В рабочем найме сложнее другое: слой оркестрации, который принимает резюме, считает соответствие роли и решает, когда в дело вступает человек.

Слогер 13.10.2026 ▲ 0
Карьера

Как проходят собеседования по кодингу с AI-ассистентом: разбор восьми компаний

AI-ассистированный раунд есть уже у Amazon, Google, Meta, Stripe, Shopify, DoorDash, Instacart и Coinbase — и у каждой он устроен по-своему. Разбираем, чем форматы отличаются и что это значит для подготовки.

Слогер 13.10.2026 ▲ 0
AI

Сколько часов уходит на поиск клиентов вручную и можно ли отдать это ИИ

Как искать новых клиентов для B2B и не получить в итоге мёртвую базу? Мы сделали ИИ-помощника: он находит компании под ваш профиль, читает их сайты, проверяет по реестру и к каждому выводу прикладывает ссылку на страницу, которую реально прочитал.

Слогер 12.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru
Карьера

Как написать сопроводительное письмо для удалённой работы: разбор рынка 2026 года

Из 5 237 удалённых вакансий больше половины открыты для кандидатов по всему миру. Письмо здесь работает громче резюме — если в нём есть результат, а не пересказ должностей.

Слогер 12.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru