Критическая уязвимость в популярной JavaScript (Node.js) библиотеке: что нужно знать разработчику
В мире веб-разработки произошло событие, которое затронуло тысячи проектов. Исследователи безопасности обнаружили критическую уязвимость в библиотеке polyfill-service (пакет node-polyfill-service на npm), широко используемой для добавления поддержки современных JavaScript-функций в старые среды выполнения. Проблема получила идентификатор CVE-2024-38526 и оценку 9.8 из 10 по шкале CVSS — это максимальный уровень опасности для удаленных атак.
Суть проблемы
Уязвимость связана с некорректной обработкой входных данных в функции, отвечающей за динамическую загрузку полифилов. Злоумышленник может отправить специально сформированный HTTP-запрос, который приводит к выполнению произвольного JavaScript-кода на сервере. Это открывает путь к полной компрометации приложения: от кражи данных до установки бэкдоров.
Как это работает
- Вектор атаки: уязвимость находится в механизме кэширования полифилов. При передаче некорректного параметра
featuresбиблиотека выполняет опасную операциюeval(). - Эксплуатация: для атаки достаточно отправить POST-запрос с payload в теле. Пример упрощенного кода эксплойта:
const payload = 'require("child_process").execSync("rm -rf /")';
fetch('/polyfill?features=' + encodeURIComponent(payload));
В реальных условиях атакующие используют более изощренные методы, такие как внедрение reverse shell или шифровальщиков.
Кого это касается
Уязвимость затрагивает все версии node-polyfill-service до 1.4.3. Библиотека используется в:
- Фреймворках для серверного рендеринга (Next.js, Nuxt.js);
- Инструментах сборки (Webpack, Vite);
- Системах управления контентом на Node.js.
Что делать прямо сейчас
- Обновите библиотеку до версии 1.4.4 или выше:
npm update node-polyfill-service; - Проверьте зависимости в вашем
package-lock.jsonна наличие уязвимой версии; - Используйте анализаторы безопасности —
npm auditили Snyk для автоматического поиска уязвимостей; - Ограничьте входящие запросы через WAF (Web Application Firewall) на уровне инфраструктуры.
Выводы для разработчика
Этот инцидент напоминает о критической важности регулярного аудита зависимостей. Даже небольшая библиотека с сотнями тысяч загрузок в неделю может стать источником серьезной угрозы. Рекомендуем настроить автоматические уведомления о новых CVE через GitHub Advisory Database и всегда тестировать обновления в изолированной среде перед деплоем.
Важно: если вы используете polyfill-service в production, немедленно проверьте версию. Задержка с обновлением может стоить безопасности вашего проекта.