
Repositorio estructurado de investigación de vulnerabilidades para una falla CWE-20 en Chrome Dawn WebGPU: causa raíz, diff del parche, verificación estática, revisión de gravedad y lecciones de seguridad.
Este es el repositorio del proyecto de trabajo. Investigación, análisis, trabajo e informes se manejan en un único repositorio (D088/D091).
Este archivo es el documento de entrada del repo/tablero. La convención completa de carpetas y entregables está en
docs/conventions.md. El cuerpo (estado, conclusiones, enlaces) se actualiza cuando el elemento informe (report) se promociona. Los agentes de investigación, análisis y trabajo no modifican el README raíz.
Resumen en una línea: Dawn, la implementación de WebGPU de Google Chrome, no validaba las restricciones de parámetros que exige la especificación Vulkan al crear samplers YCbCr, por lo que un atacante que ya hubiera comprometido el proceso del renderizador podía hacer llegar valores que violan la especificación hasta el proceso de GPU (CWE-20). La corrección se implementó en dos capas —validación añadida y forzado en el backend— y se incorporó en Chrome 150.0.7871.47.
Los documentos de aprendizaje detallados están en docs/cve-2026-13934/ — escritos para poder seguir la causa, la corrección, la demostración y las lecciones sin reproducción.
Objetivo: CVE-2026-13934 — Google Chrome / Dawn (implementación de WebGPU), tipo de vulnerabilidad CWE-20 (Improper Input Validation). CVE publicado el 2026-06-30, versión corregida 150.0.7871.47.
Fuente: research/20260804-cve-2026-13934-6bacf7/sources.md §1·§2.
Etapas de progreso — se trabajó en cuatro líneas: investigación (información pública) · investigación (parche/diff) · análisis (reproducción/demostración) · informe (síntesis de aprendizaje); las cuatro líneas se completaron.
Lo confirmado
150.0.7871.47 y commit de corrección (Dawn 43055cbe…), 3 archivos modificados y el motivo del cambio.cases/20260804-cve-2026-13934-4d10a8/report.md §3).Aún no confirmado (no se ha rellenado con suposiciones)
VkSampler generado y el informe de VUID de la capa de validación de Vulkan son valores esperados basados en el código (cases/…-4d10a8/report.md §4).150.0.7871.46·.47·.63 fijan todas la misma revisión de Dawn, pero el CVE lo indica como "prior to .47". No se pudo confirmar la base de esta notación.src.513006636, que contiene la causa, está con acceso restringido.Severidad — varía según la fuente. La calificación del propio proveedor (Chromium) es Medium, el CVSS v3.1 de CISA-ADP es 9.6 CRITICAL (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H) y NVD no tiene evaluación propia. Sin dictaminar cuál es la correcta, se presentan ambas — la interpretación está en docs/cve-2026-13934/overview.md.
Este repositorio no contiene servicios desplegados (API, backend, bases de datos, etc.). Todos los entregables son documentos.
La especificación Vulkan exige que, para los samplers con conversión YCbCr, el modo de dirección de todos los ejes sea CLAMP_TO_EDGE y que el filtrado anisotrópico (anisotropy) esté desactivado (VUID-VkSamplerCreateInfo-addressModeU-01646). Antes del parche, Dawn no comprobaba esta restricción, por lo que los parámetros que violan la especificación podían pasar la validación y llegar hasta la creación del VkSampler.
Lo decisivo es el modelo de amenaza. La descripción pública presupone que el atacante ya ha comprometido el proceso del renderizador ("a remote attacker who had compromised the renderer process"). Desde esa posición se pueden manipular directamente los comandos entre procesos, no la ruta normal de la API web, por lo que la validación del lado del renderizador queda fuera del límite de confianza. Y el backend de Vulkan de Dawn se ejecuta en el proceso de GPU, con mayores privilegios que el renderizador — por eso este defecto se convierte en una superficie de escape del sandbox.
Fuente: cases/20260804-cve-2026-13934-4d10a8/root_cause.md §2 ·
Detalle: docs/cve-2026-13934/root-cause-and-fix.md
El commit de corrección es Dawn 43055cbeadddca41a9c973a809f859d641077b2f ("Add YCbCr sampler validation", 2026-05-27, Bug: 513006636) y modifica tres archivos.
Esta estructura es el núcleo de este CVE. Como se presupone que el renderizador ya está comprometido, la validación por sí sola no basta; la segunda capa, que fuerza los valores en el lado de mayores privilegios, es la línea de bloqueo efectiva. Resumirlo como "faltaba validación de entrada y se añadió validación" pierde el punto esencial del diseño defensivo.
El tamaño del cambio es 53 líneas añadidas, 0 eliminadas — un parche que rellena las comprobaciones que faltaban sin modificar la lógica existente.
Fuente: research/20260804-cve-2026-13934-diff-92f928/report.md §3·§4 ·
Detalle: cases/20260804-cve-2026-13934-4d10a8/patch_diff.md §4
Se contrastaron las fuentes de las dos instantáneas de Dawn que Chrome fijó realmente.
Lo que esto revela: el lado vulnerable ya tenía la rama YCbCr y 2 comprobaciones. El defecto no era la ausencia de la ruta, sino la omisión de la comprobación de la restricción condicional dentro de la rama.
Como no se compiló ni se ejecutó, los dos elementos siguientes son expectativas basadas en el código y no mediciones.
Fuente: cases/20260804-cve-2026-13934-4d10a8/report.md §1~§4 ·
Detalle: docs/cve-2026-13934/evidence.md
Desde la perspectiva del diseño de seguridad
Desde la perspectiva del método de investigación
DEPS → búsqueda del número de bug en el log de commits del componente. Procedimiento: research/20260804-cve-2026-13934-diff-92f928/sources.md §6.Detalle: 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/+/43055cbeadddca41a9c973a809f859d641077b2fLa lista completa, con las fechas de publicación y los identificadores, está en los sources.md de las dos líneas de investigación.
| Tipo | Raíz |
|---|---|
| Investigación | research/ |
| Análisis | cases/ |
| Trabajo | work/ |
| Informes |
Recopilación periódica: research/topics/<topic>/
research/ · cases/ · work/ · reports/ · docs/ · .laurelin/ · .github/docs/conventions.md| Línea | Estado | Obtenido |
|---|
Investigación de información pública y alcance de impacto (research/…-6bacf7/) | Completada (4 documentos) | Metadatos de CVE·NVD·aviso del proveedor, CWE·CVSS, límites de versiones afectadas, dictamen según criterios |
Comparación de parche/diff (research/…-diff-92f928/) | Completada (4 documentos) | Identificación del commit de corrección, criterios de comparación en 3 niveles, delta de archivos y lógica modificados, dictamen de evasión/riesgo residual |
Reproducción y demostración (cases/…-4d10a8/) | Completada (6 documentos) — contraste estático realizado, sin observación a nivel de ejecución | Estructura de la causa, viabilidad y restricciones, valores observados del contraste estático de las dos revisiones |
Informe de aprendizaje (reports/…-8400bc/) | Completado (4 documentos) | Índice y mapa de citas, borrador del README raíz, lista de documentos de docs/ |
| Cambio | Archivo | Naturaleza |
|---|
Añade 4 comprobaciones de modo de dirección y maxAnisotropy al descriptor YCbCr | src/dawn/native/Sampler.cpp | Validación de frontend — rechaza las solicitudes que violan la especificación |
| Sobrescribe el modo de dirección y la anisotropía con valores conformes a la especificación en las rutas con conversión YCbCr | src/dawn/native/vulkan/SamplerVk.cpp | Forzado de backend — sea cual sea la entrada, no se crea un estado de violación |
Añade la prueba de regresión YCbCrSamplerRequiredParams | src/dawn/tests/unittests/validation/YCbCrValidationTests.cpp | Prevención de recurrencia |
| Elemento observado | Lado vulnerable 54b4153c… | Lado corregido 01249a97… | Nivel de confirmación |
|---|
Número de DAWN_INVALID_IF en el bloque de validación YCbCr | 2 (feature gate + formato no definido) | 6 | Medido |
| Forzado de valores conformes a la especificación en el backend de Vulkan | Ninguno (hasta el encadenamiento pNext) | Presente | Medido |
Prueba de regresión YCbCrSamplerRequiredParams | Ausente (23 TEST_F) | Presente (24) | Medido |
| Error de device ante una solicitud que viola la especificación | No se produce | Se produce | Esperado (basado en el código) |
| Documento | Contenido |
|---|
docs/cve-2026-13934/overview.md | Resumen de visión general, antecedentes y conclusiones; interpretación de la severidad |
docs/cve-2026-13934/root-cause-and-fix.md | Estructura de la causa en 3 niveles y las dos capas del parche |
docs/cve-2026-13934/evidence.md | Valores observados del contraste estático, rutas de observación y limitaciones |
docs/cve-2026-13934/lessons.md | Lecciones de diseño de seguridad y método de investigación |
docs/cve-2026-13934/limits-and-sources.md | Limitaciones, elementos no confirmados y lista de fuentes |
docs/conventions.md | Convención de carpetas y entregables (texto completo) |
| Documento | Contenido |
|---|
brief.md | Texto original de la solicitud, criterios de decisión C1~C6, definición de fuentes oficiales |
sources.md | Metadatos de CVE·NVD·aviso del proveedor, CWE·CVSS, conflictos entre fuentes |
report.md | Dictamen de impacto·CVSS·condiciones de vulnerabilidad, dictamen C1~C6, interpretación de la severidad |
followups.json | Propuestas de seguimiento |
| Documento | Contenido |
|---|
brief.md | Objetivo, criterios de decisión D1~D6, árbol del parche de referencia |
sources.md | Par de commit de corrección·criterios de comparación, DEPS·Gerrit, procedimiento de rastreo |
report.md | Delta de archivos y lógica modificados·dictamen de evasión/riesgo residual, D1~D6 |
followups.json | Propuestas de seguimiento |
| Documento | Contenido |
|---|
intake.md | Metadatos de recepción, alcance de objetivo y versiones, condiciones de inicio, requisitos de aislamiento, criterios de decisión J1~J4 |
patch_diff.md | Cambios y motivos de los cambios, indicadores de observación antes/después del parche |
root_cause.md | Estructura de la causa raíz en 3 niveles, premisas P1~P7, límite de confianza |
exploitability.md | Distinción de demostrable/no demostrable, rutas de observación, restricciones, límites de contención |
report.md | Síntesis de la verificación de reproducción — valores observados del contraste estático, diferencias antes/después, dictamen J1~J4 |
followups.json | Propuestas de seguimiento |
| Documento | Contenido |
|---|
outline.md | Audiencia, índice, mapa de citas de fuentes (S1~S15) |
README.md | Borrador original promocionado a este README raíz |
docs-index.md | Lista y resumen de documentos de docs/, notas para la promoción |
followups.json | Propuestas de seguimiento |
reports/