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-разборах обычно не пишут, потому что авторы не работают с прокси. Утёкшие прокси-креды — это не «потеря пароля», а три проблемы сразу:
- Оплаченный трафик. Резидентный и мобильный трафик тарифицируется за гигабайты. Чужой парсер на ваших кредах — это ваш счёт, и заметить его можно сильно позже, чем хотелось бы.
- Чужая репутация на ваших IP. Атакующему нужен «чистый» жилой выход, чтобы его активность выглядела как обычный домашний пользователь. Ваши целевые площадки увидят подозрительное поведение в вашей же сессии — и прилетят баны по аккаунтам, которые вы годами прогревали.
- Разбирательство с провайдером. С точки зрения любого нормального провайдера трафик шёл с вашего аккаунта, и объясняться придётся вам.
Что делать: практический минимум
- Развести окружения. Скрапинг-стек ставится в контейнер или отдельную VM — не на ту машину, где лежат личные cookie, рабочая почта и продовые токены. Это единственная мера, которая работает даже против пакета, о котором ещё никто не знает.
- Убрать прокси-креды из
.envрядом с кодом. Секреты — в менеджер секретов или в переменные окружения раннера, а не в файл в корне проекта, который читает любой импортированный модуль. - Включить авторизацию по IP там, где она есть. Привязка доступа к вашему серверу обесценивает украденную пару логин/пароль: с чужого адреса она просто не сработает. Как это устроено и в каких сценариях подходит, разбирали в материале про whitelist IP-адресов для прокси. Общие правила хранения доступов — в гайде по безопасному хранению credentials прокси.
- Отдельные суб-креды под каждый проект и лимиты трафика. Если под каждый скрипт заведён свой доступ с потолком по гигабайтам, утечка одного не сливает весь баланс и локализуется за минуты.
- Мониторить расход. Резкий скачок потребления GB без роста задач — самый ранний и самый дешёвый детектор компрометации, который у вас есть.
- Дисциплина зависимостей.
npm ciпо lock-файлу вместо свободногоinstall, карантин на новые версии (7–14 дней), проверка возраста пакета и истории издателя, внутреннее зеркало с allowlist. Пакет с версией 35.x.y, нулевой историей и именем из склеенных слов — повод остановиться, а не устанавливать.
Если подозреваете, что уже поймали
Рекомендации Sonatype здесь предельно конкретны и порядок в них принципиален: считать хост скомпрометированным целиком; искать описанные механизмы закрепления (ключи автозапуска и задачи планировщика в Windows, LaunchAgent в macOS); ротировать учётные данные — npm, GitHub, облако, CI/CD — после очистки машины, а не до, иначе новые секреты уедут тем же маршрутом; проверить lock-файлы, кеши зависимостей и внутренние зеркала на сохранившиеся копии; перед переустановкой сверить имена пакетов посимвольно.
К этому списку добавьте своё: смена паролей прокси-доступов, отзыв активных сессий в антидетект-браузере и проверка истории потребления трафика за последние две недели. Если трафик покупается за гигабайты — резидентные или мобильные прокси, — отчёт по расходу и есть ваш журнал доступа.
Вывод
Flooding Dropper интересен не изощрённостью, а экономикой: тысяча одноразовых пакетов, сгенерированные имена, аккаунты пачками — это конвейер, рассчитанный на то, что кто-то поставит зависимость не глядя. Отдельные кампании будут вычищать из реестра неделями, но поток не остановится: цифры Sonatype за прошлый год не оставляют иллюзий.
Практический вывод для тех, кто собирает данные, простой. Машина разработчика — это точка, где сходятся все ваши доступы разом: прокси, аккаунты, сессии, пайплайн. Изолируйте стек, привяжите доступы к IP, разнесите креды по проектам и смотрите на график расхода трафика. Ни один из этих шагов не требует ждать, пока очередную кампанию проиндексируют.
