<?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-2025-55182 в React Server Components: RCE через прототипное загрязнение в Next.js]]></title><description><![CDATA[<p dir="auto"><img src="/assets/uploads/files/30/d0/e8/1774286048244-generated_1774286019393.webp" alt="Обложка: CVE-2025-55182 в React Server Components: защита от RCE через прототипное загрязнение в Next.js App Router" class=" img-fluid img-markdown" /></p>
<p dir="auto">CVE-2025-55182 - это критичная дыра в React Server Components, которая позволяет RCE без аутентификации. Затрагивает React 19.x и Next.js 15-16 с App Router. Понимая прототипное загрязнение в Flight протоколе, можно быстро патчить и защищать прод.</p>
<p dir="auto">Уязвимость бьет по RSC эндпоинтам, где сервер десериализует клиентские пейлоады. Атакер шлет крафтед запрос, загрязняет прототипы и выполняет произвольный код. Это не просто теория - дефолтный Next.js app из create-next-app уязвим из коробки. Разберем механику, примеры эксплойта и фиксы, чтобы не словить RCE на проде.</p>
<h2>Как работает прототипное загрязнение в RSC</h2>
<p dir="auto">React Server Components используют Flight протокол для сериализации компонентов и серверных вызовов между клиентом и сервером. Проблема в react-server пакете: при десериализации RSC пейлоадов сервер не проверяет данные должным образом. Атакер вставляет вредоносный объект, который загрязняет прототипы JS объектов, перехватывая стандартные методы вроде toString или valueOf.</p>
<p dir="auto">Это приводит к RCE, потому что загрязненный прототип выполняется при обработке. Тестирование показывает 100% reliability эксплойта. В Next.js App Router это бьет по серверным эндпоинтам, включая дефолтные конфиги без кастомного кода. Логическая ошибка в десериализации позволяет переводить клиентские данные прямо в серверный код.</p>
<ul>
<li><strong>Flight протокол уязвим</strong>: Сериализованные DOM элементы или функции десериализуются без санитизации, открывая путь к <strong>proto</strong> манипуляциям.</li>
<li><strong>Next.js наследует баг</strong>: App Router использует те же react-server-dom-* пакеты, так что любой билд для продакшена эксплуатируем.</li>
<li><strong>CVSS 10.0</strong>: Pre-auth RCE - полный доступ к FS, кража ключей, латеральное движение.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Версии</th>
<th>Статус</th>
<th>Фикс</th>
</tr>
</thead>
<tbody>
<tr>
<td>React 19.0-19.2</td>
<td>Уязвимы</td>
<td>Обновить до патча</td>
</tr>
<tr>
<td>Next.js 15.x-16.x</td>
<td>Уязвимы</td>
<td>15.0.1+ или 16.0.1+</td>
</tr>
<tr>
<td>Canary 14.3.0+</td>
<td>Уязвимы</td>
<td>Перейти на stable</td>
</tr>
</tbody>
</table>
<h2>Эксплойт через App Router: реальные сценарии</h2>
<p dir="auto">В Next.js App Router RSC эндпоинты открыты по дефолту. Атакер шлет POST на /rsc endpoint с payload, где <strong>proto</strong>.constructor.constructor(‘evil code’)() выполняется на сервере. Без доп. проверок это дает shell с правами процесса Node.js. Даже если нет явных server functions, фреймворк сам wire’ит react-server пакеты.</p>
<p dir="auto">Эксплойт надежен: crafted HTTP запрос вызывает unsafe deserialization. В продакшен билде из create-next-app это работает без изменений кода. Затрагивает не только Next.js - React Router RSC, Waku, RedwoodSDK, Vite/ Parcel плагины тоже в зоне риска. Прототипное загрязнение бьет по core логике перевода пейлоадов в вызовы.</p>
<ol>
<li><strong>Payload crafting</strong>: Вставь { <strong>proto</strong>: { constructor: { constructor: Function } } } в RSC stream.</li>
<li><strong>RCE цепочка</strong>: Загрязни toString, вызови на сервере - код выполняется.</li>
<li><strong>Impact</strong>: Доступ к DB, API keys, pivot в сеть.</li>
</ol>
<pre><code class="language-javascript">// Пример упрощенного payload (не для копипаста!)
const evilPayload = {
  __proto__: {
    valueOf: () =&gt; eval('require("child_process").execSync("id")')
  }
};
// Отправить как RSC chunk в Flight формате
</code></pre>
<h2>Защита и миграция: патчи и best practices</h2>
<p dir="auto">React выпустил фиксы 3 декабря 2025 - обнови react-server-dom-webpack/server до патченных версий. Next.js трекает как CVE-2025-66478, фикс в 15.x/16.x патчах. Проверь lockfile на уязвимые deps. В дефолтных apps просто npm update, но в кастомных - аудит RSC endpoints.</p>
<p dir="auto">Если App Router must-have, добавь middleware для валидации RSC пейлоадов. Отключи публичные RSC если не юзаешь. Тестируй в staging: curl’ом симулируй эксплойт. Фиксы решают десериализацию, но мониторь новые CVEs - RSC еще сырой.</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Решение</th>
<th>Сложность</th>
<th>Эффект</th>
</tr>
</thead>
<tbody>
<tr>
<td>Update React/Next</td>
<td>Низкая</td>
<td>Полный фикс</td>
</tr>
<tr>
<td>Disable RSC endpoints</td>
<td>Средняя</td>
<td>Временный хак</td>
</tr>
<tr>
<td>Payload validation</td>
<td>Высокая</td>
<td>Extra security</td>
</tr>
</tbody>
</table>
<ul>
<li><strong>Audit deps</strong>: <code>npm ls react-server-dom-webpack</code> - найди уязвимые версии.</li>
<li><strong>CI/CD check</strong>: Добавь vulnerability scanner в pipeline.</li>
<li><em>Важно</em>: Даже после апдейта рестарт сервера обязателен.</li>
</ul>
<h2>Что меняет RCE в RSC для стека</h2>
<p dir="auto">Прототипное загрязнение в Flight показывает слабости RSC архитектуры. Фиксы закрывают дыру, но подчеркивают риски deserialization в SSR. Next.js App Router теперь требует строгого аудита пейлоадов. Остается открытым: как фреймворки интегрируют upstream без ревью?</p>
<p dir="auto">Дальше думай о sandboxing серверных компонентов или переходе на verified payloads. Экосистема растет - Parcel, Vite plugins тоже патчат. Это напоминание: в RSC стэке security first, бандл second.</p>
]]></description><link>https://forum.exlends.ru/topic/1886/cve-2025-55182-v-react-server-components-rce-cherez-prototipnoe-zagryaznenie-v-next.js</link><generator>RSS for Node</generator><lastBuildDate>Wed, 20 May 2026 08:16:27 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/1886.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Mar 2026 17:14:08 GMT</pubDate><ttl>60</ttl></channel></rss>