Next.js fuera de ciclo: la RCE de imágenes SVG y tres comprobaciones
Si despliegas una app Next.js, revisa hoy su versión. El aviso de GitHub GHSA-2464-fhr4-w9xw, calificado como crítico con una puntuación CVSS v4 de 9.5, describe ejecución remota de código sin autenticación en la API Image Optimization cuando se usan archivos SVG y Next.js corre sobre Linux basado en glibc. No hace falta cuenta ni interacción del usuario. Las versiones corregidas son 15.5.28 y 16.4.1. Muchos freelancers de PHP y Node mantienen un front Next.js junto a su backend, así que esto merece diez minutos aunque Next no sea tu stack principal.
Qué dice el aviso
Según el aviso, un fallo relacionado con la memoria en una librería de origen que Next.js usa para optimizar imágenes puede llevar a ejecución remota de código. Los rangos afectados del paquete next son de 10.0.0 a 15.5.27 y de 16.0.0 a 16.4.0. La alternativa, si no puedes actualizar enseguida, es asegurarte de que la versión de sharp que usa Next.js sea 0.35.5 o posterior; una instalación limpia trae un sharp corregido, y actualizar Next.js a una versión parcheada hace que el gestor de paquetes descargue uno. El aviso remite a CVE-2026-96889 y da crédito a randomguy6407 y rafabd1.
El rastreador pwn.watch añade contexto que no pude contrastar yo mismo con los otros avisos. Según él, Vercel publicó 16.4.1 y 15.5.28 el 14 de octubre de 2026 fuera de su ciclo habitual, el fallo de SVG es un use-after-free en librsvg al que se llega a través de sharp, y esa misma publicación corrigió una segunda RCE crítica (GHSA-673q-mjm6-r5xr, apps con App Router y Cache Components) y una denegación de servicio de gravedad alta en Server Actions (GHSA-p3m5-59mp-jv5r). Fuera de ciclo significa que el fabricante decidió no esperar al calendario normal. Tómalo como una señal de urgencia.
Por qué un parser de imágenes puede ejecutar código
Esto es conocimiento general, no un detalle del aviso. El procesamiento de imágenes en Node suele ser código nativo: sharp es una capa de JavaScript sobre librerías en C como libvips y librsvg, que corren dentro de tu proceso Node. Un fallo de memoria ahí no queda contenido por la seguridad de JavaScript; es un fallo de tu aplicación, con tus variables de entorno y tu sistema de archivos. El SVG amplía la superficie, porque es un formato de documento con un parser completo detrás, no una cuadrícula de píxeles.
El aviso menciona Linux basado en glibc. No dice que las demás plataformas estén a salvo, así que si tu imagen es Alpine o cualquier otra cosa, actualiza igualmente en lugar de razonar hasta convencerte de que no te afecta.
Tres comprobaciones
npm ls next sharp
grep -n '"version"' node_modules/sharp/package.json
docker exec my-next-app id -u
Ejecuta las dos primeras dentro del proyecto y la tercera contra el contenedor en marcha, porque el lockfile de tu portátil y la imagen en producción pueden no coincidir. Luego arregla lo que salga:
npm install next@16.4.1 # or next@15.5.28 on the 15 line
npm ls sharp # expect 0.35.5 or later
docker build --pull -t my-next-app .
Dos hábitos, como práctica general y no como algo que exija el aviso: limita lo que el optimizador puede descargar con images.remotePatterns en tu config de Next, para que solo procese imágenes de hosts que tú nombras, y ejecuta la app con un usuario que no sea root dentro de su contenedor. Ninguno sustituye a la actualización. Siguiente paso: pasa las tres comprobaciones en cada app Next.js que despliegues, incluido el proyecto de ese cliente que no tocas desde la primavera.
Notas de los lectores