NUL1DROPPER у npm запускається під час імпорту пакета

NUL1DROPPER запускається під час імпорту отруєного npm-пакета, а не через install-скрипти. Перевірте артефакти та безпечний порядок відновлення.

NUL1DROPPER перетворює імпорт npm-пакета на запуск кросплатформного завантажувача.

NUL1DROPPER — це кросплатформний завантажувач, прихований у сотнях шкідливих npm-пакетів, опублікованих на початку серпня 2026 року. Головна деталь для перевірки: сама наявність пакета серед залежностей ще не доводить запуск нативного payload. У підтвердженому прикладі виконання починається, коли код застосунку, тесту, збірки або production-середовища імпортує модуль.

Саме тому npm install --ignore-scripts не є повним захистом від цієї кампанії. Проаналізований пакет не має хуків preinstall або postinstall: код ініціалізації запускається через звичайний require(). Розробникам і CI-командам потрібно перевірити не лише записи про залежність, а й фактичні імпорти.

Як зрозуміти, чи торкнувся вас NUL1DROPPER

Що знайденоЩо це означає і що робити
Назва пакета є лише в пошуку, advisory або невикористаному кешіОзнак виконання немає. Заблокуйте пакет, з’ясуйте, як він потрапив у процес, і продовжуйте моніторинг.
Пакет є в package.json чи lockfile, але його не імпортує код, тест або збіркаЗалежність була присутня, але запуск нативного payload не підтверджено. Видаліть її, збережіть lockfile та журнали й перевірте транзитивні шляхи.
Код застосунку, тесту, збірки або production імпортував пакетВважайте хост або CI runner потенційно скомпрометованим. Ізолюйте його, збережіть процесні й мережеві докази та визначте доступні секрети.
Є скинуті файли, відповідне дерево процесів, DNS-активність або persistenceОзнаки виконання сильні. Перебудуйте уражені системи з довіреного джерела та змініть доступні облікові дані з чистого пристрою.

OpenSourceMalware підтвердила checkout-mobile-bnpl версії 35.6.9 як один приклад. Це не повний список пакетів кампанії. Порівнюйте назви й версії з актуальним списком дослідників, а не вважайте шкідливим кожен схожий модуль.

NUL1DROPPER, WEL1DROPPER і Flooding Dropper

Первинний технічний аналіз називає JavaScript-завантажувач NUL1DROPPER. У частині вторинних публікацій зустрічаються назви WEL1DROPPER, утворена від fallback-домену, та Flooding Dropper. Тут використовується NUL1DROPPER — назва з первинного звіту, а альтернативні назви наведено для кореляції сповіщень і пошуку.

Припущення про російське походження оператора ґрунтується на непрямих ознаках, а не на доведеній атрибуції. Тому його не слід подавати як встановлений факт.

Як npm-пакет перетворюється на завантажувач

  1. Розробник додає або успадковує шкідливу залежність. Кампанія використовувала випадково згенеровані назви та назви, схожі на правдоподібні AI-рекомендації.
  2. Код імпортує модуль. У підтвердженому зразку index.js завантажує helper, який одразу запускає downloader. Install-скрипта, який можна було б заблокувати, немає.
  3. Завантажувач визначає платформу. Він обирає шлях для Windows, Linux або macOS і намагається отримати нативний payload з інфраструктури зловмисника.
  4. Fallback через DNS TXT може відновити payload. Якщо основні вебвузли недоступні, код може отримати закодовані частини з TXT-записів під wel1[.]ru. Ми навмисно не публікуємо адреси payload і процедуру відновлення.
  5. Нативний етап працює окремо. JavaScript у npm-пакеті є downloader. Викрадення облікових даних, persistence, віддалений доступ та інші пізніші можливості належать окремо проаналізованим платформним payload, а не першому етапу як такому.

Цей механізм відрізняється від недавнього npm-хробака Keyv/ChainDrop, який поширювався через зламані акаунти мейнтейнерів. Практичний ризик NUL1DROPPER — виконання під час імпорту одного з численних оманливих пакетів.

Які артефакти перевірити

Платформа або джерело доказівСпостережена ознака
Залежності та історія кодуНазви з актуального списку кампанії; недавні зміни package.json чи lockfile; прямі або транзитивні імпорти в коді, тестах, build-скриптах, serverless bundles або production.
WindowsФайл за шаблоном %TEMP%\dotnet_diag_{8 hex characters}.exe, відокремлений запуск через cmd.exe та marker analytics_state у тимчасовому каталозі.
LinuxПрихований виконуваний файл /var/tmp/.cache_{8 hex characters}, запуск через /bin/sh і файл /tmp/.analytics_state.
macOSТа сама логіка першого етапу, а в проаналізованому нативному payload — файли під ~/.local/share/runtime та LaunchAgent com.apple.windowserver.helper.plist.
Мережа та DNSЛанцюжок від процесу Node.js до незнайомих Workers-вузлів або TXT-запити під wel1[.]ru. Домен є індикатором для розслідування, а не інструкцією для отримання payload.
Часовий markeranalytics_state містить timestamp, який пригнічує повторний запуск приблизно на шість годин. Відсутність файла не доводить чистоту системи.

Як перевірити робочу станцію та CI

  1. Збережіть поточний стан. Збережіть lockfile, дерево залежностей, build-логи, метадані CI job, ідентифікатор контейнера або VM, DNS/proxy-історію та дерево процесів до очищення.
  2. Шукайте пряме й транзитивне використання. Шкідливий пакет міг з’явитися через згенерований код, test helper, скопійований фрагмент або іншу залежність. Знайдіть назву модуля у вихідному коді та generated bundles.
  3. Визначте, чи відбувся імпорт. Запис про install і завантаження модуля процесом Node.js — різні рівні інциденту. Перевірте тести, збірки, serverless, desktop-app і production startup.
  4. Зіставте хостові й мережеві докази. Поєднайте дерево Node.js із тимчасовими файлами, запуском shell або cmd.exe, незнайомими outbound-запитами й DNS TXT. Одна окрема ознака може бути хибною; пов’язаний ланцюжок значно надійніший.
  5. Оцініть доступні секрети. Складіть список repository, npm, CI/CD, cloud, SSH, signing, registry, browser session, wallet і deployment credentials, доступних процесу або runner.

Якщо причиною стала довіра до згенерованої назви пакета, матеріал про TrapDoor та отруєння AI-конфігів показує інший спосіб спрямувати інструменти розробника до залежностей зловмисника. Не змішуйте їхні індикатори лише через спільну тему AI supply chain.

Якщо пакет імпортували: локалізація та відновлення

  1. Ізолюйте робочу станцію або runner. Не використовуйте підозрілий хост для зміни секретів або підпису нових релізів.
  2. Відкличте активні сесії, якщо доступ ще може тривати. Потім змініть repository, npm, cloud, CI/CD, SSH, signing, deployment, browser і wallet credentials з гарантовано чистого пристрою.
  3. Знецініть уражені збірки й артефакти. Визначте releases, containers, caches і packages, створені після першого підозрілого імпорту, та перебудуйте їх із перевіреного коду.
  4. Перебудуйте підтверджено скомпрометовані системи. Видалення npm-пакета не прибирає нативний payload, який уже запускався. Для ноутбуків розробників і reusable CI workers чиста перебудова надійніша за просте видалення.
  5. Перевірте downstream-активність. Перегляньте входи, публікації пакетів, зміни репозиторіїв, cloud-дії, нові ключі, deployments і persistence у системах, доступних через викрадені секрети.

Після збереження доказів повне сканування ізольованої Windows-системи за допомогою Gridinsoft Anti-Malware може допомогти знайти скинуті файли, підозрілі елементи автозапуску, заплановані завдання, служби та persistence. Чистий результат сканування не повертає викрадені облікові дані й не доводить відсутність компрометації акаунтів.

Під час ротації врахуйте, що саме зміна ключа не завершує інцидент: матеріал про викрадення API-ключів ШІ пояснює, чому потрібні також відкликання сесій, ліміти та перевірка використання.

FAQ

Чи доводить пакет у lockfile, що NUL1DROPPER запустився?

Ні. Це доводить наявність залежності. Задокументований тригер відбувається під час імпорту модуля, тому перевірте код, build/test execution, дерево процесів, мережу та скинуті артефакти.

Чи блокує кампанію --ignore-scripts?

Параметр блокує npm lifecycle scripts, але підтверджений приклад NUL1DROPPER виконується через звичайну ініціалізацію модуля під час require(). Тому аналіз імпортів залишається обов’язковим.

Чи достатньо видалити npm-пакет?

Лише якщо ви встановили, що модуль не імпортували й нативний payload не запускався. За наявності ознак виконання систему слід ізолювати й перебудувати, артефакти — перевипустити, а доступні акаунти й секрети — відновити з чистого пристрою.

Джерела

  1. Paul McCarty (6mile). “Russian AI Slopsquatting Publishes 700+ Malicious NPM Packages.” OpenSourceMalware, опубліковано 6 серпня 2026 року; дата доступу: 8 серпня 2026 року. Первинний технічний звіт.
  2. OpenSourceMalware. “WEL1DROPPER Package List.” GitHub, актуальний список кампанії; дата доступу: 8 серпня 2026 року. Список пакетів.

Пишу про те, як зробити життя онлайн комфортним і безпечним. Вірю, що сучасний цифровий світ вартий того, щоб бути його частиною.