Какая деталь в профиле рекрутера должна была насторожить сразу?
Разработчик Дэниел Тофан рассказал о попытке заразить его компьютер через «выгодное» предложение работы в <span class="blocked-highlight" title="Соцсеть заблокирована на территории РФ">LinkedIn</span>. 21 января 2026 года ему написали по поводу фриланс-проекта для якобы британской платформы в сфере недвижимости с бюджетом 600-800 тыс. долларов и попросили «оценить кодовую базу». Профиль выглядел правдоподобно: 500+ контактов, значок верификации, указана компания и должность. Позже автор заметил деталь, которая должна была насторожить сразу: при большом числе связей у аккаунта не было ни одного поста или активности.
Вместо обычного тестового задания собеседник прислал ссылку на репозиторий GitLab с React/Node.js приложением и дополнил это документацией в Notion. Код действительно выглядел «живым»: структура проекта, фронтенд с визуализациями, бэкенд на Express, интеграции вроде MongoDB и SendGrid. Но эта реалистичность оказалась ширмой для целевой атаки на цепочку поставок: в проект встроили троянизированную логику, которая использует lifecycle-хуки npm и запускается автоматически при установке зависимостей.
Механика была простой и неприятной. В <code>package.json</code> атакующие прописали <code>postinstall</code>, который после <code>npm install</code> запускал <code>start</code> и поднимал сервер. Дальше срабатывал загрузчик, спрятанный в конце «обычного» файла контроллера: он декодировал Base64-строки из переменных окружения, вытаскивал URL, скачивал удаленный payload с легитимного хостинга JSON ( jsonkeeper.com ) и исполнял полученную строку кода через <code>Function.constructor</code>. По сути это была удаленная подгрузка и выполнение произвольного кода на машине жертвы, замаскированные под часть веб-приложения.
По описанию автора, удаленный payload состоял из нескольких модулей. Один поднимал канал управления и связи, устанавливая соединение socket.io с сервером <code>144.172.108.57:4891</code> и позволяя выполнять команды через <code>child_process</code>, второй искал по дискам «интересные» файлы вроде <code>.env</code>, ключей, документов и таблиц и отправлял их на <code>http://144.172.108.57:4896/upload</code>, третий следил за буфером обмена (в том числе через PowerShell) и пересылал содержимое на сторону атакующих. Инфраструктура, по данным расследования, была размещена у VPS-провайдера Cloudzy, а «британская недвижимость» выглядела как легенда - сам автор отдельно подчеркивает, что не видит доказательств причастности реальной компании, чье имя использовали в профиле.
После обнаружения закладки разработчик удалил клон репозитория, очистил локальную папку <code>.npm</code>, где могла появиться «персистентность», и в качестве меры предосторожности провернул ротацию множества ключей и токенов (от API сервисов до облаков и платежной инфраструктуры). Он также отправил жалобы в GitLab и LinkedIn и сохранил артефакты для отчета. 26 января GitLab ответил, что удалил репозиторий по обращению автора, но профиль в LinkedIn на момент публикации оставался активным.
Главный вывод этой истории - «обычный» код-ревью не равен аудиту безопасности, особенно когда речь идет о целевых атаках. Тофан пишет, что даже проверка с помощью ИИ сначала не увидела проблему и назвала проект «нормальным», и только после прямого запроса на поиск вредоносной логики модель обратила внимание на Base64, динамическое исполнение и подгрузку удаленного кода. Как базовые меры защиты он советует всегда просматривать npm-скрипты вроде <code>postinstall</code>/<code>preinstall</code>, настороженно относиться к <code>eval</code>/<code>new Function</code>/<code>Function.constructor</code>, декодировать подозрительные строки, искать использование <code>child_process</code> в веб-приложениях и, если уж нужно запускать чужой проект, делать это только в изолированной среде (песочнице, одноразовой VM или контейнере без доступа к файловой системе хоста).
Разработчик Дэниел Тофан рассказал о попытке заразить его компьютер через «выгодное» предложение работы в <span class="blocked-highlight" title="Соцсеть заблокирована на территории РФ">LinkedIn</span>. 21 января 2026 года ему написали по поводу фриланс-проекта для якобы британской платформы в сфере недвижимости с бюджетом 600-800 тыс. долларов и попросили «оценить кодовую базу». Профиль выглядел правдоподобно: 500+ контактов, значок верификации, указана компания и должность. Позже автор заметил деталь, которая должна была насторожить сразу: при большом числе связей у аккаунта не было ни одного поста или активности.
Вместо обычного тестового задания собеседник прислал ссылку на репозиторий GitLab с React/Node.js приложением и дополнил это документацией в Notion. Код действительно выглядел «живым»: структура проекта, фронтенд с визуализациями, бэкенд на Express, интеграции вроде MongoDB и SendGrid. Но эта реалистичность оказалась ширмой для целевой атаки на цепочку поставок: в проект встроили троянизированную логику, которая использует lifecycle-хуки npm и запускается автоматически при установке зависимостей.
Механика была простой и неприятной. В <code>package.json</code> атакующие прописали <code>postinstall</code>, который после <code>npm install</code> запускал <code>start</code> и поднимал сервер. Дальше срабатывал загрузчик, спрятанный в конце «обычного» файла контроллера: он декодировал Base64-строки из переменных окружения, вытаскивал URL, скачивал удаленный payload с легитимного хостинга JSON ( jsonkeeper.com ) и исполнял полученную строку кода через <code>Function.constructor</code>. По сути это была удаленная подгрузка и выполнение произвольного кода на машине жертвы, замаскированные под часть веб-приложения.
По описанию автора, удаленный payload состоял из нескольких модулей. Один поднимал канал управления и связи, устанавливая соединение socket.io с сервером <code>144.172.108.57:4891</code> и позволяя выполнять команды через <code>child_process</code>, второй искал по дискам «интересные» файлы вроде <code>.env</code>, ключей, документов и таблиц и отправлял их на <code>http://144.172.108.57:4896/upload</code>, третий следил за буфером обмена (в том числе через PowerShell) и пересылал содержимое на сторону атакующих. Инфраструктура, по данным расследования, была размещена у VPS-провайдера Cloudzy, а «британская недвижимость» выглядела как легенда - сам автор отдельно подчеркивает, что не видит доказательств причастности реальной компании, чье имя использовали в профиле.
После обнаружения закладки разработчик удалил клон репозитория, очистил локальную папку <code>.npm</code>, где могла появиться «персистентность», и в качестве меры предосторожности провернул ротацию множества ключей и токенов (от API сервисов до облаков и платежной инфраструктуры). Он также отправил жалобы в GitLab и LinkedIn и сохранил артефакты для отчета. 26 января GitLab ответил, что удалил репозиторий по обращению автора, но профиль в LinkedIn на момент публикации оставался активным.
Главный вывод этой истории - «обычный» код-ревью не равен аудиту безопасности, особенно когда речь идет о целевых атаках. Тофан пишет, что даже проверка с помощью ИИ сначала не увидела проблему и назвала проект «нормальным», и только после прямого запроса на поиск вредоносной логики модель обратила внимание на Base64, динамическое исполнение и подгрузку удаленного кода. Как базовые меры защиты он советует всегда просматривать npm-скрипты вроде <code>postinstall</code>/<code>preinstall</code>, настороженно относиться к <code>eval</code>/<code>new Function</code>/<code>Function.constructor</code>, декодировать подозрительные строки, искать использование <code>child_process</code> в веб-приложениях и, если уж нужно запускать чужой проект, делать это только в изолированной среде (песочнице, одноразовой VM или контейнере без доступа к файловой системе хоста).
- Источник новости
- www.securitylab.ru