Tutorial

Next.js 16.4.1 y 15.5.28: corregir las fallas RCE en un VPS

Seguridad y monitorización9 min de lectura10 pasos

El 14 de octubre de 2026, Next.js publicó una actualización fuera de ciclo: 16.4.1 y 15.5.28. Corrige dos ejecuciones remotas de código críticas, explotables sin cuenta, y una denegación de servicio. En un VPS, ninguna plataforma actualiza su aplicación por usted: le toca subir la versión, revisar el lockfile, reconstruir y reiniciar el proceso correcto. Un redespliegue con Docker puede incluso reutilizar una capa en caché y devolver la versión antigua a producción. Así se averigua en diez minutos si está expuesto, cómo actualizar y cómo demostrar que la corrección está realmente en marcha.

Contenido· Qué se publicó el 14 de octubre1/13
  1. 01Qué se publicó el 14 de octubre
  2. 02Lo esencial
  3. 03Sin use cache ni SVG, por qué no basta
  4. 04Qué versión instalar según su línea
  5. 05Saber qué está funcionando realmente
  6. 06Hacer inventario en cinco comprobaciones
  7. 07Actualizar y luego revisar el lockfile
  8. 08Redesplegar según su entorno
  9. 09Si no puede redesplegar hoy
  10. 10Mitigaciones provisionales, no correcciones
  11. 11Ejecute npm audit tras actualizar
  12. 12Tras la corrección: vigilar y planificar la línea 15
  13. 13La documentación oficial

Qué se publicó el 14 de octubre

El 14 de octubre de 2026, el equipo de Next.js publicó una actualización de seguridad fuera de ciclo: la versión 16.4.1 para la línea Active LTS y la versión 15.5.28 para la línea Maintenance LTS. Corrige tres fallas vinculadas a dependencias de origen: dos ejecuciones remotas de código críticas, sin autenticación, y una denegación de servicio de severidad alta. Dos de estas correcciones se habían aplazado desde la publicación de septiembre por retrasos en los proyectos de origen.

En un servidor que usted administra, la corrección no llega sola. Hay que subir next, comprobar que la biblioteca sharp lo sigue, reconstruir la aplicación y reiniciar el proceso que realmente sirve el tráfico. Este artículo recorre ese camino para PM2, Docker y Coolify, sin repetir la instalación de un servidor Next.js.

Lo esencial

  • GHSA-673q-mjm6-r5xr (crítica) — ejecución remota de código sin autenticación en una aplicación App Router con Cache Components, cuando una función use cache devuelve varios arreglos tipados. No se conoce ninguna solución alternativa. El aviso indica el rango 16.0.0 a 16.4.0 y una puntuación CVSS de 9.5.
  • CVE-2026-96889 / GHSA-2464-fhr4-w9xw (crítica) — ejecución remota de código a través de una biblioteca de origen de la API de optimización de imágenes, cuando se usan archivos SVG, en Linux basado en glibc. Puntuación de 9.5. Medida oficial: sharp 0.35.5 o superior.
  • GHSA-p3m5-59mp-jv5r (alta) — denegación de servicio en una aplicación App Router con al menos una Server Action: peticiones manipuladas saturan el procesador y bloquean las siguientes peticiones del mismo proceso. Puntuación de 8.2. El Pages Router, o la ausencia de Server Actions, no está afectado.
  • Versiones corregidas — 16.4.1 para la línea 16 y 15.5.28 para la línea 15, con los comandos oficiales npm install [email protected] y npm install [email protected].
  • Sin CVE en dos avisos de tres — solo la RCE de imágenes lleva un identificador CVE. Los otros dos se siguen por su identificador GHSA: una herramienta que solo busque CVE los pasará por alto.
  • Incluso sin uso directo — para la RCE de use cache, Vercel pide actualizar aunque la aplicación no contenga una función similar.

Sin use cache ni SVG, por qué no basta

Tres razones para no quedarse en esa objeción. Primero, para la RCE de use cache el anuncio es explícito: no existe ninguna solución alternativa y se pide actualizar incluso cuando la aplicación no tiene una función similar. Segundo, la RCE de imágenes depende de una biblioteca de origen, y no siempre se sabe qué archivos SVG llegan al optimizador, sobre todo cuando las imágenes vienen de fuentes remotas. Tercero, la denegación de servicio solo necesita una Server Action, algo que muchos formularios de App Router ya incluyen.

El riesgo de rotura es limitado: la subida se mantiene dentro de la misma línea, 16.4.x o 15.5.x. Una única restricción que conviene conocer: la versión 16.4.1 declara Node 20.9 o superior, mientras que la 15.5.28 acepta Node 18.18 y posteriores. Si usa una 16.x más antigua, pasar a la 16.4.1 se queda dentro de la misma versión mayor.

Qué versión instalar según su línea

Desplace la tabla

Su versiónEstadoQué hacer
16.0.0 a 16.4.0Afectada por los tres avisosPasar a la 16.4.1 o a una 16.4.x más reciente
16.4.1 y posterioresCorrección incluidaRevisar sharp y el redespliegue real
15.0.0 a 15.5.27Afectada por la RCE de imágenes y el DoSPasar a la 15.5.28 y planificar la migración a 16.4.x
15.5.28Corrección incluidaPlanificar la migración a 16.4.x
13.x y 14.xAfectada, sin corrección publicada para estas líneasMigrar a la 15.5.28 o a la 16.4.1
10.0.0 a 12.xAfectada por la RCE de imágenes, sin corrección publicadaMigrar a una línea mantenida

Saber qué está funcionando realmente

La versión escrita en su repositorio no es la que responde a las peticiones. Un lockfile puede ser anterior a la corrección, una construcción de Docker puede reutilizar una capa en caché, un proceso de PM2 puede apuntar a un directorio de release antiguo. Con la salida standalone, Next.js copia en la carpeta de despliegue los archivos de node_modules que necesita: el sharp incluido es, por tanto, el presente en el momento de la construcción, no el que instaló después. Las comprobaciones siguientes se hacen en la máquina o en el contenedor que sirve el tráfico.

Hacer inventario en cinco comprobaciones

  1. Leer las versiones de Next.js y de sharp

    Desde la raíz del proyecto: npm ls next sharp, o pnpm why sharp con pnpm. Para la versión exacta de Next.js: node -p "require('next/package.json').version". Un sharp inferior a 0.35.5 bajo next hay que corregirlo.

  2. Localizar Cache Components y use cache

    grep -rn "cacheComponents" next.config.* y después grep -rln "use cache" app src. Si cacheComponents no aparece, su aplicación no recorre el camino descrito en el aviso. Actualice igualmente: Vercel lo pide en todos los casos.

  3. Localizar el uso de SVG

    grep -rn "dangerouslyAllowSVG\|remotePatterns" next.config.* y find public -name "*.svg". Por defecto, la documentación indica que Next.js no optimiza las imágenes SVG y que dangerouslyAllowSVG las permite. La ausencia de este ajuste es buena señal, no una prueba: el aviso no detalla el camino exacto.

  4. Localizar las Server Actions

    grep -rln "use server" app src. Un solo archivo basta para que una aplicación App Router quede expuesta a la denegación de servicio.

  5. Reconocer la biblioteca C del sistema

    ldd --version muestra GNU libc en Debian, Ubuntu, AlmaLinux o Rocky, y musl libc en Alpine. El aviso solo menciona glibc y no dice nada de musl: no deduzca que Alpine se libra. En un contenedor: docker exec <contenedor> ldd --version.

Actualizar y luego revisar el lockfile

Ejecute el comando de su línea: npm install [email protected] o npm install [email protected]. Queda una trampa que el anuncio no detalla. La versión 16.4.1 declara sharp como dependencia opcional con el rango ^0.35.5, pero la 15.5.28 declara ^0.34.3 || ^0.35.5. Un lockfile que ya contiene una 0.34.x cumple ese rango: el gestor de paquetes no tiene motivo para subirla.

Revise, por tanto, el resultado con npm ls sharp. Si muestra una versión inferior a 0.35.5, fuerce la subida con npm install sharp@^0.35.5 o añada un override en package.json, por ejemplo "overrides": { "sharp": "^0.35.5" }. Con pnpm o yarn, el equivalente consiste en subir sharp o declarar un override. Confirme el lockfile en el repositorio: es el que leerán su CI y su imagen de Docker.

Redesplegar según su entorno

  1. Validar la construcción

    npm ci, después npm run build y luego npm ls next sharp. Si la construcción falla por Node, compruebe la versión que exige la línea elegida.

  2. PM2

    Construya en el directorio que ejecuta PM2 y después pm2 reload <nombre>. Compruebe con pm2 describe <nombre> que el directorio de ejecución es el que acaba de reconstruir: con un esquema de releases, un enlace simbólico olvidado reinicia el código antiguo.

  3. Docker

    Reconstruya sin caché: docker build --no-cache -t miapp:corregida ., o al menos invalide la capa npm ci. Reinicie con docker compose up -d --force-recreate. Compare después la imagen del contenedor en marcha (docker inspect -f '{{.Image}}' <contenedor>) con la que acaba de construir.

  4. Coolify

    Lance un redespliegue que ignore la caché de construcción y lea el registro: el paso de instalación de dependencias debe ejecutarse, no figurar como reutilizado. Un simple reinicio no reconstruye nada.

  5. Demostrar la corrección

    Lea la versión en el proceso en marcha, no en el repositorio: docker exec <contenedor> node -p "require('next/package.json').version" debe mostrar 16.4.1 o 15.5.28 (o una versión más reciente de la misma línea). Compruebe sharp con docker exec <contenedor> grep '"version"' node_modules/sharp/package.json, que debe mostrar 0.35.5 o superior.

Si no puede redesplegar hoy

Para la RCE de use cache no existe ninguna medida alternativa: solo la actualización la corrige. Para las otras dos fallas, algunas mitigaciones reducen el riesgo mientras tanto. No sustituyen la corrección, y conviene anotarlas como provisionales en su registro de operaciones.

Mitigaciones provisionales, no correcciones

  • Subir solo sharp — es la medida oficial para la RCE de imágenes: sharp 0.35.5 o superior. Compruebe que la construcción pasa y que la optimización de imágenes sigue funcionando.
  • No servir SVG con el optimizador — deje dangerouslyAllowSVG desactivado y no lo active sin una necesidad demostrada.
  • Restringir images.remotePatterns — limite las fuentes remotas que acepta el optimizador a los hosts que usted controla.
  • Node como ejecutable PIE — el aviso de sharp cita este modo para reducir el riesgo de ejecución de código, y precisa que los binarios oficiales de Node.js no son PIE.
  • Reducir el daño posible — proceso sin permisos de root, contenedor de solo lectura (docker run --read-only), ningún secreto innecesario en el entorno.
  • Limitar el caudal delante de Next.js — una regla limit_req en nginx y una alerta de procesador frenan una denegación de servicio sin impedirla.

Ejecute npm audit tras actualizar

npm audit se apoya en la base de avisos de GitHub: cubre por tanto los identificadores GHSA, incluidos los que no tienen CVE. Ejecútelo tras subir la versión y añádalo a su CI para que el próximo aviso no dependa de una vigilancia manual.

Tras la corrección: vigilar y planificar la línea 15

Los avisos no publican ningún indicador de compromiso, así que no hay una firma precisa que buscar. Vigile las señales generales. Un proceso Node con el procesador saturado de forma sostenida apunta a la denegación de servicio. Reinicios inesperados, procesos hijos que la aplicación nunca lanza o conexiones salientes desde el usuario de la aplicación justifican una investigación. En los registros de nginx, grep "_next/image" access.log | grep -i svg muestra las peticiones de optimización que apuntan a archivos SVG.

En la línea 15, tenga cuidado con el calendario. Según endoflife.date, el soporte de seguridad de la línea 15 terminó el 21 de octubre de 2026, mientras que la página de política de Next.js no da fecha y fija dos años de Maintenance LTS. La 15.5.28 puede ser, por tanto, la última corrección de esa línea: planifique la migración a la 16.4.x. La 16.4.2, publicada al día siguiente de la 16.4.1, solo contiene según sus notas retroportes sin relación con estos avisos.

La documentación oficial

Anuncio de Next.js del 14 de octubre de 2026: https://nextjs.org/blog/nextjs-security-update-october-14-2026

Avisos de GitHub: https://github.com/vercel/next.js/security/advisories/GHSA-673q-mjm6-r5xr, https://github.com/vercel/next.js/security/advisories/GHSA-2464-fhr4-w9xw y https://github.com/vercel/next.js/security/advisories/GHSA-p3m5-59mp-jv5r

Aviso de sharp: https://github.com/lovell/sharp/security/advisories/GHSA-wq5f-xc86-pv6w

Nota de Netlify: https://www.netlify.com/changelog/2026-10-14-nextjs-react-security-vulnerabilities/

Política de soporte: https://nextjs.org/support-policy y https://endoflife.date/nextjs

Conserve el control de sus redespliegues

En un VPS ServOrbit.com tiene acceso root, una IPv4 dedicada y la elección del sistema operativo: Node, Docker y el momento de cada redespliegue quedan en sus manos. También existe una opción de administración del VPS; su alcance se describe en la página de la oferta.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva