Атака на ланцюг постачання npm: компрометація Qix, заражені пакети та наслідки для веб3

CyberSecureFox 🦊

В екосистемі JavaScript зафіксовано один із наймасштабніших інцидентів ланцюга постачання: після успішної фішингової кампанії проти мейнтейнера Josh Junon (Qix) зловмисники розмістили шкідливі версії в популярних npm‑пакетах, зокрема chalk і strip-ansi. Сукупно ці залежності забезпечують понад 2,6 млрд завантажень щотижня, що істотно розширює потенційний радіус ураження через транзитивні залежності.

Масштаб інциденту: компрометація акаунта мейнтейнера npm

8 вересня 2025 року Qix підтвердив злам своїх облікових записів після цільового фішингу. Листи надходили з домену support@npmjs[.]help, зареєстрованого 5 вересня 2025 року, який візуально імітував легітимний npmjs.com. У повідомленнях вимагали терміново «оновити 2FA», погрожуючи тимчасовим блокуванням після 10 вересня.

За даними BleepingComputer, форма входу на npmjs[.]help відправляла введені дані на сторонній ресурс на кшталт https://websocket-api2[.]publicvm[.]com/…, що відповідає типовій схемі викрадення паролів і токенів. Після інциденту мейнтейнер вибачився і повідомив про відновлювальні дії. Команда npm оперативно вилучила зловмисні релізи, опубліковані від імені скомпрометованого акаунта.

Компанія Socket оцінила вплив як системний: захоплення акаунта впливового мейнтейнера відкрило канал доставки заражених версій у безліч проєктів, які транзитивно залежать від цих пакетів. Транзитивність означає, що навіть якщо розробник прямо не підключає chalk, застосунок може успадкувати ризик через ланцюжок інших залежностей.

Технічні деталі: як працював шкідливий код у браузері

За оцінкою Aikido Security, до index.js було додано близько 280 рядків перехоплювальної логіки. Малвар запускається на стороні клієнта й орієнтована на користувачів, що взаємодіють із застосунками через браузер, особливо в сценаріях web3.

Шкідливий код перехоплює системні механізми JavaScript та web3‑інтерфейси: fetch, XMLHttpRequest, API гаманців (window.ethereum), а також інтеграції з Solana та іншими мережами. Під ризиком — транзакції Ethereum, Bitcoin, Solana, Tron, Litecoin, Bitcoin Cash: перед підписанням операції адреса одержувача замінюється на контрольовану зловмисниками. Через те, що підміна відбувається до підпису, UI-контроль може не виявити зміну.

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

Чому фінансові збитки виявилися обмеженими

Попри масштаб, Security Alliance (SEAL) і VXUnderground оцінюють фактичну «виручку» атакувальників у діапазоні від кількох центів до приблизно $50. Причина — помилка в реалізації: замість очікуваних адрес гаманців у низці випадків підставлялися реквізити Uniswap та інших swap‑контрактів, тож потенційно викрадені кошти губилися в маршрутизації.

Рекомендації з кібербезпеки та мінімізації ризиків

Для розробників та команд DevSecOps

— Негайно перевипустіть і повторно задеплойте фронтенди після вилучення скомпрометованих залежностей; фіксуйте версії, використовуйте lock‑файли та перевіряйте хеші артефактів.
— Увімкніть обов’язкову 2FA для npm/GitHub, застосовуйте токени з мінімально необхідними правами, SSO, регулярно відкликайте застарілі токени.
— Побудуйте контроль ланцюга постачання: SCA/Dependency Review, підписування артефактів (напр., Sigstore), політики схвалення релізів мейнтейнерів і моніторинг цілісності.
— Застосовуйте Content Security Policy (CSP) і Subresource Integrity (SRI) для зниження ризику виконання підмінного JavaScript.

Для користувачів і криптоінвесторів

— Використовуйте апаратні гаманці й звіряйте адресу одержувача на екрані пристрою перед підписом. За порадою CTO Ledger Шарля Гійеме, за відсутності «заліза» варто тимчасово утриматися від on‑chain‑транзакцій.
— Не переходьте за посиланнями з листів про «термінове оновлення 2FA»; входьте через закладки або вручну набрані URL.
— Оновіть уразливі застосунки й розширення, очистьте кеш/Service Workers, перевірте автозаповнення скриптів і встановлені плагіни браузера.

Інцидент підкреслює системні ризики залежностей із гігантською інсталяційною базою: компрометація одного мейнтейнера здатна каскадно вплинути на тисячі проєктів. Навіть за мінімальних безпосередніх збитків, репутаційні та операційні ризики значні. Командам варто вже зараз підвищити зрілість практик безпеки ланцюга постачання, зміцнити гігієну облікових записів і впровадити апаратну верифікацію транзакцій — це критичні кроки для стійкості екосистеми JavaScript і безпеки користувачів веб3.

Залишити коментар

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються дані ваших коментарів.