
CVE-2026-5281 (Chrome Dawn WebGPU UAF): анализ, лабораторные инструменты валидации и воспроизводимая среда для уязвимых и пропатченных сборок.
Эта уязвимость затронула одного из клиентов, которым мы оказываем услуги. Этот репозиторий — наш вклад в оригинальное исследование: централизованная отправная точка для группы, чтобы, если подобная уязвимость, затрагивающая этот компонент, появится снова, у нас уже была готовая основа. Он объединяет теорию, стоящую за ошибкой, документированное резюме результатов оригинального исследователя и набор практических инструментов для проверки подверженности в лабораторных условиях.
Примечание: я хотел бы поделиться большей частью этого исследования, но из-за ограничений компании не могу раскрывать его дальше. Всё, что включено сюда, проверено и не нарушает никаких соглашений, которым я подчинён. Поэтому репозиторий заархивирован в текущем состоянии.
1 апреля 2026 года Google выпустила обновление безопасности Chrome, устраняющее 21 уязвимость, одна из которых, CVE-2026-5281, уже активно эксплуатировалась в реальных атаках на момент раскрытия. Три дня спустя CISA добавила её в каталог Known Exploited Vulnerabilities и издала обязательную оперативную директиву, требующую от федеральных агентств установить исправление. К тому моменту она уже затронула нас.
Этот репозиторий существует по одной причине: чтобы в следующий раз, когда случится что-то подобное, у нас была отправная точка, а не необходимость начинать с нуля. Он объединяет:
Когда хочешь понять, почему существует уязвимость, нужно начать с того, для чего была создана система и на каких допущениях она построена.
WebGPU предоставляет API для выполнения операций, таких как рендеринг и вычисления, на графическом процессоре. WebGPU не является попыткой предоставить OpenGL или OpenGL ES (встраиваемые системы). Это новый API, построенный на идеях современных API, таких как Direct3D 12, Metal и Vulkan.
WebGPU — современная замена WebGL, старого GPU API, который браузеры использовали годами. Ключевое отличие в том, что WebGPU изначально проектировался с упором на безопасность и явное управление ресурсами. Вы сами объявляете жизненный цикл каждого буфера, текстуры и конвейера. Браузер выступает в роли слоя валидации между вашим JavaScript и аппаратным обеспечением GPU.
Объекты, находящиеся в центре этой уязвимости, в порядке создания:``` 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
Правило, которое здесь важно: каждый объект принадлежит GPUDevice. Уничтожение буфера, пока устройство всё ещё имеет выполняющиеся команды, которые ссылаются на него, прямо запрещено спецификацией. Реализация Dawn должна обнаруживать и отклонять такие действия. CVE-2026-5281 — это случай, когда она этого не сделала.
---
---
---
<div id='whatisdawn'/>
## ***⚙️ Что такое Dawn?***
- **[Dawn — реализация WebGPU с открытым исходным кодом](https://dawn.googlesource.com/dawn)**
> Dawn — это открытая и кроссплатформенная реализация разрабатываемого стандарта WebGPU. Она предоставляет нативный C++ API, который повторяет WebGPU IDL с некоторыми расширениями.
Dawn — это C++-библиотека внутри Chrome, которая преобразует вызовы WebGPU JavaScript в нативные для платформы команды GPU. В Windows она использует D3D12, в macOS — Metal, а в Linux — Vulkan. Она находится между JavaScript-движком Chrome и драйвером оборудования и отвечает за четыре вещи: проверку вызовов API, сериализацию команд, отслеживание времени жизни объектов и возврат ошибок в JavaScript.
CVE-2026-5281 находится в части отслеживания времени жизни. А именно, в том, как долго Dawn держит объекты GPU-буферов в живых, пока команды, ссылающиеся на них, всё ещё ожидают выполнения в аппаратной очереди.```
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