HeadlinesBriefing favicon HeadlinesBriefing.com

Зашифрованный загрузчик в библиотеке NPM

Hacker News •
×

Мы обнаружили имплант удаленного доступа, скрытый внутри mathmain, npm-пакета, копирующего популярную библиотеку mathjs. Вредоносный код поставляется зашифрованным. Он остается неактивным до тех пор, пока программа не решит特定 уравнение с помощью библиотеки. Это уравнение является ключом. Когда ключ совпадает, пакет расшифровывает полезную нагрузку и запускает ее. Полезная нагрузка получает команды от злоумышленника и выполняет их на хосте. Она использует публичный чат-сервис и блокчейн-сеть для своего командного канала.

Мы начали с анализа Safe Dep пакета mathmain 17 сентября 2026 года. Пакет выглядел как копия mathjs с другим именем и обфусцированным кодом. Один добавленный вызов в решателе привел нас к загрузчику. Ближе к концу lusolve() мы обнаружили дополнительный вызов в сборке Common JS. Решатель уже вычислил свой результат. Затем он передал данные из нижней треугольной матрицы для вызова remove Solve Validation().

Мы проследили remove Solve Validation() до is Graph(x) в lib/cjs/utils/is.js. Добавленная функция is Graph() расшифровывает и загружает код. Она преобразует свой ввод в строку JSON и использует эту строку в качестве пароля. Сначала она расшифровывает имя файла. Затем она передает путь к файлу и пароль в event() и загружает возвращенный путь с помощью require().

Данные матрицы становятся паролем. В lib/cjs/utils/event.js мы нашли функции расшифровки. Они используют scrypt для преобразования пароля в ключ длиной 256 бит. Затем они расшифровывают данные с помощью AES-GCM. Загрузчик записывает и запускает файл. Вспомогательная функция event() расшифровывает файл, записывает результат на диск и возвращает выходной путь.

Ключевые сущности: Компании: mathjs, Safe Dep

Часто задаваемые вопросы: Как вредоносный npm-пакет mathmain расшифровывает свою полезную нагрузку?

Пакет использует特定 уравнение, решаемое библиотекой mathjs, в качестве ключа. Когда уравнение решено, полученные данные матрицы преобразуются в строку JSON и используются в качестве пароля для расшифровки полезной нагрузки через scrypt и AES-GCM.

Вопрос