Рекрутёр прислал репозиторий на GitHub «посмотреть». Атака началась при npm install

Full-stack разработчик получил сообщение в LinkedIn от крипто-стартапа: нерабочий прототип и вежливая просьба разобраться с устаревшими Node-модулями. Весь эксплойт был зашит именно в этой инструкции.

Вкратце

Запустить npm install было бы достаточно. Скрипт prepare в пакете автоматически выполняет файл, спрятанный под слоями закомментированных тестов, — тот подтягивает с удалённого сервера произвольный код и запускает его.

Разработчик не клонировал репозиторий локально. Он поднял одноразовый VPS, направил на код AI-агент с доступом только для чтения — и тот почти сразу выделил app/test/index.js. Тред вынес быстрый и мрачный вердикт об авторах: КНДР.

Приманкой стала одна фраза

Роман Иманкулов, full-stack Python-разработчик, описал случившееся: рекрутёр написал ему в LinkedIn о вакансии ведущего инженера в небольшом крипто-стартапе, сослался на сломанный прототип и прислал публичный GitHub-репозиторий с конкретной просьбой — «разберитесь с проблемой устаревших Node-модулей».

Эта формулировка и была всей атакой. Полезная нагрузка лежала в app/test/index.js, спрятанная между стенами закомментированных тестов. Скрипт prepare в package.json запускается автоматически после npm install и выполняет node app/index.js, который загружает тот самый файл. Далее код собирал URL из фрагментов строк — rest-icon-handler.store/icons/77 — и, по словам Иманкулова, «запускал всё, что сервер присылал обратно на вашу машину». Чтобы сработало, жертве достаточно было установить зависимости. «Разберитесь с устаревшими Node-модулями» — это и был толчок сделать именно это.

Почему он не запустил код на своём ноутбуке

Вместо того чтобы клонировать репозиторий на свою машину, Иманкулов обращался с ним как с живой бомбой: одноразовый VPS, AI-агент с доступом только для чтения, задача — проверить код. Агент «почти сразу остановился на app/test/index.js». Обман уходил глубже кода: профиль рекрутёра в LinkedIn был скопирован с реального арт-журналиста, а история коммитов репозитория ложно приписана реальному разработчику, который позже подтвердил, что никогда этого кода не касался.

Тред называет подозреваемого — и мотив

Читатели, разбирающиеся в безопасности, жанр узнали мгновенно.

«Это, скорее всего, группа Lazarus — конкретно Famous Chollima, то есть КНДР.» — комментатор, видевший этот паттерн раньше

Более ценным оказался комментарий о том, почему под удар попадают именно разработчики. Один из аккаунтов с высокой репутацией изложил логику: инженеров атакуют в расчёте на то, что у них «могут лежать настоящие учётные данные от других работодателей или публичных open-source проектов… чтобы добраться до коммитов» — это плацдарм в supply chain, а не просто одна захваченная машина. Другой читатель заострил важную деталь: атакующий, похоже, понимал имплементацию на уровне full stack — это больше похоже на прицельную охоту, чем на ковровую атаку.

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

Пистолет в ногу — это сам npm install

Если убрать шпионский антураж, останется простой урок: поведение пакетного менеджера по умолчанию — выполнять код при установке, а «посмотри этот репозиторий» стало убедительным фишинговым предлогом для целой профессии. Запускать проект необязательно. Достаточно npm install. Защита скучная и работающая: --ignore-scripts, одноразовая VM, никаких чужих зависимостей на машине, где хранятся ваши ключи. Само собеседование было эксплойтом.

Получайте такие разборы каждый день

Главные истории Hacker News — на email, в Telegram или RSS.

Следующая новость · 4 из 22 Читать дальше
🚀Tech

Iroh 1.0: набирай криптографический ключ, а не IP — 200 млн точек за месяц

Идея Iroh проста: адрес устройства — это его криптографический ключ, который не меняется при смене сети. Релиз 1.0 фиксирует протокол. Главная жалоба треда: на лендинге непонятно, что это вообще такое.

★ 947 · 💬 285 · iroh.computer · 3 мин