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 cachedevuelve 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]ynpm 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ón | Estado | Qué hacer |
|---|---|---|
| 16.0.0 a 16.4.0 | Afectada por los tres avisos | Pasar a la 16.4.1 o a una 16.4.x más reciente |
| 16.4.1 y posteriores | Corrección incluida | Revisar sharp y el redespliegue real |
| 15.0.0 a 15.5.27 | Afectada por la RCE de imágenes y el DoS | Pasar a la 15.5.28 y planificar la migración a 16.4.x |
| 15.5.28 | Corrección incluida | Planificar la migración a 16.4.x |
| 13.x y 14.x | Afectada, sin corrección publicada para estas líneas | Migrar a la 15.5.28 o a la 16.4.1 |
| 10.0.0 a 12.x | Afectada por la RCE de imágenes, sin corrección publicada | Migrar 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
Leer las versiones de Next.js y de sharp
Desde la raíz del proyecto:
npm ls next sharp, opnpm why sharpcon pnpm. Para la versión exacta de Next.js:node -p "require('next/package.json').version". Unsharpinferior a 0.35.5 bajonexthay que corregirlo.Localizar Cache Components y use cache
grep -rn "cacheComponents" next.config.*y despuésgrep -rln "use cache" app src. SicacheComponentsno aparece, su aplicación no recorre el camino descrito en el aviso. Actualice igualmente: Vercel lo pide en todos los casos.Localizar el uso de SVG
grep -rn "dangerouslyAllowSVG\|remotePatterns" next.config.*yfind public -name "*.svg". Por defecto, la documentación indica que Next.js no optimiza las imágenes SVG y quedangerouslyAllowSVGlas permite. La ausencia de este ajuste es buena señal, no una prueba: el aviso no detalla el camino exacto.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.Reconocer la biblioteca C del sistema
ldd --versionmuestra 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
Validar la construcción
npm ci, despuésnpm run buildy luegonpm ls next sharp. Si la construcción falla por Node, compruebe la versión que exige la línea elegida.PM2
Construya en el directorio que ejecuta PM2 y después
pm2 reload <nombre>. Compruebe conpm2 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.Docker
Reconstruya sin caché:
docker build --no-cache -t miapp:corregida ., o al menos invalide la capanpm ci. Reinicie condocker 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.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.
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). Compruebesharpcondocker 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
dangerouslyAllowSVGdesactivado 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_reqen 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