Критическая уязвимость в Happy DOM позволяет злоумышленникам обходить песочницу и выполнять произвольный код

vulnerability

В популярной библиотеке Happy DOM, используемой для серверного рендеринга и тестирования веб-приложений, обнаружена критическая уязвимость, позволяющая злонамеренному JavaScript-коду выходить за пределы предназначенной песочницы. Проблема, получившая идентификатор CVE-2025-61927, затрагивает все версии до 20 включительно и оценивается максимальным баллом 10.0 по шкале CVSS v4.

Детали уязвимости

Уязвимость связана с неправильной изоляцией контекста Node.js VM, который изначально разрабатывался для создания безопасной среды выполнения непроверенного кода. Исследователь безопасности Mas0nShi обнаружил, что злоумышленники могут использовать цепочку наследования конструкторов от класса Function для получения доступа к функциональности на уровне процесса.

Атака основана на последовательном подъеме по цепочке конструкторов до достижения глобального конструктора Function, который затем может выполнять строки кода на уровне процесса, а не в изолированном контексте VM. Этот механизм обхода работает по-разному в зависимости от того, использует ли целевая система CommonJS или модули ECMAScript, при этом среды CommonJS оказываются особенно уязвимыми, поскольку злоумышленники могут получить доступ к функции require() для импорта дополнительных модулей.

По оценкам экспертов, уязвимость затрагивает приблизительно 2.7 миллиона пользователей, которые полагаются на Happy DOM в серверных приложениях рендеринга и тестовых фреймворках. Наибольшему риску подвержены приложения, обрабатывающие контролируемый пользователем HTML-контент через Happy DOM, особенно в сценариях серверного рендеринга, где непроверенное содержимое динамически отображается.

Уязвимость также представляет значительные риски для тестовых сред, выполняющих непроверенный JavaScript-код в контекстах Happy DOM. Успешная эксплуатация позволяет злоумышленникам осуществлять извлечение данных через доступ к переменным окружения и конфигурационным файлам, достигать перемещения в сети через сетевое соединение, выполнять произвольные команды через дочерние процессы и устанавливать постоянное присутствие через доступ к файловой системе.

Разработчик Happy DOM, Ortner IT Solutions AB, выпустил версию 20 для устранения проблемы безопасности, реализовав оценку JavaScript, отключенную по умолчанию, и добавив предупреждения безопасности для потенциально небезопасных конфигураций. Организациям, использующим затронутые версии, рекомендуется немедленно обновиться до Happy DOM v20 или более поздней версии для устранения уязвимости.

Для сред, требующих оценки JavaScript, администраторы должны реализовать флаг Node.js "-disallow-code-generation-from-strings" для предотвращения оценки кода на уровне процесса. Пользователи, которые не могут немедленно обновиться, должны отключить оценку JavaScript в Happy DOM, если только выполняемое содержимое не является полностью доверенным.

Исправленная версия включает улучшенные меры безопасности и предупреждает пользователей о потенциальных рисках, когда оценка JavaScript включена в небезопасных средах, обеспечивая лучшую защиту от подобных атак обхода виртуальной машины. Своевременное обновление имеет решающее значение для предотвращения потенциальных инцидентов безопасности, поскольку уязвимость позволяет злоумышленникам полностью обойти механизмы изоляции, предназначенные для сдерживания непроверенного кода.

Эксперты по безопасности подчеркивают важность регулярного аудита зависимостей в проектах разработки и немедленного применения исправлений для критических уязвимостей, особенно когда речь идет о компонентах, обрабатывающих непроверенный пользовательский ввод. Инцидент с Happy DOM служит напоминанием о том, что даже хорошо зарекомендовавшие себя инструменты изоляции кода могут содержать тонкие уязвимости, позволяющие обходить механизмы безопасности.

Ссылки

Комментарии: 0