CVE-2026-120215 Denegación de servicio en @fastify/cors con el hook onSend en un preflight CORS
Con la opción no predeterminada onSend, el plugin llama a reply.send dentro del hook onSend y reingresa al pipeline de envío, provocando un ERR_HTTP_HEADERS_SENT no capturado que puede terminar el proceso de Node.js. Un cliente remoto no autenticado puede desencadenarlo con una sola solicitud preflight, con impacto solo en disponibilidad y requiriendo esa configuración. Corregido en @fastify/cors 11.4.0.
CVSS 3.1
- Probabilidad de explotación · EPSS del 09/110,3 % · percentil 21
- Explotada activamenteNo confirmada
- Exploit públicoNo conocido
Afectados
@fastify/cors
desde 8.2.0 hasta antes de 11.4.0
Qué hacer
- Verificá si usás @fastify/cors y en qué versión.
- Actualizá a la versión corregida que indique el fabricante en su aviso o aplicá su mitigación.
- Revisá registros y accesos de los sistemas expuestos para descartar un uso previo.
Calculadora CVSS
CVSS 3.1 · 3.7 BAJA
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L
- Vector de ataqueRed
- Complejidad del ataqueAlta
- Privilegios requeridosNinguno
- Interacción del usuarioNinguna
- AlcanceSin cambio
- ConfidencialidadNinguna
- IntegridadNinguna
- DisponibilidadBaja
Descripción original
@fastify/cors is the CORS plugin for the Fastify web framework. In versions 8.2.0 through 11.3.x, an application that registers the plugin with the non-default onSend hook option crashes on a CORS preflight. On an OPTIONS request that carries the Origin and Access-Control-Request-Method headers, the plugin calls reply.send from inside the onSend hook and re-enters the send pipeline, so a second write of the response headers throws an uncaught ERR_HTTP_HEADERS_SENT that can terminate the Node.js process when no process-level handler is installed. An unauthenticated remote client can trigger this with a single preflight request, so the impact is availability only, and exploitation requires the non-default onSend configuration. The issue is fixed in @fastify/cors 11.4.0, where onSend is no longer an accepted hook value and registration fails with a clear error instead of crashing at request time, and users should upgrade to 11.4.0 or later. As a workaround, use any other hook such as the default onRequest, or set preflight to false.
Referencias (2)
Resumen traducido automáticamente de la descripción original. Fuente: Nureq Monitor. Cómo funciona.