OOB 10 CVEs 9 mapped CWE-20CWE-787 2025-12 → 2026-09

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.

Invariant
Every record the front-end validator exempts, ignores, or fails to bound must be skipped or bounded identically by the backend that assigns slots, indices, or identities — the two layers must agree.

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

Mirror the front-end’s exemption in the backend (skip 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
CVEWhatComponentVendorSeverityMonth
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.

grep / ripgrep
# 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)