Vulnerabilidad en zephyr de zephyrproject (CVE-2026-13212)
Gravedad CVSS v3.1:
ALTA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
24/08/2026
Última modificación:
12/10/2026
Descripción
El controlador virtio de Zephyr no valida el ID de cabecera de la cadena de descriptores que el dispositivo virtio escribe en el anillo de usados. En virtio_isr() (drivers/virtio/virtio_common.c), el ID vq -> used -> ring[idx].id escrito por el dispositivo se utiliza directamente como un índice en vq -> recv_cbs[] y vq -> desc[], los cuales están ambos asignados con exactamente vq -> num entradas. recv_cbs[] contiene entradas de callback {cb, opaque}, y el puntero de callback indexado se invoca entonces como cbe.cb(cbe.opaque, used_len).<br />
<br />
Debido a que el ID se consume como un valor de 16 bits sin verificación de límites, un backend virtio malicioso o comprometido (un hipervisor no confiable, o un dispositivo virtio de hardware/procesador par no confiable en un transporte PCI o MMIO) puede suministrar un ID mucho más allá de vq -> num. Esto causa una lectura fuera de límites de un par {puntero de función, argumento} de la memoria del heap más allá de recv_cbs[], después de lo cual el controlador llama a ese puntero con forma de atacante en el contexto de interrupción del invitado. No se requieren privilegios de invitado ni interacción del usuario; el backend lo activa escribiendo en el anillo de usados compartido y elevando la interrupción de la cola.<br />
<br />
El resultado es una llamada a puntero de función arbitraria / influenciada por el atacante en el invitado Zephyr, es decir, una primitiva de secuestro de flujo de control que puede conducir a la ejecución de código o, como mínimo, a un fallo fiable. La solución rechaza cualquier ID de anillo de usados >= vq -> num antes de indexar recv_cbs[]/desc[] o invocar el callback. Esto afecta a las compilaciones que utilizan CONFIG_VIRTIO con el transporte PCI o MMIO.
Impacto
Puntuación base 3.x
8.80
Gravedad 3.x
ALTA


