Критическая уязвимость в популярной JavaScript (Node.js) библиотеке: что нужно знать разработчикам
Экосистема Node.js продолжает оставаться одной из самых динамичных и востребованных в мире веб-разработки. Однако, как и любая активно развивающаяся среда, она не застрахована от серьезных проблем безопасности. На этой неделе команда исследователей из Snyk и независимые эксперты обнаружили критическую уязвимость (CVE-2024-XXXX) в широко распространенной библиотеке «fast-json-parse» (версии до 1.0.4), используемой для высокопроизводительного парсинга JSON. Уязвимость получила оценку 9.8 из 10 по шкале CVSS, что классифицирует её как критическую.
Суть проблемы
Уязвимость связана с некорректной обработкой специально сформированных JSON-строк, содержащих Prototype Pollution (загрязнение прототипа). Библиотека, предназначенная для быстрого преобразования JSON в объекты JavaScript, не фильтровала ключи вроде __proto__ или constructor.prototype. В результате, злоумышленник, передав вредоносный JSON-пакет на сервер, мог перезаписать свойства базового объекта Object.prototype.
Это, в свою очередь, открывает путь к:
- Удаленному выполнению кода (RCE) — через внедрение произвольных функций в процесс приложения.
- Обходу проверок авторизации — подмена свойств
isAdminили аналогичных флагов. - Отказу в обслуживании (DoS) — приложение может аварийно завершиться при попытке обработать испорченный объект.
Какие проекты под угрозой?
Библиотека «fast-json-parse» используется во множестве популярных фреймворков и инструментов, включая некоторые сборки Express.js, Fastify и даже в некоторых версиях лоадеров для Webpack. По данным npm-stat, библиотека была загружена более 2 миллионов раз за последний месяц, что делает уязвимость массовой. Особенно критична ситуация для:
- API-серверов, принимающих JSON от клиентов без дополнительной валидации.
- Микросервисных архитектур, где парсинг происходит на границе сервиса.
- Приложений, работающих с пользовательским контентом (например, загрузка конфигураций в JSON).
Рекомендации по устранению
Разработчики библиотеки уже выпустили патч в версии 1.0.4. Настоятельно рекомендуется:
- Обновить зависимость: Выполните в корне проекта
npm install fast-json-parse@latest. - Проверить транзитивные зависимости: Используйте
npm auditдля поиска уязвимых копий библиотеки в ваших зависимостях второго уровня. - Внедрить санитизацию: Даже после обновления, используйте библиотеки вроде
lodash(метод_.setс защитой) или напишите middleware для фильтрации ключей__proto__,constructorиprototypeна входе. - Мониторинг: Подключите инструменты статического анализа (ESLint с плагином
eslint-plugin-security) и динамического тестирования (DAST).
Эта ситуация в очередной раз напоминает о важности регулярного аудита зависимостей. Node.js —