Назад к блогу

846 вредоносных npm-пакетов: чем кампания Flooding Dropper опасна для скрапинг-команд

5 августа 2026 Sonatype зафиксировала в npm кампанию Flooding Dropper — 846 вредоносных пакетов (к 11 августа счёт вырос до 1033). Кроссплатформенный загрузчик вычищает переменные окружения, учётные данные и сессии. Разбираем механику кампании и то, почему для парсинг-команд это дороже обычной утечки пароля: вместе с .env уезжают прокси-креды, cookie-сессии и профили антидетект-браузеров.

📅12 августа 2026 г.
846 вредоносных npm-пакетов: чем кампания Flooding Dropper опасна для скрапинг-команд

5 августа 2026 года исследователи Sonatype зафиксировали в npm кампанию, которую назвали Flooding Dropper: 846 вредоносных компонентов, выложенных с десятков одноразовых аккаунтов. Через неделю счёт вырос — в обновлённых данных OpenSourceMalware, отслеживающей ту же кампанию под именем WEL1DROPPER, фигурирует уже 1033 подтверждённых пакета. Внутри — кроссплатформенный загрузчик, который тянет вторую стадию под Windows, macOS и Linux и вычищает с машины разработчика всё, до чего дотянется: переменные окружения, учётные данные, сессии.

Для команд, которые живут на парсинге и автоматизации, это не «ещё одна новость про npm». Скрапинг-стек — это как раз npm: Playwright, Puppeteer, Crawlee, обёртки над прокси-агентами, парсеры HTML, очереди. И на той же машине, где всё это ставится одной командой, обычно лежит .env с логином и паролем от прокси-пула, cookie-jar сессий и профили антидетект-браузера. Разберём, что именно произошло и что из этого следует практически.

Что известно о кампании

Sonatype ведёт кампанию под идентификатором sonatype-2026-005660 с оценкой CVSS 8.7 и классификацией CWE-506 (внедрённый вредоносный код). Характерные признаки, по которым исследователи связали пакеты в одну группу:

  • Автоматическая генерация имён. Названия собираются интерполяцией повторяющихся терминов — в отчёте фигурируют «bigops» и «bnpl», примеры вроде bigops-api и длинных склеек типа dolyame-boxy-desktop-bnpl-card-gallery. OpenSourceMalware описывает это как «AI slop squatting» — массовый тайпсквоттинг со случайно сгенерированными именами вместо аккуратной подделки под один популярный пакет.
  • Версии из одного диапазона. Релизы кучкуются вокруг 35.x.y — нехарактерно высокие номера для пакетов без истории.
  • Размазывание по аккаунтам. Каждый аккаунт публикует небольшую партию пакетов, поэтому блокировка одного издателя не убивает операцию.

Механика запуска описана по-разному, и эта разница важна. Sonatype пишет, что код срабатывает «при установке или импорте» пакета. OpenSourceMalware уточняет: часть образцов обходится без классических lifecycle-хуков и требует, чтобы разработчик сам подключил пакет через require(). Практический вывод один: ставка только на --ignore-scripts вас не спасает — если зависимость реально импортируется в код, полезная нагрузка отработает.

Как доставляется вторая стадия

Загрузчик тянет payload по HTTPS со случайного хоста из зашитого списка — по данным The Hacker News, точками доставки служили три домена на Cloudflare Workers. Если прямая загрузка не удалась, включается резервный канал: полезная нагрузка собирается из DNS TXT-записей домена wel1.ru с платформенными поддоменами (sdk.dl, ext.dl, pkg.dl, net.dl). То есть исходящий фильтр по HTTP-домейнам обходится обычными DNS-запросами — а их в корпоративной сети режут единицы.

Дальше — по платформам:

  • Windows: патчатся ETW и AMSI (то есть глушится телеметрия и антивирусная проверка скриптов), закрепление через ключи автозапуска в реестре и задачи планировщика, файлы в AppData.
  • macOS: те же приёмы уклонения, закрепление через LaunchAgent. В macOS-нагрузке исследователи нашли домены российских финансовых сервисов (tcsbank.ru, cloudpayments.ru) — признак прицельного интереса к банковским сессиям русскоязычных пользователей.
  • Linux: упакованный UPX ELF-бинарь, разворачивающий агент фреймворка Sliver — это уже полноценный C2-канал, а не разовая кража.

Плюс стандартный набор: проверка на песочницу и отладчик, определение архитектуры, чтение переменных окружения, отсоединённые фоновые процессы (переживают закрытие терминала) и отражение нагрузки в память, чтобы не оставлять файл на диске.

Почему это бьёт именно по парсинг-командам

Инфостилер не различает «важное» и «неважное» — он забирает всё, что похоже на секрет. У обычного пользователя это пароли из браузера и криптокошелёк. У человека, который занимается сбором данных, набор трофеев другой и, честно говоря, вкуснее:

  • Переменные окружения и .env — здесь почти всегда лежит хост прокси-шлюза, логин, пароль и параметры сессии (страна, город, sticky-идентификатор). Эксфильтрация переменных окружения прямо указана в разборе кампании.
  • Cookie и сессионные токены. Украденная сессия — это обход MFA: cookie сам по себе является доказательством, что вторую проверку уже прошли. Логи с валидными токенами к рабочим сервисам продаются на теневых площадках от $5.
  • Профили антидетект-браузеров — связка «cookie + отпечаток + прокси», то есть готовый рабочий аккаунт, который не надо прогревать.
  • Токены CI/CD, npm и облака — доступ не только к вашей машине, но и к пайплайну, откуда можно отравить уже ваши сборки.

Масштаб явления перестал быть нишевым. SpyCloud в отчёте 2026 года насчитала 18,1 млн засвеченных API-ключей и токенов, полученных именно из malware-логов. По данным Recorded Future и Flashpoint, за 2025 год инфостилеры заразили 11,1 млн машин и дали 3,3 млрд украденных учётных записей. А в отчёте Sonatype о состоянии цепочки поставок ПО за 2026 год фигурируют более 454 600 новых вредоносных пакетов за один 2025 год и накопительно свыше 1,233 млн заблокированных — рост на 75% год к году. Flooding Dropper — не аномалия, а рядовой эпизод потока.

Что теряет владелец прокси-аккаунта

Отдельно проговорю то, что в security-разборах обычно не пишут, потому что авторы не работают с прокси. Утёкшие прокси-креды — это не «потеря пароля», а три проблемы сразу:

  1. Оплаченный трафик. Резидентный и мобильный трафик тарифицируется за гигабайты. Чужой парсер на ваших кредах — это ваш счёт, и заметить его можно сильно позже, чем хотелось бы.
  2. Чужая репутация на ваших IP. Атакующему нужен «чистый» жилой выход, чтобы его активность выглядела как обычный домашний пользователь. Ваши целевые площадки увидят подозрительное поведение в вашей же сессии — и прилетят баны по аккаунтам, которые вы годами прогревали.
  3. Разбирательство с провайдером. С точки зрения любого нормального провайдера трафик шёл с вашего аккаунта, и объясняться придётся вам.

Что делать: практический минимум

  1. Развести окружения. Скрапинг-стек ставится в контейнер или отдельную VM — не на ту машину, где лежат личные cookie, рабочая почта и продовые токены. Это единственная мера, которая работает даже против пакета, о котором ещё никто не знает.
  2. Убрать прокси-креды из .env рядом с кодом. Секреты — в менеджер секретов или в переменные окружения раннера, а не в файл в корне проекта, который читает любой импортированный модуль.
  3. Включить авторизацию по IP там, где она есть. Привязка доступа к вашему серверу обесценивает украденную пару логин/пароль: с чужого адреса она просто не сработает. Как это устроено и в каких сценариях подходит, разбирали в материале про whitelist IP-адресов для прокси. Общие правила хранения доступов — в гайде по безопасному хранению credentials прокси.
  4. Отдельные суб-креды под каждый проект и лимиты трафика. Если под каждый скрипт заведён свой доступ с потолком по гигабайтам, утечка одного не сливает весь баланс и локализуется за минуты.
  5. Мониторить расход. Резкий скачок потребления GB без роста задач — самый ранний и самый дешёвый детектор компрометации, который у вас есть.
  6. Дисциплина зависимостей. npm ci по lock-файлу вместо свободного install, карантин на новые версии (7–14 дней), проверка возраста пакета и истории издателя, внутреннее зеркало с allowlist. Пакет с версией 35.x.y, нулевой историей и именем из склеенных слов — повод остановиться, а не устанавливать.

Если подозреваете, что уже поймали

Рекомендации Sonatype здесь предельно конкретны и порядок в них принципиален: считать хост скомпрометированным целиком; искать описанные механизмы закрепления (ключи автозапуска и задачи планировщика в Windows, LaunchAgent в macOS); ротировать учётные данные — npm, GitHub, облако, CI/CD — после очистки машины, а не до, иначе новые секреты уедут тем же маршрутом; проверить lock-файлы, кеши зависимостей и внутренние зеркала на сохранившиеся копии; перед переустановкой сверить имена пакетов посимвольно.

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

Вывод

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

Практический вывод для тех, кто собирает данные, простой. Машина разработчика — это точка, где сходятся все ваши доступы разом: прокси, аккаунты, сессии, пайплайн. Изолируйте стек, привяжите доступы к IP, разнесите креды по проектам и смотрите на график расхода трафика. Ни один из этих шагов не требует ждать, пока очередную кампанию проиндексируют.