Эксперты по кибербезопасности предупреждают о критической уязвимости в популярной библиотеке "binary-parser", широко используемой в экосистеме Node.js. Уязвимость, получившая идентификатор CVE-2026-1245, позволяет злоумышленникам выполнять произвольный код JavaScript в контексте приложения. Центр реагирования на компьютерные инциденты CERT/CC опубликовал подробное описание проблемы в своей базе под номером VU#102648 20 января 2026 года.
Детали уязвимости
Библиотека "binary-parser" предназначена для упрощения разбора бинарных данных с помощью декларативного синтаксиса. Её применяют для работы с сетевыми протоколами, файловыми форматами и данными встроенных систем. Однако в версиях ранее 2.3.0 разработчики использовали механизм динамической генерации кода через конструктор "Function", что и создало предпосылку для уязвимости.
Суть проблемы заключается в небезопасной обработке пользовательского ввода при создании парсера. Если в приложении используются динамически формируемые схемы разбора, основанные на непроверенных данных, злоумышленник может внедрить свой вредоносный код. Например, передав специально сформированное значение в параметр "formatter" или в название поля, атакующий может выйти за пределы строкового контекста и выполнить произвольную команду. Этот код будет выполняться с привилегиями процесса Node.js, что открывает путь к полному компрометированию приложения.
Ключевыми векторами для внедрения кода являются названия полей, параметры кодировок (например, в функциях "utf8String" или "asciiString"), а также рекурсивные структуры парсера. Для эксплуатации уязвимости не требуется аутентификация, достаточно возможности передать непроверенные данные через любой источник, будь то HTTP-заголовки, метаданные файлов или поля базы данных. Статически заданные парсеры, не использующие динамические параметры, остаются безопасными.
Угроза особенно серьезна для серверных сред. Успешная атака может привести к получению оболочки (shell access) на целевом сервере, краже конфиденциальных данных или дальнейшему продвижению внутри инфраструктуры. Риски возрастают для приложений Node.js, развернутых в виде облачных функций, API или серверных частей для IoT-устройств. Хотя окончательная оценка по шкале CVSS еще не опубликована, CERT/CC классифицирует уязвимость как критическую из-за потенциала для удаленного выполнения кода.
Особенность данной уязвимости, напоминающей загрязнение прототипа (prototype pollution), заключается в отсутствии явных индикаторов компрометации. Она не оставляет характерных сетевых сигнатур или артефактов в файловой системе. Поэтому для обнаружения попыток эксплуатации необходимы поведенческие методы мониторинга. Следует отслеживать аномальное использование конструктора "Function" или появление неожиданных дочерних процессов в окружении Node.js. Инструменты вроде Falco или Sysdig можно настроить на генерацию оповещений при создании объектов "new Function()" с динамическими строками.
Для устранения уязвимости необходимо немедленно обновить библиотеку "binary-parser" до версии 2.3.0 или выше. Поддерживающий библиотеку разработчик Кейичи Такахаши принял исправления в рамках пул-реквеста #283 на GitHub. Основные изменения включают добавление санитизации (очистки) пользовательского ввода, экранирование специальных символов в строках, отклонение невалидных параметров кодировки и предупреждения об использовании устаревших динамических функций.
Разработчикам следует проверить свои проекты на наличие динамически создаваемых парсеров. Рекомендуется просканировать код на использование "new Parser({})" с переменными. В случаях, где динамика не требуется, стоит рассмотреть более безопасные альтернативы, такие как нативный модуль "buffer" или типизированные библиотеки для разбора структур, например "binary-parser-ts". Кроме того, важно соблюдать принцип наименьших привилегий и запускать процессы Node.js от имени непривилегированного пользователя, а не от root.
Уязвимость была обнаружена исследователем Маором Капланом, а техническую записку для CERT/CC подготовил Тимур Сноке. Актуальную информацию можно отслеживать по ссылкам на CERT VU#102648, CVE-2026-1245, странице пакета в npm и пул-реквесту #283 на GitHub. Этот инцидент в очередной раз подчеркивает риски, связанные с использованием декларативных библиотек, которые генерируют код во время исполнения. Разработчикам на Node.js стоит отдавать предпочтение типизированным решениям и внимательно проверять обработку любых внешних данных в логике приложения.
Ссылки
- https://www.cve.org/CVERecord?id=CVE-2026-1245
- https://github.com/keichi/binary-parser/pull/283
- https://github.com/keichi/binary-parser
- https://www.npmjs.com/package/binary-parser
- https://kb.cert.org/vuls/id/102648