
CVE-2026-5281 (Chrome Dawn WebGPU UAF): análisis, herramientas de validación de laboratorio y entorno reproducible para builds vulnerables frente a parcheados.
Esta vulnerabilidad afectó a uno de los clientes a los que prestamos servicios. Este repositorio es nuestra contribución a la investigación original: un punto de partida centralizado para el grupo, de modo que si vuelve a aparecer una vulnerabilidad similar que afecte a este componente, ya tengamos el trabajo base hecho. Reúne la teoría detrás del fallo, un resumen documentado de los hallazgos del investigador original y un conjunto de herramientas prácticas para verificar la exposición en un entorno de laboratorio.
Nota: Me habría gustado compartir más de esta investigación, pero debido a restricciones de la empresa no puedo divulgarla más. Todo lo incluido aquí ha sido revisado y no viola ningún acuerdo al que esté sujeto. Por lo tanto, el repositorio queda archivado en su estado actual.
El 1 de abril de 2026, Google publicó una actualización de seguridad de Chrome que abordaba 21 vulnerabilidades, una de las cuales, CVE-2026-5281, ya estaba siendo explotada activamente en el mundo real en el momento de la divulgación. Tres días después, CISA la añadió al catálogo de Vulnerabilidades Explotadas Conocidas y emitió una directiva operativa vinculante que exigía a las agencias federales aplicar el parche. Para entonces, ya nos había afectado.
Este repositorio existe por una única razón: para que la próxima vez que ocurra algo así, tengamos un punto de partida en lugar de empezar de cero. Reúne:
Cuando quieres entender por qué existe una vulnerabilidad, empiezas por aquello para lo que se construyó el sistema y por los supuestos sobre los que se diseñó.
WebGPU expone una API para realizar operaciones, como renderizado y cómputo, en una Unidad de Procesamiento Gráfico. WebGPU no es un intento de exponer OpenGL u OpenGL ES (Sistemas Embebidos). Es una API nueva construida sobre las ideas de APIs modernas como Direct3D 12, Metal y Vulkan.
WebGPU es el reemplazo moderno de WebGL, la antigua API de GPU que los navegadores han usado durante años. La diferencia clave es que WebGPU fue diseñada desde cero para la seguridad y la gestión explícita de recursos. Tú declaras el ciclo de vida de cada buffer, textura y pipeline. El navegador actúa como una capa de validación entre tu JavaScript y el hardware de la GPU.
Los objetos en el centro de esta vulnerabilidad, en orden de creación:``` GPUAdapter ← represents a physical GPU or software fallback └─ GPUDevice ← your logical connection to the adapter; owns everything ├─ GPUBuffer ← a chunk of GPU-accessible memory ├─ GPUShaderModule ← a compiled WGSL shader program ├─ GPUComputePipeline ← a shader wired to a pipeline layout ├─ GPUBindGroup ← binds buffers as inputs to a pipeline ├─ GPUCommandEncoder ← records a sequence of GPU commands └─ GPUQueue ← submits recorded commands to hardware
La regla que importa aquí es: cada objeto es propiedad del GPUDevice. Destruir un buffer mientras el dispositivo aún tiene comandos en vuelo que lo referencian es explícitamente ilegal según la especificación. Se supone que la implementación de Dawn debe detectar y rechazar eso. CVE-2026-5281 es un caso en el que no lo hizo.
---
---
---
<div id='whatisdawn'/>
## ***⚙️ ¿Qué es Dawn?***
- **[Dawn - Implementación WebGPU de Código Abierto](https://dawn.googlesource.com/dawn)**
> Dawn es una implementación de código abierto y multiplataforma del estándar WebGPU en desarrollo. Expone una API nativa de C++ que refleja el IDL de WebGPU con algunas extensiones.
Dawn es la biblioteca de C++ dentro de Chrome que traduce las llamadas de JavaScript de WebGPU en comandos GPU nativos de la plataforma. En Windows se dirige a D3D12, en macOS a Metal y en Linux a Vulkan. Se sitúa entre el motor de JavaScript de Chrome y el controlador del hardware, y es responsable de cuatro cosas: validar las llamadas a la API, serializar comandos, rastrear los tiempos de vida de los objetos y devolver errores a JavaScript.
CVE-2026-5281 vive en la parte del rastreo de tiempos de vida. Específicamente, en cuánto tiempo Dawn mantiene vivos los objetos de buffer de GPU mientras los comandos que los referencian aún están pendientes de ejecución en la cola del hardware.```
JavaScript (V8)
│ WebGPU API calls
▼
Dawn (C++) - validates, serializes, tracks lifetimes, reports errors
│
▼
D3D12 (Windows) - Metal (macOS) - Vulkan (Linux)
│
▼
GPU hardware driver
│
▼
Physical GPU - shader cores, VRAM