Дослідники компанії Socket повідомили про виявлення в екосистемі npm шкідливого пакета fezbox, який застосовує нетипову техніку доставки: обфускований JavaScript приховується в QR‑зображенні, що завантажується зі стороннього сервера. Пакет встигли завантажити щонайменше 327 разів до його видалення, що знову підкреслює вразливість ланцюгів постачання відкритого ПЗ.
Шкідливий пакет npm fezbox: що сталося
За даними Socket, шкідлива логіка fezbox ініціює отримання JPG‑файла з QR‑кодом, з якого витягується обфускований код другої стадії. Як уточнює BleepingComputer, основна активність зосереджена у файлі dist/fezbox.cjs (зокрема у версії 1.3.0). Файл мінімізований, однак після форматування його поведінка стає прозорішою для аналізу.
Двоетапна доставка через QR‑зображення: технічний розбір
Етап 1: завантаження «щільного» QR
Пакет отримує незвично «щільну» QR‑картинку. Такий код складно зчитати камерою смартфона — він призначений для машинного парсингу самим пакетом і містить приховані інструкції.
Етап 2: затримка, перевірки та виконання
Перед розшифруванням відбувається перевірка середовища (ознаки відладчика, віртуалізації) та затримка 120 секунд для уникнення динамічного аналізу. Після цього зображення парситься, а видобутий код виконується в браузері. Ціль — крадіжка cookie через document.cookie і спроба отримати поля «ім’я користувача» та «пароль».
Маскування і ухилення від детекції
Реверс‑рядків і приховані URL
URL‑адреси для завантаження даних зберігаються у зворотному порядку, що ускладнює статичний аналіз за шаблонами на кшталт http(s)://. Аналогічно застосовується реверс чутливих рядків: наприклад, «drowssap» відтворюється як «password». Такий підхід, у поєднанні з маскуванням трафіку під запит до «звичайної картинки», знижує ймовірність спрацювання базових фільтрів і проксі.
Крадіжка cookie і ексфільтрація даних
Обфускована корисна нагрузка збирає cookie та, якщо знаходить значення облікових полів, надсилає їх POST‑запитом на https://my-nest-app-production.up.railway.app/users. Якщо даних немає, виконання тихо завершується — це зменшує «шум» і ускладнює виявлення.
Хто у зоні ризику і чому метод працює
У групі ризику команди, що збирають фронтенд із широким пулом залежностей і не обмежують виконання сторонніх скриптів під час інсталяції або у рантаймі браузера. Маскування шкідливого коду в медіафайлах виглядає для мережевих систем як типове завантаження ресурсу, тому аномалія часто лишається непоміченою. Схильність реєстрів OSS до атак на ланцюг постачання підтверджується публічними інцидентами (наприклад, event‑stream, UAParser.js, coa), а профільні звіти постачальників SCA‑рішень фіксують стабільне зростання кількості шкідливих пакунків у відкритих реєстрах.
Практичні рекомендації для команд розробки
Мінімізуйте довіру до залежностей. Фіксуйте версії у lock‑файлах, використовуйте перевірені дзеркала та SCA‑інструменти, увімкніть аудит postinstall‑скриптів і автоматичну блокаду невідомих сценаріїв. Розгляньте збірку у режимах з обмеженням виконання скриптів з node_modules.
Зміцнюйте захист cookie. Встановлюйте атрибути HttpOnly, Secure, SameSite. Позначка HttpOnly унеможливлює доступ до cookie з JavaScript навіть за умов XSS‑подібних сценarіїв, що нейтралізує головну ціль fezbox.
Спостерігайте за аномаліями трафіку. Моніторте неочікувані запити до JPG‑файлів із подальшим виконанням динамічного коду або POST‑активністю на невідомі домени (зокрема на домени платформи Railway). Логуйте та корелюйте ці події з процесами збірки й розгортання.
Укріплюйте CI/CD. Ізолюйте конвеєри, застосовуйте політику deny‑by‑default для вихідних з’єднань, обмежуйте доступ до мережі під час інсталяції залежностей, впровадьте обов’язкове журналювання DNS/HTTP і блокування підозрілих ендпойнтів.
Інцидент із fezbox демонструє еволюцію технік зловмисників: перенесення корисного навантаження у QR‑картинку ускладнює статичний аналіз і маскує мережеву активність. Якщо ваш проєкт міг використовувати цей пакет, перевірте журнали запитів до Railway.app, проведіть ревізію залежностей та переконайтеся, що сесійні cookie позначено атрибутом HttpOnly. Впроваджуйте SCA‑контроль, обмежуйте виконання сторонніх скриптів і підтримуйте гігієну ланцюга постачання — це суттєво зменшить площу атаки.