11 липня 2026 року п’ять версій офіційного npm-пакета jscrambler вийшли з кросплатформним інфостілером. SafeDep відносить до шкідливих версії 8.14.0, 8.16.0, 8.17.0, 8.18.0 і 8.20.0. Поточна чиста гілка — 8.22.0, але оновлення не скасовує крадіжку облікових даних, якщо уражена версія вже запускалася [1] [2].
Ключова відмінність — спосіб запуску. Перші три шкідливі релізи використовували npm lifecycle hook preinstall. У версіях 8.18.0 і 8.20.0 той самий dropper перенесли у звичайний код пакета, тому імпорт модуля або запуск CLI міг активувати його навіть за вимкнених install scripts [2].
Які версії Jscrambler уражені?
| Версія | Статус | Тригер |
|---|---|---|
8.14.0 | Шкідлива | preinstall hook |
8.15.0 | Чиста за аналізом | Dropper не знайдено |
8.16.0 | Шкідлива | preinstall hook |
8.17.0 | Шкідлива | preinstall hook |
8.18.0 | Шкідлива | Звичайний runtime-код |
8.20.0 | Шкідлива | Звичайний runtime-код |
8.22.0+ | Поточна безпечна гілка | Оновіть і звірте advisory |
У власному advisory Jscrambler зараз перелічує 8.14, 8.16, 8.17 і 8.20 як уражені, а 8.22+ — як безпечні [1]. SafeDep також класифікує 8.18.0 як шкідливу, оскільки dropper перенесли у runtime path [2]. Розслідування виробника триває, тому варто стежити за оновленнями advisory.
Як npm-пакет запускав інфостілер
StepSecurity встановила, що розмір пакета зріс приблизно з 38 КБ до 7,9 МБ. Файл dist/intro.js не був звичайним JavaScript: це контейнер із виконуваними файлами для Linux, Windows і macOS. Loader вибирав payload для поточної ОС, розпаковував його у випадково названий прихований файл у системній temp-директорії та запускав як відокремлений процес [3].
Статичний аналіз вказує на крадіжку даних профілів Chrome, Edge, Brave, Chromium і Firefox, даних розширення Bitwarden, Steam sessions та матеріалів криптогаманців. Windows-версія може створювати приховане завдання Task Scheduler, а macOS-версія — LaunchAgent. Дослідники також бачили прямі з’єднання з IP-адресами атакувальника та Tor infrastructure [2] [3].
Як перевірити workstation або CI runner
- Перегляньте lockfiles і build records. Шукайте всі п’ять версій у
package-lock.json,npm-shrinkwrap.json,yarn.lock,pnpm-lock.yaml, container build logs, CI logs і локальній npm history. - Розділіть install і runtime exposure. Для
8.14.0,8.16.0або8.17.0достатньо встановлення на клієнті, який виконував lifecycle scripts. Для8.18.0та8.20.0перевірте також імпорт пакета або запуск CLI. - Знайдіть payload container. Підозрілий
node_modules/jscrambler/dist/intro.jsрозміром близько 7 837 238 байтів є сильним індикатором. У temp-директоріях шукайте випадково названі приховані executables, створені в той самий час. - Перевірте persistence та egress. У Windows перегляньте Task Scheduler, у macOS —
~/Library/LaunchAgents. Шукайте37.27.122[.]124,57.128.246[.]79,check.torproject[.]orgіarchive.torproject[.]orgу мережевих логах.
Що робити після запуску шкідливої версії
- Ізолюйте workstation або runner і збережіть install, process та network timeline.
- Перейдіть на
8.22.0або новішу версію, приберіть уражену залежність із lockfiles та очистьте package-manager і build caches. - З чистого пристрою відкличте browser sessions і замініть GitHub, npm, cloud, signing, SSH, AI-tool, MCP та CI secrets, доступні процесу.
- Перемістіть криптовалюту з гаманців, якими користувалися на ураженому хості, у новий гаманець, створений на чистому пристрої.
- Перебудуйте CI runner із довіреного образу. На workstation приберіть persistence після збору доказів і виконайте повне сканування.
Видалення node_modules не прибирає відокремлений payload або завдання Task Scheduler. На ураженому Windows-комп’ютері після dependency cleanup скористайтеся Gridinsoft Anti-Malware, щоб перевірити dropped executable, persistence та інші залишки malware. Сканування не повертає викрадені credentials, тому ротація токенів і сесій залишається обов’язковою.
Індикатори, які варто зберегти
dist/intro.jsSHA-256:a41a523ef9517aab37ed6eea0ec881821bdcb7aefcb5c5f603adc7907f868c86- Windows payload SHA-256:
b7ca95d1b23c8e67416a25cedf741de0917c2096bbc9d24649eea7853d054903 - Linux payload SHA-256:
fbbcf4d8f98168f78f5c0c47a9ae56d59ec8ac84a7c9ca6b797fedfb8d62d2bd - macOS payload SHA-256:
c8fd47d36bdf7c825378593ab82ed8c24d1dc52e26b507812393e24e1d5201fd
Цей інцидент вужчий за мультиекосистемну кампанію TrapDoor проти npm, PyPI і Crates.io, але порядок реагування схожий: перевірка lockfile — лише перший крок. Хвиля Shai-Hulud проти AntV npm також показує, чому CI secrets та developer workstations потребують host-level triage.
Джерела
- Jscrambler. “Security Advisory: Unauthorized Publication of a Malicious npm Package affecting the product Code Integrity.” Jscrambler, 11 липня 2026 року, дата доступу 11 липня 2026 року. https://jscrambler.com/blog/security-advisory-malicious-npm-package
- SafeDep Team. “Official jscrambler npm Package Compromised Across Multiple Releases.” SafeDep, 11 липня 2026 року, дата доступу 11 липня 2026 року. https://safedep.io/jscrambler-npm-supply-chain-compromise/
- Rohan Prabhu. “jscrambler npm package publishes malicious preinstall binary.” StepSecurity, 11 липня 2026 року, дата доступу 11 липня 2026 року. https://www.stepsecurity.io/blog/jscrambler-npm-package-publishes-malicious-preinstall-binary
