
CVE-2025-66478 Proof of Concept
CVE-2025-66478 是一个影响 Next.js 应用程序的严重远程代码执行 (RCE) 漏洞,源于 React Server Components (RSC) 协议中的不安全反序列化问题。该漏洞的 CVSS 评分为 10.0(最高级别),允许未经身份验证的攻击者通过特制的 HTTP 请求在易受攻击的服务器上执行任意代码。
该漏洞源于上游 React 实现中的不安全反序列化逻辑(CVE-2025-55182),并影响使用 App Router 的 Next.js 应用程序。问题出在 React Server Components 的 "Flight" 协议中,该协议负责在服务器和客户端之间序列化和反序列化数据。
受影响的 Next.js 版本:
不受影响的版本:
攻击者只需向目标服务器发送一个特制的 HTTP 请求,其中包含恶意构造的 RSC payload。当服务器处理这个 payload 时,由于不安全的反序列化逻辑,攻击者控制的数据可以影响服务器端的执行流程,导致任意 JavaScript 代码的执行。
特别关注: Dify 等 AI 工具成为重灾区,利用成功率较高。这些应用通常使用 Next.js App Router 和 Server Components,因此容易受到此漏洞影响。
常见受影响应用类型:
此工具仅用于教育目的和安全研究。 请勿在未经授权的系统上使用。使用此工具进行任何非法活动均与作者无关。
exploit.js 是一个概念验证脚本,演示了如何构造和发送恶意的 RSC payload。这个脚本包含以下功能:
# 执行特定命令
node exploit.js <目标URL> <命令>
# 示例
node exploit.js http://localhost:3000 "whoami"
# 扫描目标应用程序中的 RSC 端点
node exploit.js <目标URL> --scan
# 示例
node exploit.js http://localhost:3000 --scan
为了安全地演示和测试此漏洞,我们提供了一个完整的 Docker 演示环境,包含一个易受攻击的 Next.js 应用程序。
Windows (PowerShell):
.\setup-demo.ps1
Linux/macOS:
chmod +x setup-demo.sh
./setup-demo.sh
# 1. 构建 Docker 镜像
docker-compose build
# 2. 启动容器
docker-compose up -d
# 3. 查看日志(可选)
docker-compose logs -f
启动后,等待几秒钟,然后访问:
使用提供的 exploit 脚本测试漏洞:
# 基本测试
node exploit.js http://localhost:3000/_rsc "echo test"
# 执行命令
node exploit.js http://localhost:3000/_rsc "whoami"
# 扫描端点
node exploit.js http://localhost:3000 --scan
演示环境包含:
# 查看日志
docker-compose logs -f
# 停止环境
docker-compose down
# 停止并删除数据
docker-compose down -v
# 重启环境
docker-compose restart
⚠️ 重要警告:
test-vulnerability.js 是一个用于检测应用程序是否受此漏洞影响的工具。它会执行以下检查:
# 测试目标应用程序
node test-vulnerability.js <目标URL>
# 示例
node test-vulnerability.js http://localhost:3000
升级 Next.js:将 Next.js 升级到最新版本,该版本已修复此漏洞
npm install next@latest
# 或
yarn upgrade next@latest
# 或
pnpm update next@latest
验证修复:使用 test-vulnerability.js 工具验证修复是否成功
node test-vulnerability.js <目标URL>
如果无法立即升级,可以考虑以下临时缓解措施:
使用 Pages Router:将受影响的路由迁移到 Pages Router,该路由不受此漏洞影响
启用 Edge Runtime:为受影响的路由启用 Edge Runtime,该运行时不受此漏洞影响
// 在页面组件或布局中
export const runtime = 'edge';
该漏洞利用了 React Server Components "Flight" 协议中的不安全反序列化逻辑。当服务器接收到客户端发送的 RSC 请求时,它会反序列化包含组件数据的 payload。由于反序列化过程中缺乏充分的验证,攻击者可以构造恶意 payload,导致服务器执行任意 JavaScript 代码。
要利用此漏洞,攻击者需要满足以下条件:
成功利用此漏洞可以导致:
# 搜索 Next.js 应用(通用)
body="NEXT_DATA" && body="version"
# 搜索 AI 相关应用(Dify 等)
body="NEXT_DATA" && (body="AI" || body="人工智能" || body="大模型" || body="LLM")
# 搜索 Dify 应用
body="NEXT_DATA" && (body="dify" || title="Dify" || body="dify.ai")
# 组合搜索
body="NEXT_DATA" && (body="AI" || body="人工智能") && domain="edu.cn"
# 搜索教育机构中的 Next.js 应用
(web.title="Next.js" OR web.body="NEXT_DATA") && domain="edu.cn"
/_rsc - React Server Components 端点/api/rsc - API RSC 端点/api/chat - Dify 等 AI 工具的聊天端点/api/completion - 完成端点/api/v1/chat - API v1 聊天端点/server-actions - Server Actions 端点CVE-2025-66478 — это критическая уязвимость удалённого выполнения кода (RCE), затрагивающая приложения Next.js, возникающая из-за небезопасной десериализации в протоколе React Server Components (RSC). С оценкой CVSS 10.0 (максимально возможная) она позволяет неаутентифицированным злоумышленникам выполнять произвольный код на уязвимых серверах через специально созданные HTTP-запросы.
Уязвимость берёт начало из небезопасной логики десериализации в вышестоящей реализации React (CVE-2025-55182) и затрагивает приложения Next.js, использующие App Router. Проблема кроется в протоколе «Flight» React Server Components, который отвечает за сериализацию и десериализацию данных между сервером и клиентом.
Затронутые версии Next.js:
Незатронутые версии:
Злоумышленнику нужно лишь отправить на целевой сервер специально сформированный HTTP-запрос, содержащий вредоносную нагрузку RSC. Когда сервер обрабатывает эту нагрузку, из-за небезопасной десериализации данные, контролируемые атакующим, могут повлиять на поток выполнения на стороне сервера, что приведёт к выполнению произвольного JavaScript-кода.
Этот инструмент предназначен только для образовательных целей и исследований в области безопасности. Не используйте его в неавторизованных системах. Любая незаконная деятельность с использованием этого инструмента не связана с автором.
exploit.js — это сценарий концептуального доказательства, демонстрирующий, как создавать и отправлять вредоносные нагрузки RSC. Данный сценарий включает следующие функции:
# Выполнить определённую команду
node exploit.js <целевой-URL> <команда>
# Пример
node exploit.js http://localhost:3000 "whoami"
# Сканировать целевое приложение на наличие конечных точек RSC
node exploit.js <целевой-URL> --scan
# Пример
node exploit.js http://localhost:3000 --scan
Для безопасной демонстрации и тестирования данной уязвимости мы предоставляем полную демонстрационную среду Docker, содержащую уязвимое приложение Next.js.
Windows (PowerShell):
.\setup-demo.ps1
Linux/macOS:
chmod +x setup-demo.sh
./setup-demo.sh
# 1. Собрать Docker-образ
docker-compose build
# 2. Запустить контейнер
docker-compose up -d
# 3. Просмотреть логи (опционально)
docker-compose logs -f
После запуска подождите несколько секунд, затем перейдите по адресу:
Используйте предоставленный сценарий exploit для проверки уязвимости:
# Базовый тест
node exploit.js http://localhost:3000/_rsc "echo test"
# Выполнение команды
node exploit.js http://localhost:3000/_rsc "whoami"
# Сканирование конечных точек
node exploit.js http://localhost:3000 --scan
Демонстрационная среда включает:
# Просмотр логов
docker-compose logs -f
# Остановка среды
docker-compose down
# Остановка и удаление данных
docker-compose down -v
# Перезапуск среды
docker-compose restart
⚠️ Важные предупреждения:
test-vulnerability.js — это инструмент для обнаружения, затронуто ли приложение данной уязвимостью. Он выполняет следующие проверки:
# Протестировать целевое приложение
node test-vulnerability.js <целевой-URL>
# Пример
node test-vulnerability.js http://localhost:3000
Обновление Next.js: обновите Next.js до последней версии, в которой исправлена данная уязвимость
npm install next@latest
# или
yarn upgrade next@latest
# или
pnpm update next@latest
Проверка исправления: используйте инструмент test-vulnerability.js, чтобы убедиться, что исправление сработало
node test-vulnerability.js <целевой-URL>
Если немедленное обновление невозможно, рассмотрите следующие временные меры:
Использование Pages Router: перенесите затронутые маршруты на Pages Router, который не подвержен этой уязвимости
Включение Edge Runtime: включите Edge Runtime для затронутых маршрутов, так как он не подвержен этой уязвимости
// В компоненте страницы или макете
export const runtime = 'edge';
Уязвимость эксплуатирует небезопасную логику десериализации в протоколе «Flight» React Server Components. Когда сервер получает от клиента RSC-запрос, он десериализует нагрузку, содержащую данные компонентов. Из-за недостаточной проверки при десериализации злоумышленники могут создавать вредоносные нагрузки, заставляющие сервер выполнять произвольный JavaScript-код.
Для эксплуатации данной уязвимости злоумышленнику необходимо:
Успешная эксплуатация может привести к: