Назад
SafeDep знайшла зашифрований завантажувач у npm-бібліотеці mathmain
SiTech AI Team2 წთ. საკითხავი

SafeDep знайшла зашифрований завантажувач у npm-бібліотеці mathmain

Дослідники SafeDep виявили в npm-пакеті mathmain завантажувач зашифрованого коду. Він бере пароль із даних, переданих розв'язувачу, і може записати й виконати файл.

Дослідники з компанії SafeDep виявили в npm-пакеті mathmain, який видає себе за бібліотеку математичних функцій, завантажувач зашифрованого коду. Пароль він бере з даних, переданих розв'язувачу матриць: за правильного входу він може розшифрувати файл і виконати код усередині нього. Аналіз опубліковано 17 вересня 2026 року; сам зашифрований код розшифрувати не вдалося.

Прихований виклик у розв'язувачі

Поштовхом стало те, що mathmain виглядав як перейменована й обфускована копія популярної бібліотеки mathjs. Єдиною зачіпкою був зайвий виклик наприкінці lusolve() у збірці CommonJS: обчисливши результат, розв'язувач передає дані нижньої трикутної матриці функції removeSolveValidation() і більше не використовує повернене значення.

Цей виклик веде до isGraph() у файлі lib/cjs/utils/is.js. isGraph() перетворює свій аргумент на JSON-рядок і використовує його як пароль, розшифровує з base64-блоку ім'я файлу й передає знайдений шлях разом із паролем допоміжній функції event(), результат якої потрапляє до require() у Node.

scrypt, AES-GCM і запис на диск

Процедури в lib/cjs/utils/event.js виводять 256-бітний ключ через scrypt і розшифровують дані алгоритмом AES-GCM; кожен блок містить 16 байтів солі, 12 байтів вектора ініціалізації, 16 байтів тега автентифікації та шифротекст у base64.

Допоміжна функція записує розшифровані байти на диск і повертає шлях, який потім завантажується, тож код виконується з правами самого процесу. Оскільки перед записом з імені знімається префікс enc_, вантаж без такого префікса перезаписує власний зашифрований файл. Три файли в lib/cjs/utils/ містять base64 замість JavaScript: graph.js (20 918 байтів шифротексту), fraction.js (9 084) і bignumber/type.js (1 179 416).

Ще два пакети й відсутній тригер

Пошук у реєстрі виявив mathsbase і math-universe: у п'яти версіях збігаються файли завантажувача, код тригера й зміни в розв'язувачі. [email protected] з'явився 27 серпня 2026 року, [email protected] — 17 вересня; npm тоді все ще віддавав старіший [email protected] без завантажувача.

У репозиторіях GitHub, які вказують обидва пакети, доданого виклику в переглянутих комітах немає, тож відкритий код не пояснює опублікованої збірки. Дослідники перевірили 16 922 ймовірні паролі проти зашифрованого імені файлу та ще 533 проти п'яти різних блоків — жоден не пройшов перевірку автентифікації. Робоча гіпотеза: пакети зберігають вантаж для майбутньої атаки, а тригер має надійти з окремого пакета; такого пакета поки не знайдено, і дослідники зазначають, що крадіжку даних, зв'язок із сервером чи збереження доступу до системи ще не доведено.

SSiTech

SiTech — веброзробка з підтримкою AI

Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.