
Дифференциальный стенд обнаружения для CVE-2026-76036 — переполнения буфера кучи в Dawn WebGPU в Chrome на Android. Проверяет уязвимые комбинации текстур глубины/трафарета и отслеживает сбои GPU-процесса для классификации подверженности браузера и GPU.
Критическое (CVSS 9.6, CWE-122) переполнение буфера в куче в Dawn, реализации WebGPU в Chromium, в Google Chrome на Android до версии 151.0.7922.169 (стабильная версия 151, выпущена 2026-08-18).
Корневая причина, согласно коммиту-исправлению Dawn 178fb7048ad3: проприетарный Vulkan-драйвер PowerVR неверно вычисляет размеры mip-уровней для depth/stencil-текстур с размерами, не являющимися степенями двойки (NPOT). Веб-страница, вызывающая device.createTexture() с depth/stencil-форматом, размерами NPOT и mipLevelCount > 1 на затронутом оборудовании, повреждает кучу GPU-процесса. NVD: «позволяет удалённому атакующему выполнить произвольный код за пределами песочницы с помощью специально созданной HTML-страницы».
Точный триггер находится в непубличном баг-репорте Chromium 540087398. Поэтому в этом репозитории представлен дифференциальный стенд обнаружения, а не эксплойт: он перебирает комбинацию, указанную в публичном коммите с исправлением, и классифицирует ваш браузер+GPU.
| Файл | Назначение |
|---|---|
poc.html | Матрица WebGPU-проб — все пять depth/stencil-форматов × размеры NPOT (включая форму 259×127 из подавленного end2end-теста Dawn) × количество mip-уровней; каждая проба в собственной области ошибок валидации |
crash_monitor.py | Вспомогательный скрипт для adb — сверяет установленную версию Chrome с порогом исправления 151.0.7922.169 и отслеживает logcat на предмет фатальных сигналов GPU-процесса |
# 1) serve the harness (WebGPU needs a secure context: localhost or HTTPS)
$ python3 -m http.server 8000
# 2) on the device (or desktop Chrome), open:
# http://<your-host>:8000/poc.html (localhost/http works; remote hosts need HTTPS)
# 3) from a host with adb, watch the GPU process:
$ python3 crash_monitor.py
[*] com.android.chrome versionName=151.0.7922.83
[!] VULNERABLE — below the 151.0.7922.169 fix floor (CVE-2026-76036)
[*] logcat: live tail — Ctrl-C to stop. Load poc.html on the device now.
poc.htmlСтенд ограничивает каждую пробу по времени (~150 мс), чтобы лабораторное устройство оставалось живым достаточно долго для вынесения вердикта, а не падало на первой же отличающейся пробе.
Запускайте только на устройствах и браузерах, которыми вы владеете или которые администрируете. На незапатченном затронутом оборудовании базовая ошибка является реальным триггером повреждения памяти; стенд намеренно избегает любых попыток придать этому повреждению какую-либо форму.
| Наблюдение | Значение |
|---|
| Ошибка валидации, содержащая "disallowed on this device due to a driver bug" | Исправление активно + GPU относится к затронутому классу PowerVR (до патча устройство было достижимо для атаки; подтвердите версию ≥ 151.0.7922.169) |
| Комбинации принимаются, такой ошибки нет | GPU вне затронутого класса Imagination — через этот путь не достижим |
device.lost срабатывает в середине перебора / Fatal signal GPU-процесса в logcat на Chrome < 151.0.7922.169 | Поведение до патча, которое призвана устранить эта CVE, — немедленно обновитесь |
navigator.gpu не определён | WebGPU недоступен — поверхность атаки закрыта |