DEV Community

Cover image for React2Shell (CVE‑2025‑55182): la vulnerabilidad que sacudió Next.js y cómo sobrevivir a la migración
Jramone3
Jramone3

Posted on

React2Shell (CVE‑2025‑55182): la vulnerabilidad que sacudió Next.js y cómo sobrevivir a la migración

El 29 de noviembre de 2025, el equipo de seguridad de Vercel, encabezado por Talha Tariq (CISO), comunicó oficialmente la existencia de la vulnerabilidad crítica CVE‑2025‑55182, apodada React2Shell. Esta falla afecta a React Server Components y Next.js, permitiendo ejecución remota de código (RCE) sin autenticación. La severidad es máxima (CVSS 10) y ya existen exploits públicos. Vercel bloqueó nuevas implementaciones vulnerables y recomendó actualizar de inmediato a versiones parcheadas.

🔎 El problema real para los usuarios
Actualizar no siempre es tan simple. En entornos reales encontramos:

Next.js 16.0.3 → vulnerable.

Next.js 13.5.11 → obsoleto, dependencias rotas.

Conflictos npm: errores ERESOLVE unable to resolve dependency tree.

Paquetes obsoletos: referencias a @next/swc@13.5.11 que ya no existen.

Turbopack: experimental, incompatibilidades con Auth0 v4.13.2.

Tailwind: utilidades en globals.css no soportadas.

Auth0: API v3 deprecada, API v4 requiere rutas individuales y migración a proxy.ts.

🛠️ Vías de solución

  1. Actualización directa con --legacy-peer-deps
    bash
    rm -rf node_modules package-lock.json
    npm install next@16.0.7 react@19.0.1 react-dom@19.0.1 --legacy-peer-deps
    ✔ Rápida, mantiene proyecto actual. ✘ Puede arrastrar dependencias obsoletas.

  2. Mantener React 18
    bash
    npm install next@16.0.7 react@18.3.1 react-dom@18.3.1 --legacy-peer-deps
    ✔ Menos conflictos. ✘ No aprovecha mejoras de React 19.

  3. Migración limpia
    bash
    npx create-next-app@latest proyecto_seguro
    cd proyecto_seguro
    npm install next@16.0.7 react@19.0.1 react-dom@19.0.1
    ✔ Entorno moderno y seguro. ✘ Requiere migrar manualmente el código.

  4. Desactivar Turbopack y usar Webpack
    js
    // next.config.js
    const nextConfig = {
    webpack: (config) => config,
    };
    module.exports = nextConfig;
    ✔ Estabilidad con librerías críticas. ✘ Pierde mejoras experimentales.

  5. Ajustes específicos
    Tailwind: aplicar clases en JSX/TSX, no en globals.css.

Auth0: usar API v4 con rutas individuales (login.ts, logout.ts, callback.ts, me.ts).

Middleware: migrar de middleware.ts a proxy.ts.

📊 Conclusiones
React2Shell es crítica y ya explotada.

La migración no es trivial: conflictos y dependencias obsoletas complican el proceso.

Documentar cada paso es esencial para reproducibilidad y seguridad.

La comunidad necesita guías oficiales claras.

📌 Cierre institucional
“Desde REMI‑IA ponemos a disposición nuestra experiencia en entornos portátiles y demos patrimoniales para ofrecer una solución humilde pero práctica. Hemos documentado cada paso y proponemos alternativas viables para que la comunidad supere esta vulnerabilidad crítica.”

Equipo REMI‑IA 📧 Contacto:
jramonrivasg@gmail.com
jramonrivasg@proton.me
🔗 Enlace:
X (Twitter): https://x.com/jramone3

Top comments (0)