
Repositório estruturado de pesquisa de vulnerabilidades para uma falha CWE-20 do Chrome Dawn WebGPU: causa raiz, diff do patch, verificação estática, revisão de gravidade e lições de segurança.
Este é o repositório do projeto de trabalho. Ele cobre investigação, análise, trabalho e relatórios em um único repositório (D088/D091).
Este arquivo é o documento de entrada do repositório/board. Para o texto completo das convenções de pastas·artefatos, consulte
docs/conventions.md. O corpo do texto (status·conclusões·links) é atualizado quando o item relatório (report) é promovido. Os agentes de investigação·análise·trabalho não modificam o README raiz.
Resumo em uma linha: a implementação do WebGPU do Google Chrome, o Dawn, não verificava as restrições de parâmetros exigidas pela especificação Vulkan ao criar amostradores YCbCr, permitindo que um atacante que já tivesse comprometido o processo renderer enviasse valores fora da especificação até o processo GPU (CWE-20). A correção adicionou duas camadas — validação adicional e imposição no backend — e foi incorporada no Chrome 150.0.7871.47.
Os documentos de aprendizado detalhados estão em docs/cve-2026-13934/ — escritos para que se possa
acompanhar causa·correção·evidências·lições sem reprodução.
Alvo: CVE-2026-13934 — Google Chrome / Dawn (implementação do WebGPU), tipo de vulnerabilidade CWE-20 (Improper Input Validation). CVE publicado em 2026-06-30, versão corrigida 150.0.7871.47. Base: research/20260804-cve-2026-13934-6bacf7/sources.md §1·§2.
Andamento — conduzido em quatro linhas: investigação (informações públicas) · investigação (patch·diff) · análise (reprodução·evidências) · relatório (consolidação do aprendizado); todas as quatro linhas foram concluídas.
O que foi confirmado
150.0.7871.47 e commit de correção (Dawn 43055cbe…), os 3 arquivos alterados e o motivo das alterações.cases/20260804-cve-2026-13934-4d10a8/report.md §3).O que ainda não foi confirmado (não preenchemos com suposições)
VkSampler gerado e os relatórios de VUID da camada de validação Vulkan são valores esperados com base no código (cases/…-4d10a8/report.md §4).150.0.7871.46·.47·.63 fixam todas a mesma revisão do Dawn, mas o CVE o descreve como "prior to .47". Não conseguimos confirmar a base dessa notação.src do Chromium.513006636 do Chromium, que contém a causa, está com acesso restrito.Gravidade — varia conforme a fonte. A classificação do próprio fornecedor (Chromium) é Medium, o CVSS v3.1 do CISA-ADP é 9.6 CRITICAL (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H) e não há avaliação própria da NVD. Apresentamos ambas sem julgar qual está correta — a interpretação está em docs/cve-2026-13934/overview.md.
Este repositório não contém serviços implantados (API·backend·banco de dados etc.). Todos os artefatos são documentos.
A especificação Vulkan exige que, para amostradores com conversão YCbCr, os modos de endereçamento de todos os eixos sejam CLAMP_TO_EDGE e a filtragem anisotrópica (anisotropy) esteja desativada (VUID-VkSamplerCreateInfo-addressModeU-01646). Antes do patch, o Dawn não verificava essa restrição; portanto, parâmetros que violavam a especificação podiam passar pela validação e chegar até a criação do VkSampler.
O ponto decisivo é o modelo de ameaça. A descrição pública pressupõe um atacante que já comprometeu o processo renderer ("a remote attacker who had compromised the renderer process"). Nessa posição, é possível manipular diretamente os comandos entre processos, em vez do caminho normal da API web; portanto, a validação no lado do renderer está fora do limite de confiança. E o backend Vulkan do Dawn opera no processo GPU, que tem privilégios maiores que o renderer — é por isso que essa falha se torna uma superfície de escape da sandbox.
Base: cases/20260804-cve-2026-13934-4d10a8/root_cause.md §2 · Detalhes: docs/cve-2026-13934/root-cause-and-fix.md
O commit de correção é o Dawn 43055cbeadddca41a9c973a809f859d641077b2f ("Add YCbCr sampler validation", 2026-05-27, Bug: 513006636) e altera três arquivos.
Essa estrutura é o núcleo deste CVE. Como a premissa é que o renderer já foi comprometido, apenas a validação não é suficiente; a segunda camada, que impõe os valores no lado de maior privilégio, é a linha de bloqueio efetiva. Resumir como "faltava validação de entrada, então adicionaram validação" perde o ponto central do design de defesa.
O tamanho da alteração é 53 linhas adicionadas, 0 removidas — um patch que preenche as verificações ausentes sem modificar a lógica existente.
Base: research/20260804-cve-2026-13934-diff-92f928/report.md §3·§4 · cases/20260804-cve-2026-13934-4d10a8/patch_diff.md §4
Comparamos o código-fonte dos dois snapshots do Dawn que o Chrome realmente fixou.
O que isso revelou: o lado vulnerável já tinha o ramo YCbCr e 2 verificações. A falha não era a ausência do caminho, mas a omissão da verificação de restrição condicional dentro do ramo.
Não compilamos nem executamos; portanto, os dois itens abaixo são expectativas baseadas no código, não observações diretas.
Base: cases/20260804-cve-2026-13934-4d10a8/report.md §1~§4 · Detalhes: docs/cve-2026-13934/evidence.md
Do ponto de vista do design de segurança
Do ponto de vista do método de investigação
DEPS → busca do número do bug no log de commits do componente. Procedimento: research/20260804-cve-2026-13934-diff-92f928/sources.md §6.Detalhes: docs/cve-2026-13934/lessons.md
docs/)research/20260804-cve-2026-13934-6bacf7/)research/20260804-cve-2026-13934-diff-92f928/)cases/20260804-cve-2026-13934-4d10a8/)reports/20260804-cve-2026-13934-8400bc/)https://www.cve.org/CVERecord?id=CVE-2026-13934https://nvd.nist.gov/vuln/detail/CVE-2026-13934https://dawn.googlesource.com/dawn/+/43055cbeadddca41a9c973a809f859d641077b2fA lista completa, com datas de publicação e identificadores, está nos sources.md das duas linhas de investigação.
| Tipo | Raiz |
|---|---|
| Investigação | research/ |
| Análise | cases/ |
| Trabalho | work/ |
| Relatórios |
Coleta periódica: research/topics/<topic>/
research/ · cases/ · work/ · reports/ · docs/ · .laurelin/ · .github/docs/conventions.md| Linha | Status | O que foi obtido |
|---|
Investigação de informações públicas·escopo de impacto (research/…-6bacf7/) | Concluída (4 documentos) | Metadados de CVE·NVD·aviso do fornecedor, CWE·CVSS, limites de versões afetadas, julgamentos segundo os critérios |
Comparação de patch·diff (research/…-diff-92f928/) | Concluída (4 documentos) | Identificação do commit de correção, critérios de comparação em 3 níveis, delta de arquivos alterados·lógica, julgamento de bypass·risco residual |
Reprodução·evidências (cases/…-4d10a8/) | Concluída (6 documentos) — comparação estática realizada, observação em nível de execução não feita | Estrutura da causa, viabilidade·restrições de exploração, valores observados na comparação estática das duas revisões |
Relatório de aprendizado (reports/…-8400bc/) | Concluída (4 documentos) | Sumário·mapa de citações, rascunho do README raiz, lista de documentos de docs/ |
| Alteração | Arquivo | Natureza |
|---|
Adição de 4 verificações de modo de endereçamento·maxAnisotropy no descritor YCbCr | src/dawn/native/Sampler.cpp | Validação no frontend — rejeita solicitações em violação |
| Sobrescrita dos modos de endereçamento·anisotropia por valores em conformidade com a especificação nos caminhos com conversão YCbCr | src/dawn/native/vulkan/SamplerVk.cpp | Imposição no backend — não cria estado de violação, independentemente da entrada |
Adição do teste de regressão YCbCrSamplerRequiredParams | src/dawn/tests/unittests/validation/YCbCrValidationTests.cpp | Prevenção de recorrência |
| Item observado | Lado vulnerável 54b4153c… | Lado corrigido 01249a97… | Nível de confirmação |
|---|
Número de DAWN_INVALID_IF no bloco de validação YCbCr | 2 (gate de funcionalidade + formato indefinido) | 6 | Observado diretamente |
| Imposição de valores em conformidade com a especificação no backend Vulkan | Ausente (até a conexão do pNext) | Presente | Observado diretamente |
Teste de regressão YCbCrSamplerRequiredParams | Ausente (23 TEST_F) | Presente (24) | Observado diretamente |
| Erro de device em solicitação em violação | Não ocorre | Ocorre | Esperado (com base no código) |
| Documento | Conteúdo |
|---|
docs/cve-2026-13934/overview.md | Visão geral·contexto·resumo das conclusões, interpretação da gravidade |
docs/cve-2026-13934/root-cause-and-fix.md | Estrutura da causa em 3 camadas e as duas camadas do patch |
docs/cve-2026-13934/evidence.md | Valores observados na comparação estática, caminhos de observação e limitações |
docs/cve-2026-13934/lessons.md | Lições de design de segurança·método de investigação |
docs/cve-2026-13934/limits-and-sources.md | Limitações·itens não confirmados e lista de fontes |
docs/conventions.md | Convenções de pastas·artefatos (texto completo) |
| Documento | Conteúdo |
|---|
brief.md | Texto original da solicitação, critérios de julgamento C1~C6, definição de fontes oficiais |
sources.md | Metadados de CVE·NVD·aviso do fornecedor, CWE·CVSS, conflitos entre fontes |
report.md | Julgamento de impacto·CVSS·condições da vulnerabilidade, julgamentos C1~C6, interpretação da gravidade |
followups.json | Propostas de acompanhamento |
| Documento | Conteúdo |
|---|
brief.md | Objetivo, critérios de julgamento D1~D6, árvore do patch de referência |
sources.md | Par commit de correção·critérios de comparação, DEPS·Gerrit, procedimento de rastreamento |
report.md | Arquivos alterados·delta de lógica·julgamento de bypass/risco residual, D1~D6 |
followups.json | Propostas de acompanhamento |
| Documento | Conteúdo |
|---|
intake.md | Metadados de recebimento, escopo de alvo·versões, condições de início, requisitos de isolamento, critérios de julgamento J1~J4 |
patch_diff.md | Alterações·motivo das alterações, indicadores observáveis antes/depois do patch |
root_cause.md | Estrutura da causa raiz em 3 camadas, premissas P1~P7, limite de confiança |
exploitability.md | Distinção entre demonstrável/não demonstrável, caminhos de observação, restrições, limites de contenção |
report.md | Síntese da verificação de reprodução — valores observados na comparação estática, diferenças antes/depois, julgamentos J1~J4 |
followups.json | Propostas de acompanhamento |
| Documento | Conteúdo |
|---|
outline.md | Público-alvo·sumário·mapa de citações de fontes (S1~S15) |
README.md | Rascunho original que foi promovido a este README raiz |
docs-index.md | Lista·resumo dos documentos de docs/, observações para a promoção |
followups.json | Propostas de acompanhamento |
reports/