Все версии vm2 ниже 3.10.2 уязвимы к атаке.
В библиотеке vm2 , которую часто используют как JavaScript-песочницу для запуска недоверенного кода в Node.js, нашли критическую уязвимость побега из sandbox. Проблема получила идентификатор CVE-2026-22709 и оценку 9.8 по CVSS, а успешная эксплуатация позволяет выполнить произвольный код уже на хост-системе, то есть фактически превращает песочницу в «открытую дверь».
Суть бага связана с обработкой Promise: в vm2 есть механизм «очистки» колбэков для <code>Promise.prototype.then</code> и <code>Promise.prototype.catch</code>, но он применялся не везде. В <code>lib/setup-sandbox.js</code> санитизация затрагивала <code>localPromise.prototype.then</code>, однако для <code>globalPromise.prototype.then</code> ее можно было обойти. Так как <code>async</code>-функции возвращают именно <code>globalPromise</code>, атакующий получал путь к выходу из изоляции и исполнению команд на машине, где запущен vm2.
По данным GitHub Security Advisory, уязвимы версии vm2 до 3.10.2 включительно по линии 3.10.0, а исправление выпущено в 3.10.2. При этом в сторонних заметках встречается более широкий диапазон «затронутых» версий, поэтому безопасная практическая граница простая: все релизы ниже 3.10.2 стоит считать рискованными и обновлять.
Рекомендация для команд, у которых vm2 стоит напрямую или как транзитивная зависимость: обновиться минимум до 3.10.2 (а лучше до 3.10.3 , где добавили дополнительные фиксы, связанные с обходами через символы и Promise), затем перепроверить дерево зависимостей (например, через <code>npm list vm2</code>) и пересмотреть места, где вообще требуется исполнение чужого JavaScript в одном процессе. Некоторые аналитики отдельно напоминают, что даже после патча стоит оценить альтернативы вроде более жесткой изоляции на уровне процесса или контейнера, если модель угроз это предполагает.
В библиотеке vm2 , которую часто используют как JavaScript-песочницу для запуска недоверенного кода в Node.js, нашли критическую уязвимость побега из sandbox. Проблема получила идентификатор CVE-2026-22709 и оценку 9.8 по CVSS, а успешная эксплуатация позволяет выполнить произвольный код уже на хост-системе, то есть фактически превращает песочницу в «открытую дверь».
Суть бага связана с обработкой Promise: в vm2 есть механизм «очистки» колбэков для <code>Promise.prototype.then</code> и <code>Promise.prototype.catch</code>, но он применялся не везде. В <code>lib/setup-sandbox.js</code> санитизация затрагивала <code>localPromise.prototype.then</code>, однако для <code>globalPromise.prototype.then</code> ее можно было обойти. Так как <code>async</code>-функции возвращают именно <code>globalPromise</code>, атакующий получал путь к выходу из изоляции и исполнению команд на машине, где запущен vm2.
По данным GitHub Security Advisory, уязвимы версии vm2 до 3.10.2 включительно по линии 3.10.0, а исправление выпущено в 3.10.2. При этом в сторонних заметках встречается более широкий диапазон «затронутых» версий, поэтому безопасная практическая граница простая: все релизы ниже 3.10.2 стоит считать рискованными и обновлять.
Рекомендация для команд, у которых vm2 стоит напрямую или как транзитивная зависимость: обновиться минимум до 3.10.2 (а лучше до 3.10.3 , где добавили дополнительные фиксы, связанные с обходами через символы и Promise), затем перепроверить дерево зависимостей (например, через <code>npm list vm2</code>) и пересмотреть места, где вообще требуется исполнение чужого JavaScript в одном процессе. Некоторые аналитики отдельно напоминают, что даже после патча стоит оценить альтернативы вроде более жесткой изоляции на уровне процесса или контейнера, если модель угроз это предполагает.
- Источник новости
- www.securitylab.ru