Front-end validation exempts a record the backend still uses
A front-end validator ignores or exempts a binding, count, or identity that the backend still assigns a slot, index, or identity to — so the two layers disagree and the backend indexes out of range, serves the wrong length, or trusts a spoofed record.
Mechanism
WebGPU/service front-end validation ignores a ShaderStage::None binding, doesn’t cap a binding count, or doesn’t check an identity collision. The backend, unaware of the exemption, still assigns that binding a GL SSBO index or an arrayLength-from-uniform slot, or trusts the identity.
The layers now disagree: a binding beyond GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS is bound, one buffer’s arrayLength is served another’s larger bound size (defeating the robustness clamp), a virtual capture device shadows a real camera, or an isochronous transfer is created against an unclaimed endpoint. The result is an OOB read/write or a spoofed resource in the GPU/device process.
Fix shape
None-visibility bindings in slot assignment and bind-group application too), or add the missing collision / range / claimed-interface check so both layers agree on the same set of records.CVEs in this pattern
8 components · WebGL, Dawn, Tint, WebRTC, Video Capture, USB, WebML, WebKit| CVE | What | Component | Vendor | Severity | Month | |
|---|---|---|---|---|---|---|
| CVE-2026-87470 | LogicError in Tint | Tint | chrome | Medium | 2026-09 | 🔧 |
| CVE-2026-87527 | OOB in WebGL | WebGL | chrome | Critical | 2026-09 | 🔧 |
| CVE-2026-87579 | OOB in WebRTC | WebRTC | chrome | Medium | 2026-09 | 🔧 |
| CVE-2026-14420 | OOB in Daw | Dawn | chrome | Critical | 2026-06 | 🔧 |
| CVE-2026-13942 | InputValidation in Video Capture | Video Capture | chrome | Medium | 2026-06 | 🔧 |
| CVE-2026-13846 | UAF in USB | USB | chrome | High | 2026-06 | 🔧 |
| CVE-2026-9889 | OOB in Daw | Dawn | chrome | Critical | 2026-05 | 🔧 |
| CVE-2026-3914 | IntegerOverflow in WebML | WebML | chrome | High | 2026-03 | 🔧 |
| CVE-2026-4675 | OOB in WebGL | WebGL | chrome | High | 2026-03 | 🔧 |
| CVE-2025-14174 | LogicError in WebKit | WebKit | webkit | Medium | 2025-12 |
Hunt for siblings
For each place the front-end ignores/skips a record, find the backend loop that assigns it a slot/index/identity and confirm the same skip is applied.
# Front-end skips vs backend assignment loops — compare the two:
rg -n 'ShaderStage::None|visibility ==|continue; // skip|GetBindingIndexInfo|ssboIndex' \
src/dawn/native
Mitigations that would catch this class
- A single shared predicate for “is this record in scope”, used by both validation and backend
- Fuzzing layouts with exempt/duplicate/over-limit records (None-visibility, colliding ids, >max counts)