
Структурированный репозиторий исследования уязвимостей для дефекта CWE-20 в Chrome Dawn WebGPU: первопричина, diff патча, статическая проверка, оценка критичности и уроки безопасности.
Это репозиторий рабочего проекта. Исследование, анализ, работа и отчёты ведутся в одном репозитории (D088/D091).
Этот файл — входной документ репозитория и доски. Полный текст правил для папок и артефактов — см.
docs/conventions.md. Тело документа (статус, выводы, ссылки) обновляется при повышении пункта отчёта (report). Агенты исследования, анализа и работы не изменяют корневой README.
Одной строкой: реализация WebGPU в Google Chrome — Dawn — при создании YCbCr-сэмплеров не проверяла ограничения параметров, требуемые спецификацией Vulkan, из-за чего атакующий, уже захвативший процесс рендерера, мог провести нарушающие спецификацию значения вплоть до GPU-процесса (CWE-20). Исправление добавляет два слоя: дополнительную проверку и принудительное применение ограничений в бэкенде; оно вошло в Chrome 150.0.7871.47.
Подробные учебные документы — в docs/cve-2026-13934/: они написаны так,
чтобы причину, исправление, доказательства и уроки можно было проследить без воспроизведения.
Объект: CVE-2026-13934 — Google Chrome / Dawn (реализация WebGPU), тип уязвимости
(Improper Input Validation). CVE опубликована 2026-06-30, версия исправления .
Источник: §1, §2.
Этапы работ — четыре направления: исследование (открытые источники) · исследование (патч/diff) · анализ (воспроизведение/доказательства) · отчёт (учебное обобщение); все четыре направления завершены.
| Направление | Статус | Полученный результат |
|---|---|---|
Исследование открытых источников и области воздействия (research/…-6bacf7/) | Завершено (4 документа) | Метаданные CVE/NVD/уведомления вендора, CWE/CVSS, границы затронутых версий, решения по критериям |
Сравнение патча/diff (research/…-diff-92f928/) | Завершено (4 документа) | Идентифицирован исправляющий коммит, три уровня эталонов сравнения, дельта изменённых файлов и логики, оценка обхода/остаточного риска |
Воспроизведение и доказательства (cases/…-4d10a8/) | Завершено (6 документов) — выполнено статическое сравнение, наблюдений на уровне выполнения нет | Структура причины, реализуемость и ограничения, результаты статического сравнения двух ревизий |
Учебный отчёт (reports/…-8400bc/) | Завершено (4 документа) | Оглавление и карта цитирований, черновик корневого README, список документов docs/ |
Что подтверждено
150.0.7871.47 и исправляющий коммит (Dawn 43055cbe…), три изменённых файла и причины изменений.cases/20260804-cve-2026-13934-4d10a8/report.md §3).Что пока не подтверждено (мы не заполняли это предположениями)
VkSampler
и сообщения VUID слоя проверки Vulkan — это ожидаемые значения, основанные на анализе кода
(cases/…-4d10a8/report.md §4).150.0.7871.46, .47, .63 фиксируют одну
и ту же ревизию Dawn, тогда как в CVE указано «prior to .47». Обоснование такой записи
мы не подтвердили.src.513006636 с описанием причины находится
в состоянии ограниченного доступа.Серьёзность — различается в зависимости от источника. Собственная оценка вендора (Chromium) —
Medium, CVSS v3.1 от CISA-ADP — 9.6 CRITICAL (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H),
а собственной оценки NVD нет. Мы не выносим вердикт, какая из них верна, и приводим обе —
интерпретация в docs/cve-2026-13934/overview.md.
В этом репозитории нет развёрнутых сервисов (API, бэкендов, баз данных и т. п.). Все артефакты — это документы.
Спецификация Vulkan требует для сэмплеров с преобразованием YCbCr, чтобы режимы адресации
по всем осям были CLAMP_TO_EDGE, а анизотропная фильтрация (anisotropy) была отключена
(VUID-VkSamplerCreateInfo-addressModeU-01646). До патча Dawn не проверяла это ограничение,
поэтому параметры, нарушающие спецификацию, могли пройти проверку и дойти до создания VkSampler.
Ключевой момент — модель угроз. В публичном описании предполагается, что атакующий уже захватил процесс рендерера («a remote attacker who had compromised the renderer process»). Находясь там, он может напрямую манипулировать межпроцессными командами, а не идти обычным путём веб-API, поэтому проверки на стороне рендерера находятся за пределами доверительной границы. А Vulkan-бэкенд Dawn работает в GPU-процессе с более высокими привилегиями, чем рендерер, — именно поэтому этот дефект становится поверхностью для выхода из песочницы.
Источник: cases/20260804-cve-2026-13934-4d10a8/root_cause.md §2 ·
подробнее: docs/cve-2026-13934/root-cause-and-fix.md
Исправляющий коммит — Dawn 43055cbeadddca41a9c973a809f859d641077b2f
(«Add YCbCr sampler validation», 2026-05-27, Bug: 513006636) — изменяет три файла.
| Изменение | Файл | Характер |
|---|---|---|
Добавлены 4 проверки режима адресации и maxAnisotropy для дескриптора YCbCr | src/dawn/native/Sampler.cpp | Проверка на фронтенде — отклонение нарушающих запросов |
| Перезапись режима адресации и anisotropy значениями, соответствующими спецификации, на путях с преобразованием YCbCr | src/dawn/native/vulkan/SamplerVk.cpp | Принудительное применение в бэкенде — нарушающее состояние не создаётся при любом входе |
Добавлен регрессионный тест YCbCrSamplerRequiredParams | src/dawn/tests/unittests/validation/YCbCrValidationTests.cpp | Предотвращение рецидива |
Именно эта структура — ядро данной CVE. Поскольку предполагается, что рендерер уже скомпрометирован, одной проверки недостаточно; фактической линией блокировки становится второй слой, который принудительно применяет значения на стороне с более высокими привилегиями. Если свести это к фразе «проверка входных данных отсутствовала, поэтому её добавили», будет упущена суть проектирования защиты.
Объём изменений — 53 строки добавлено, 0 удалено — это патч, который дополняет недостающие проверки, не переделывая существующую логику.
Источник: research/20260804-cve-2026-13934-diff-92f928/report.md §3, §4 ·
cases/20260804-cve-2026-13934-4d10a8/patch_diff.md §4
Мы сопоставили исходный код двух снимков Dawn, которые реально зафиксировал Chrome.
| Объект наблюдения | Уязвимая сторона 54b4153c… | Исправленная сторона 01249a97… | Уровень подтверждения |
|---|---|---|---|
Число DAWN_INVALID_IF в блоке проверки YCbCr | 2 (гейт функции + неопределённый формат) | 6 | Измерено |
| Принудительное применение соответствующих спецификации значений в Vulkan-бэкенде | Нет (вплоть до связывания pNext) | Есть | Измерено |
Регрессионный тест YCbCrSamplerRequiredParams | Нет (TEST_F 23 шт.) | Есть (24 шт.) | Измерено |
| device error при нарушающем запросе | Не возникает | Возникает | Ожидаемо (на основе анализа кода) |
Что здесь выявилось: в уязвимой стороне ветка YCbCr и 2 проверки уже были. Дефект заключался не в отсутствии пути, а в отсутствии проверки условного ограничения внутри ветки.
Поскольку сборка и запуск не выполнялись, два пункта ниже — это ожидаемые значения на основе анализа кода, а не фактические наблюдения.
Источник: cases/20260804-cve-2026-13934-4d10a8/report.md §1–§4 ·
подробнее: docs/cve-2026-13934/evidence.md
С точки зрения проектирования безопасности
С точки зрения методологии исследования
DEPS → поиск номера бага в журнале коммитов компонента. Процедура:
research/20260804-cve-2026-13934-diff-92f928/sources.md §6.Подробнее: docs/cve-2026-13934/lessons.md
docs/)| Документ | Содержание |
|---|---|
docs/cve-2026-13934/overview.md | Обзор, контекст, резюме выводов, интерпретация серьёзности |
docs/cve-2026-13934/root-cause-and-fix.md | Трёхуровневая структура причины и два слоя патча |
docs/cve-2026-13934/evidence.md | Наблюдения статического сравнения, путь наблюдения и его ограничения |
docs/cve-2026-13934/lessons.md | Уроки по проектированию безопасности и методологии исследования |
docs/cve-2026-13934/limits-and-sources.md | Ограничения, неподтверждённые пункты и список источников |
docs/conventions.md | Правила для папок и артефактов (полный текст) |
research/20260804-cve-2026-13934-6bacf7/)| Документ | Содержание |
|---|---|
brief.md | Исходный текст запроса, критерии C1–C6, определение официальных источников |
sources.md | Метаданные CVE/NVD/уведомления вендора, CWE/CVSS, противоречия между источниками |
report.md | Оценка влияния, CVSS и условий уязвимости, решения по C1–C6, интерпретация серьёзности |
followups.json | Предложения по дальнейшим шагам |
research/20260804-cve-2026-13934-diff-92f928/)| Документ | Содержание |
|---|---|
brief.md | Цель, критерии D1–D6, эталонное патч-дерево |
sources.md | Пара «исправляющий коммит — эталон сравнения», DEPS/Gerrit, процедура отслеживания |
report.md | Изменённые файлы, дельта логики, оценка обхода/остаточного риска, D1–D6 |
followups.json | Предложения по дальнейшим шагам |
cases/20260804-cve-2026-13934-4d10a8/)| Документ | Содержание |
|---|---|
intake.md | Метаданные приёмки, объект и диапазон версий, условия начала, требования изоляции, критерии J1–J4 |
patch_diff.md | Изменения и причины изменений, показатели наблюдения до и после патча |
root_cause.md | Трёхуровневая структура основной причины, предпосылки P1–P7, доверительные границы |
exploitability.md | Разграничение возможного/невозможного доказательства, пути наблюдения, ограничения, границы предотвращения распространения |
report.md | Сводка проверки воспроизведения — наблюдения статического сравнения, различия до/после, решения по J1–J4 |
followups.json | Предложения по дальнейшим шагам |
reports/20260804-cve-2026-13934-8400bc/)| Документ | Содержание |
|---|---|
outline.md | Аудитория, оглавление, карта цитирования источников (S1–S15) |
README.md | Черновик, на основе которого повышен этот корневой README |
docs-index.md | Список и сводка документов docs/, примечания по повышению |
followups.json | Предложения по дальнейшим шагам |
https://www.cve.org/CVERecord?id=CVE-2026-13934https://nvd.nist.gov/vuln/detail/CVE-2026-13934https://dawn.googlesource.com/dawn/+/43055cbeadddca41a9c973a809f859d641077b2fПолный список, даты публикации и идентификаторы — в файлах sources.md обеих линий исследования.
| Тип | Корень |
|---|---|
| Исследование | research/ |
| Анализ | cases/ |
| Работа | work/ |
| Отчёт | reports/ |
Периодический сбор: research/topics/<topic>/
research/ · cases/ · work/ · reports/ · docs/ · .laurelin/ · .github/docs/conventions.md