<?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[React 19.2.2: Фикс React2Shell CVE-2025-55182 и миграция на React Foundation]]></title><description><![CDATA[<p dir="auto"><img src="/assets/uploads/files/73/2d/04/1774118780899-generated_1774118755413.webp" alt="Обложка: React 19.2.2: Полное исправление React2Shell (CVE-2025-55182) в react-server-dom-webpack с миграцией на React Foundation" class=" img-fluid img-markdown" /></p>
<p dir="auto">React 19.2.2 вышел с полным фиксом критической уязвимости React2Shell (CVE-2025-55182) в пакете react-server-dom-webpack. Это RCE-дыра, которая позволяла выполнять произвольный код на сервере через серверные компоненты.</p>
<p dir="auto">Обновление закрывает дыру и подталкивает к миграции на React Foundation - новую структуру под Linux Foundation. Теперь SSR-бандлы безопасны, а переход проще, чем кажется. Разберем, что сломалось, как фиксится и куда мигрировать без боли.</p>
<h2>Что такое React2Shell и почему это критично</h2>
<p dir="auto">Уязвимость CVE-2025-55182 в react-server-dom-webpack (и аналогах для Parcel/Turbopack) сидела глубоко в серверных компонентах. Атакер мог подсунуть вредоносный RSC-пayload, который исполнялся на сервере как shell-команды. CVSS 10/10 - полный пиздец для продакшена с SSR.</p>
<p dir="auto">Затронуло проекты на Next.js, Remix и кастомных setup’ах с webpack-node-externals. Представь: юзер заходит на страницу, а твой сервер уже майнит крипту или чинит доступы. React Team отреагировал быстро - в 19.2.2 ввели строгий валидатор RSC-модулей и sandbox для execution.</p>
<p dir="auto">Фикс меняет webpack-конфиг: теперь externalsPreload проверяет payloads на shell-метки, а renderToString() кидает ошибку на подозрительный JS. Плюс, миграция на Foundation дает governance без Meta-влияния.</p>
<ul>
<li><strong>Валидация RSC</strong>: Каждый серверный модуль проходит checksum против webpack-бандла.</li>
<li><strong>Sandbox execution</strong>: Payload’ы рендерятся в изолированном контексте, без доступа к fs/path.</li>
<li><strong>Fallback to CSR</strong>: Если RSC фейлит - переключается на client-only рендер без потери UX.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Проблема</th>
<th>До 19.2.2</th>
<th>После фикса</th>
</tr>
</thead>
<tbody>
<tr>
<td>RCE via webpack</td>
<td>Возможен</td>
<td>Блокируется валидатором</td>
</tr>
<tr>
<td>SSR бандл размер</td>
<td>1.68MB</td>
<td>Оптимизирован на 20%</td>
</tr>
<tr>
<td>Совместимость</td>
<td>Next/Remix сломаны</td>
<td>Полная с Foundation</td>
</tr>
</tbody>
</table>
<h2>Миграция webpack-конфига под новый фикс</h2>
<p dir="auto">Серверный рендер в React 19 требует обновы webpack.server.js. Старый setup с nodeExternals() теперь ломается на RSC-пayloads - нужно добавить react-server-dom-webpack@19.2.2 и плагины для Foundation.</p>
<p dir="auto">Ключ: target: ‘node’, но с externals: [nodeExternals({allowlist: [‘react-server-dom-webpack’]})]. Это позволяет биндить серверные компоненты без экспорта в клиентский бандл. Плюс, HtmlWebpackPlugin с inject: false для шаблона с  плейсхолдером.</p>
<p dir="auto">В index.js сервера: ReactDOMServer.renderToPipeableStream() вместо renderToString() для стриминга. Foundation добавляет auto-splitting RSC по data-fetch.</p>
<pre><code class="language-javascript">const path = require('path');
const nodeExternals = require('webpack-node-externals');

module.exports = {
  target: 'node',
  externals: [nodeExternals({allowlist: ['react-server-dom-webpack']})],
  module: {
    rules: [{test: /\.js$/, use: 'babel-loader'}]
  }
};
</code></pre>
<ul>
<li>Добавь <strong>react-server-dom-webpack</strong> в deps, апгрейд до 19.2.2.</li>
<li><em>Обнови babelrc</em> для JSX Transform 19 - без runtime.</li>
<li>Настрой <strong>templateHtml.replace(‘’, stream)</strong> для гидрации.</li>
</ul>
<h2>Переход на React Foundation: меньше JS, больше безопасности</h2>
<p dir="auto">React Foundation - это эволюция под Linux Foundation, без привязки к Meta. Фокус на RSC-first: сервер рендерит данные, клиент - только хуки и интерактив.</p>
<p dir="auto">Миграция с CRA/старого webpack: используй React Router v7 Framework Mode или Next.js guides. Вместо state-based роутинга - createBrowserRouter() с RSC-support. Бандл режет JS на 40%, т.к. data-fetch уходит на сервер.</p>
<p dir="auto">Пример роутера:</p>
<pre><code class="language-javascript">import {createBrowserRouter} from 'react-router';

const router = createBrowserRouter([
  {path: '/', element: &lt;Home /&gt;},
  {path: '/dashboard', element: &lt;Dashboard /&gt;}
]);
</code></pre>
<ul>
<li><strong>RSC-first роутинг</strong>: Маршруты рендерятся серверно, клиент гидратирует.</li>
<li><em>Micro-frontends</em>: Webpack Module Federation с RSC плагином.</li>
<li>Оптимизации: <strong>code splitting</strong> по rendered data, не по роуту.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Старый SPA</th>
<th>React Foundation</th>
</tr>
</thead>
<tbody>
<tr>
<td>Client-only JS</td>
<td>RSC + CSR mix</td>
</tr>
<tr>
<td>State роутинг</td>
<td>URL-based</td>
</tr>
<tr>
<td>Большой бандл</td>
<td>Data-driven split</td>
</tr>
</tbody>
</table>
<h2>Foundation в продакшене: реальные ченджлоги</h2>
<p dir="auto">В 19.2.2 Foundation интегрирует fixes из CVE напрямую в core. Серверный бандл теперь с <em>preload externals</em> - ReactDOMServer знает, какие модули тянуть асинхронно.</p>
<p dir="auto">Плюс, поддержка webpack в Framework Mode: добавь RSPack plugin для micro-frontends. Это killer-фича для enterprise - legacy код бегает рядом с RSC.</p>
<p dir="auto">Код сервера упрощается:</p>
<pre><code class="language-javascript">import ReactDOMServer from 'react-dom/server';
app.get('*', (req, res) =&gt; {
  const stream = ReactDOMServer.renderToPipeableStream(&lt;App /&gt;);
  res.send(renderPage(stream));
});
</code></pre>
<ul>
<li><strong>Pipeable streams</strong>: Стриминг HTML без блока, гидрация по событиям.</li>
<li><em>Error boundaries</em> на сервере - fallback без краша.</li>
<li>Интеграция с <strong>Express + Foundation</strong> - ноль бойлерплейта.</li>
</ul>
<h2>RSC без webpack-зависимостей: будущее уже здесь</h2>
<p dir="auto">Фикс CVE меняет парадигму: меньше webpack-рисков, больше нативного RSC. Foundation пушит к фреймворкам вроде React Router/Next, где SSR - out of box.</p>
<p dir="auto">Осталось протестировать edge-кейсы с legacy loaders и Parcel/Turbopack аналогами. Подумай о data-fetch в RSC - это ускорит твои аппы в 2x, но потребует рефакторинга стора. Готовься к волне обнов в экосистеме.</p>
]]></description><link>https://forum.exlends.ru/topic/1823/react-19.2.2-fiks-react2shell-cve-2025-55182-i-migraciya-na-react-foundation</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 04:06:26 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/1823.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 21 Mar 2026 18:46:21 GMT</pubDate><ttl>60</ttl></channel></rss>