<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[CVE-2026-22709: критическая уязвимость vm2 для выполнения кода на хосте]]></title><description><![CDATA[<p dir="auto"><img src="/assets/uploads/files/dd/78/f0/1773405898647-generated_1773405862941-resized.webp" alt="Обложка: CVE-2026-22709: критическая уязвимость vm2 позволяет выполнить код на хост-системе" class=" img-fluid img-markdown" /></p>
<p dir="auto">Критическая уязвимость <strong>CVE-2026-22709</strong> в библиотеке vm2 позволяет злоумышленникам обходить песочницу и выполнять произвольный код на хост-системе. Это затрагивает тысячи Node.js-проектов, где vm2 используется для изоляции ненадежного кода.</p>
<p dir="auto">Понимание проблемы поможет быстро проверить свои приложения, обновить зависимости и избежать компрометации сервера. Мы разберем детали, эксплуатацию и пути исправления, чтобы вы могли защитить систему без лишних усилий.</p>
<h2>Что такое vm2 и почему она популярна</h2>
<p dir="auto">Библиотека vm2 - это инструмент для Node.js, который создает изолированную среду для запуска ненадежного JavaScript-кода. Разработчики используют ее в плагинах, шаблонизаторах и системах анализа безопасности, чтобы код от пользователей не мог повредить основную систему. <strong>Sandbox</strong> в vm2 должна блокировать доступ к файловой системе, сетевым ресурсам и другим привилегиям хоста.</p>
<p dir="auto">Однако в версиях до 3.10.2 обнаружен баг, который делает изоляцию бесполезной. Уязвимость получила оценку <strong>9.8 по CVSS</strong> - максимум для критических угроз. Она эксплуатируется удаленно без аутентификации, что делает ее опасной для серверов с пользовательским вводом. На npm более 273 тысяч проектов зависят от уязвимых версий, включая популярные фреймворки.</p>
<p dir="auto">Вот ключевые аспекты механизма vm2:</p>
<ul>
<li><strong>Локальные Promise</strong>: Санитизируются в setup-sandbox.js для then и catch.</li>
<li><strong>Глобальные Promise</strong>: Не обрабатываются, что открывает лазейку через async-функции.</li>
<li><strong>Последствия</strong>: Доступ к Function.prototype и child_process для системных команд.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Аспект</th>
<th>Описание</th>
<th>Риск</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Sandbox цель</strong></td>
<td>Изоляция JS-кода</td>
<td>Полный обход</td>
</tr>
<tr>
<td><strong>Эксплуатация</strong></td>
<td>Async + globalPromise</td>
<td>Удаленная, без привилегий</td>
</tr>
<tr>
<td><strong>Затронутые</strong></td>
<td>vm2 ≤ 3.10.1</td>
<td>273k+ проектов</td>
</tr>
</tbody>
</table>
<h2>Как работает уязвимость CVE-2026-22709</h2>
<p dir="auto">Проблема кроется в неполной санитизации колбэков Promise. Vm2 очищает localPromise.prototype.then и catch, но пропускает globalPromise - те, что возвращают async-функции. Злоумышленник вставляет вредоносный код в песочницу, который использует эту разницу для выхода за пределы.</p>
<p dir="auto">Далее идет цепочка: перехват Function.prototype.call, доступ к прототипу Error, манипуляция с ним и запуск кода на хосте. Это напоминает старую уязвимость CVE-2021-23555, но с новым вектором через Promise. Разработчики vm2 выпустили фикс в 3.10.2, усилив защиту, а в 3.10.3 добавили дополнительные меры.</p>
<p dir="auto">Этапы эксплуатации:</p>
<ol>
<li>Вставка async-функции в sandbox-код.</li>
<li>Обход санитизации через globalPromise.then.</li>
<li>Получение доступа к хост-объектам и выполнение child_process.exec.</li>
</ol>
<p dir="auto"><strong>Важный нюанс</strong>: <em>Уязвимость тривиальна - не нужны права или взаимодействие с пользователем.</em> Таблица ниже показывает вектор атаки.</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Шаг</th>
<th>Техника</th>
<th>Результат</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Async return globalPromise</td>
<td>Обход local санитизации</td>
</tr>
<tr>
<td>2</td>
<td>Then/catch callback</td>
<td>Доступ к прототипу</td>
</tr>
<tr>
<td>3</td>
<td>Error constructor</td>
<td>RCE на хосте</td>
</tr>
<tr>
<td>4</td>
<td>Child_process</td>
<td>Системные команды</td>
</tr>
</tbody>
</table>
<h2>Затронутые версии и статистика</h2>
<p dir="auto">Все версии vm2 ниже 3.10.2 уязвимы, включая 3.10.0 и 3.10.1, где фикс был частичным. GitHub Security Advisory подтверждает: обновление до 3.10.2 обязательно. Более широкие оценки говорят о риске для всех релизов до этой версии, даже если некоторые источники указывают ≤3.10.0.</p>
<p dir="auto">На практике это значит проверку package.json в проектах. Библиотека входит в цепочки зависимостей многих инструментов: от серверов до браузерных песочниц. Разработчик опубликовал PoC-код, демонстрирующий выполнение команд вроде ‘ls’ или ‘whoami’ прямо из sandbox.</p>
<p dir="auto">Ключевые факты:</p>
<ul>
<li><strong>CVSS вектор</strong>: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H.</li>
<li><strong>Дата раскрытия</strong>: Январь 2026, фикс в коммите 4b009c2.</li>
<li><strong>Рекомендация</strong>: Обновить до 3.10.3 для полной защиты.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Версия</th>
<th>Статус</th>
<th>Действие</th>
</tr>
</thead>
<tbody>
<tr>
<td>≤3.10.1</td>
<td>Уязвима</td>
<td>Немедленно обновить</td>
</tr>
<tr>
<td>3.10.2</td>
<td>Фикс</td>
<td>Минимально безопасна</td>
</tr>
<tr>
<td>3.10.3+</td>
<td>Полная защита</td>
<td>Использовать</td>
</tr>
</tbody>
</table>
<h2>Меры защиты и миграция</h2>
<p dir="auto">Сначала обновите vm2 через npm update vm2@latest. Просканируйте зависимости инструментами вроде npm audit или Snyk. Если проект критический, временно отключите обработку пользовательского JS или добавьте дополнительный слой изоляции, например, Docker-контейнеры.</p>
<p dir="auto">Дальше протестируйте на PoC: запустите демо-код в вашей среде, чтобы убедиться в отсутствии уязвимости. Для новых проектов рассмотрите альтернативы вроде isolated-vm или ses - они тоже для sandbox в Node.js, но с другими плюсами.</p>
<p dir="auto">Шаги по защите:</p>
<ul>
<li><strong>Аудит</strong>: npm ls vm2.</li>
<li><strong>Обновление</strong>: npm i vm2@3.10.3.</li>
<li><strong>Мониторинг</strong>: Настройте alerts на GitHub Advisories.</li>
<li><strong>Альтернативы</strong>: Переход на isolated-vm для строгой изоляции.</li>
</ul>
<p dir="auto"><em>Не забывайте</em>: <em>Регулярные обновления - ключ к безопасности в экосистеме Node.js.</em></p>
<h2>Глубже в экосистему Node.js</h2>
<p dir="auto">Эта уязвимость подчеркивает риски популярных библиотек: vm2 казалась надежной, но баг в Promise сломал все. Остается открытым вопрос, сколько цепных атак уже произошло незаметно. Стоит присмотреться к другим sandbox-решениям и усилить валидацию ввода.</p>
<p dir="auto">В будущем фокус на полную санитизацию глобальных объектов поможет избежать подобных дыр. Если вы разрабатываете серверы, подумайте о комбинации vm2 с другими инструментами для многоуровневой защиты.</p>
]]></description><link>https://forum.exlends.ru/topic/1649/cve-2026-22709-kriticheskaya-uyazvimost-vm2-dlya-vypolneniya-koda-na-hoste</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 04:26:08 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/1649.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Mar 2026 12:44:59 GMT</pubDate><ttl>60</ttl></channel></rss>