BookinglyTech News
Ciberseguridad

Next.js 16.3.6 tapa una ejecución de código remoto a través de ImageResponse

Vercel parchea una vulnerabilidad crítica, 9,5 de CVSS, que permite ejecutar código en el servidor si la aplicación mete valores controlados por el atacante en las imágenes que genera.

3 min de lecturaThe Hacker News0 vistas

Next.js arrastra desde hace medio año una vulnerabilidad crítica que permite ejecutar código en el servidor a través de ImageResponse, la función que genera las imágenes de previsualización para Open Graph y redes sociales. Vercel la cerró el 22 de septiembre en la versión 16.3.6, y está registrada como CVE-2026-94545 con una puntuación CVSS de 9,5.

El fallo solo se da en un escenario concreto: la aplicación pasa a la imagen valores que controla el atacante, como texto leído de la URL de la petición. Y solo cuando ImageResponse corre sobre el runtime de Node.js, que es el que Next.js usa por defecto. La variante Edge no está afectada, ni tampoco Next.js 15.

Qué está roto por debajo

ImageResponse se apoya en Satori, una librería de Vercel que traduce la maquetación de la imagen a SVG antes de generar el PNG final. El agujero está ahí: según el aviso de Satori, ciertos valores llegaban a su salida SVG sin el escapado correcto, de modo que un valor fabricado a medida se podía leer como código SVG en lugar de como texto plano. En el contexto de Next.js, esos valores pueden alcanzar vulnerabilidades en otras librerías de las que depende el framework y acabar en ejecución de código. Vercel no ha dicho cuáles son esas librerías.

El propio aviso de Vercel define como afectadas las apps que meten valores controlados por el atacante en contenido, atributos o estilos SVG durante la generación de la imagen. Su ejemplo coge un valor de la URL y lo coloca dentro de un elemento title de SVG. Lo que no aclara es si el texto en elementos normales, como un encabezado dentro de un div, cuenta igual. Toca revisar el código.

Para localizar los puntos afectados hay que buscar ImageResponse importado desde next/og, típicamente en route handlers y en archivos opengraph-image. Los route handlers generan la imagen cuando llega una petición; un archivo opengraph-image puede hacerlo en tiempo de compilación o en cada petición.

Cómo se tapa y qué chirría

El parche es 16.3.6, la única versión corregida, que se instala con npm install next@16.3.6. A fecha del 23 de septiembre, el registro de npm no listaba ninguna release arreglada de la rama 16.2, así que quien esté en esa línea tiene que saltar a 16.3.6. Next.js 15.5.26 añade un endurecimiento extra para next/og en la rama 15.5. Si actualizar tiene que esperar, el apaño que propone el aviso es mantener los valores controlados por el atacante fuera del contenido, los atributos y los estilos SVG que renderiza ImageResponse en Node.js. El aviso no plantea pasarse a la variante Edge, que además la documentación de Next.js marca como deprecada.

Hay dos cosas que no cuadran del todo. Satori puntúa el mismo CVE como moderado, 5,3, y sostiene que el impacto depende de cómo se use su salida SVG; quien la utilice directamente debería subir a 0.33.5. Y la detección automática no ayuda: en las comprobaciones del 23 de septiembre, npm audit no marcaba Next.js 16.3.5 como versión afectada, el aviso tampoco aparecía aún en la GitHub Advisory Database y no había registro publicado del CVE. Merece la pena mirar la versión a mano. Detalle fino: Satori va empaquetado dentro del paquete de Next.js, así que un lockfile no lo lista como dependencia del framework.

No había exploits públicos ni informes de ataques en el momento de escribir esto. Vercel no dice si las aplicaciones alojadas en su plataforma están protegidas, algo que sí afirmó en los dos fallos críticos de Next.js corregidos en agosto, ni ofrece forma de comprobar si una ruta afectada fue explotada antes del parche. Las versiones vulnerables circulan desde el 18 de marzo, cuando salió Next.js 16.2.