<?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 Server Components: патч CVE-2025-55182 в версиях 19.2.2 и Next.js 16.1]]></title><description><![CDATA[<p dir="auto"><img src="/assets/uploads/files/f2/c9/ac/1774075018875-generated_1774074996730.webp" alt="Обложка: React Server Components: патч CVE-2025-55182 в версиях 19.2.2 и Next.js 16.1 для защиты от RCE в Turbopack" class=" img-fluid img-markdown" /></p>
<p dir="auto">Если ты используешь React Server Components или Next.js с App Router, срочно обновляй зависимости. На конец прошлого года раскрыли уязвимость с максимальным рейтингом CVSS 10.0 — это означает, что любой может запустить произвольный код на твоём сервере без аутентификации и вообще без каких-то особых навыков.</p>
<p dir="auto">Речь идёт о CVE-2025-55182, также известной как React2Shell. Это не очередной баг в сторонней либе, который ты сможешь обойти — это дыра в ядре React Server Components, в механизме десериализации Flight-протокола. Один неправильный HTTP POST-запрос к любому Server Function эндпоинту — и твой сервер скомпрометирован.</p>
<h2>Что произошло с Flight-протоколом</h2>
<p dir="auto">React Server Components используют Flight — это специальный протокол для общения между сервером и клиентом. Сервер обрабатывает данные с клиента, парсит их, запускает серверную логику и отправляет обратно сериализованное дерево компонентов. Звучит просто, но здесь скрывается проблема.</p>
<p dir="auto">Когда React десериализует входящие payload’ы, он не валидирует их должным образом. Это означает, что атакующий может внедрить вредоносные структуры данных, которые React примет как обычные. Уязвимость особенно хитрая потому что она в самом core механизме обработки — в том самом requireModule функшене, которая нужна для работы Server Actions. Атакующий может использовать свойство <code>__proto__</code> в payload’е, чтобы загрязнить прототип и добиться выполнения произвольного кода прямо на твоём сервере.</p>
<p dir="auto">Проблема касается не только React 19 самого по себе. Пострадали:**</p>
<ul>
<li>Все версии react-server-dom-webpack от 19.0.0 до 19.2.0</li>
<li>react-server-dom-parcel от 19.0.0 до 19.2.0</li>
<li>react-server-dom-turbopack от 19.0.0 до 19.2.0</li>
<li>Next.js версии 15.x и 16.x (App Router)</li>
<li>Canary-сборки Next.js начиная с 14.3.0-canary</li>
<li>React Router, Waku, RedwoodSDK, плагины для Parcel и Vite</li>
</ul>
<p dir="auto">Будут затронуты буквально все приложения, которые используют React 19 с включёнными server components. Даже если ты думаешь, что ты в безопасности — проверь package-lock.json или yarn.lock. Может быть, инструмент уже установил патчированную версию, а может быть, нет.</p>
<h2>Почему это так критично</h2>
<p dir="auto">Обычно remote code execution в production-окружении — это кошмар каждого разработчика. Но это ещё не самое худшее. CVE-2025-55182 получила статус pre-authentication RCE — это означает, что атакующему не нужны никакие credentials, не нужно обходить слои безопасности, не нужно вычислять сложные цепочки уязвимостей. Одного POST-запроса достаточно.</p>
<p dir="auto">Почему это особенно опасно для бизнеса? Вот что может случиться:**</p>
<ul>
<li><strong>Кража данных</strong> — весь контент, все пользовательские данные, всё, что может быть полезным для преступников</li>
<li><strong>Развёртывание ransomware</strong> — твои серверы шифруют и требуют выкуп</li>
<li><strong>Нарушение compliance</strong> — если у тебя PCI-DSS, GDPR или другие требования, взлом критичного сервера — это прямое нарушение</li>
<li><strong>Простой систем</strong> — сервер забивается под хост для бот-сетей, падает производительность, пользователи не могут работать</li>
</ul>
<p dir="auto">И самое противное — всё это может произойти без каких-то громких следов. Скрипт может работать молча, выкачивая данные в фоне, пока ты ничего не заметишь.</p>
<h2>Версии-патчи: что обновлять</h2>
<p dir="auto">Добрая новость — патчи уже выкатили. Плохая — их нужно установить прямо сейчас. Не завтра, не в следующий спринт, а прямо сейчас.</p>
<p dir="auto">Для разных версий пакетов нужны разные патч-версии. Это нарочно сделано так, чтобы ты не получил breaking changes, если ты зафиксировал мажор в package.json. Вот таблица:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Версия react-server-dom</th>
<th>Патч-версия</th>
</tr>
</thead>
<tbody>
<tr>
<td>19.0.x</td>
<td>19.0.1 и выше</td>
</tr>
<tr>
<td>19.1.x</td>
<td>19.1.2 и выше</td>
</tr>
<tr>
<td>19.2.x</td>
<td>19.2.2 и выше</td>
</tr>
</tbody>
</table>
<p dir="auto">Для Next.js аналогично — обновляйся до последних версий в своём мажоре, но обязательно проверь, что это будут версии с патчем:**</p>
<ul>
<li>Next.js 15.x — обновись до 15.1.5 или выше</li>
<li>Next.js 16.x — обновись до 16.1 или выше</li>
<li>Next.js 14.x (если ты используешь canary) — эта ветка тоже затрагивается, но обновление немного сложнее</li>
</ul>
<p dir="auto">Один нюанс, который многие пропускают: если в твоём package.json стоит <code>"react": "^19.0.0"</code>, то это не гарантирует, что при переустановке или деплое ты получишь 19.0.1. Каретка означает только нижний лимит. Поэтому <strong>обязательно посмотри в lock-файл</strong> — что там на самом деле установлено. Если там 19.0.0 или 19.1.0 или 19.2.0 (без патч-версии) — это уязвимо.</p>
<h2>Как срочно защитить систему, пока идёт обновление</h2>
<p dir="auto">Патчирование — это долгий процесс, если у тебя большой проект с кучей зависимостей. Не ждать же целый день, пока npm install доделает все свои дела. Есть временные меры, которые смогут подержать оборону до момента, когда ты откатишь полное обновление.</p>
<p dir="auto"><strong>WAF-правила</strong> — поставь их прямо сейчас. Если твой сервер стоит за облачным балансировщиком (AWS, Google Cloud, Azure), у них есть встроенные WAF-консоли. Нужно добавить фильтр, который будет отклонять запросы с подозрительными Flight-chunk структурами, в частности запросы с <code>__proto__</code> свойствами. Это не остановит всех, но отсеет базовые эксплойты.</p>
<p dir="auto"><strong>Отключи Server Functions</strong> — если у тебя есть возможность, временно отключи Server Functions в production. Да, это означает, что часть функциональности не будет работать, но это лучше, чем компромисс. Например, если твоё приложение больше про статический контент, а Server Functions используются только в части фич, ты можешь их выключить отдельно.</p>
<p dir="auto"><strong>Запускай сервер с минимальными правами</strong> — если даже атакующий получит RCE, он не должен иметь доступ ко всей системе. Используй отдельного пользователя, ограничь права доступа к файлам и базам данных, запускай контейнеры с read-only filesystem где возможно. Так, если даже код запустится, он не сможет нанести максимальный урон.</p>
<p dir="auto"><strong>Мониторь логи</strong> — включи детальное логирование на своих эндпоинтах Server Functions. Ищи странные структуры в payload’ах, необычные заголовки <code>next-action</code> или <code>rsc-action-id</code>, попытки использования <code>__proto__</code>. Многие облачные провайдеры уже добавили автоматические детекторы таких попыток.</p>
<h2>Как правильно откатить патч</h2>
<p dir="auto">Если ты никогда не обновлял React в production, сейчас это нужно делать очень аккуратно. Вот план действий:</p>
<ol>
<li>
<p dir="auto"><strong>Создай отдельную ветку</strong> из мастера. На ней будешь экспериментировать.</p>
</li>
<li>
<p dir="auto"><strong>Обнови package.json вручную</strong> — не удаляй node_modules, не очищай кэш npm. Просто измени версии в package.json:</p>
</li>
</ol>
<pre><code class="language-javascript">"react": "^19.2.2",
"next": "^16.1.0",
"react-server-dom-webpack": "^19.2.2"
</code></pre>
<ol start="3">
<li>
<p dir="auto"><strong>Запусти npm install</strong> (или yarn install, если используешь yarn). Дай ему время скачать и установить всё.</p>
</li>
<li>
<p dir="auto"><strong>Запусти локальный бенч</strong> — проверь, что приложение запускается, что нет ошибок на старте. Если у тебя есть E2E тесты, запусти их. Если нет — хотя бы немного покликай по интерфейсу.</p>
</li>
<li>
<p dir="auto"><strong>Запусти production build</strong> — <code>npm run build</code>. Проверь, что всё компилируется без ошибок. Если что-то сломалось, скорее всего будут сообщения об этом на этапе сборки.</p>
</li>
<li>
<p dir="auto"><strong>Залей на staging</strong> — развёрни на тестовом окружении, дай команде потестить. Хотя бы день.</p>
</li>
<li>
<p dir="auto"><strong>Откатись на production</strong> — если на staging всё окей, заливай на production. Но <strong>делай это во время low-traffic периода</strong> (ночью, в выходные, когда пользователей мало). Если что-то сломается, откатиться будет проще.</p>
</li>
</ol>
<h2>Что ещё нужно знать про эту уязвимость</h2>
<p dir="auto">Оказывается, CVE-2025-55182 — это не единственная проблема в React Server Components. Пока ребята фиксили эту уязвимость, нашли ещё две:**</p>
<ul>
<li><strong>CVE-2025-55184 и ещё пара номеров</strong> — отказ в обслуживании (DoS). Это CVSS 7.5, не такое критичное, как RCE, но тоже неприятно. Атакующий может завалить твой сервер бесполезными запросами и вывести его из строя.</li>
<li><strong>CVE-2025-55183</strong> — утечка исходного кода. CVSS 5.3. Менее критично, но всё равно неприятно — твой бизнес-логика может быть раскрыта.</li>
</ul>
<p dir="auto">Все эти уязвимости закрыты в тех же версиях патчей, которые мы обсуждали выше. Так что когда ты обновляешь React 19.2.2 и Next.js 16.1, ты закрываешь сразу все три дыры.</p>
<h2>Что дальше</h2>
<p dir="auto">Уязвимости вроде CVE-2025-55182 показывают, как важно держать зависимости в актуальном состоянии. Да, обновления иногда ломают код, да, это требует времени на тестирование. Но риск остаться с критичной дырой в production — это куда больнее. Поэтому стоит подумать о том, как организовать процесс обновлений в своей команде: может быть, автоматические checks через dependabot, может быть, выделенный день в неделю для ревью и апдейта критичных пакетов. И уж точно стоит подписаться на уведомления безопасности от React и Next.js — они будут слать вам прямо в морду, когда появляется что-то критичное. Так что, когда в следующий раз раскроют уязвимость, ты уже будешь знать, что нужно делать.</p>
]]></description><link>https://forum.exlends.ru/topic/1793/react-server-components-patch-cve-2025-55182-v-versiyah-19.2.2-i-next.js-16.1</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 04:06:27 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/1793.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 21 Mar 2026 06:36:59 GMT</pubDate><ttl>60</ttl></channel></rss>