Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-9999-exploit — Prueba de concepto y fuzzer GLSL para CVE-2026-9999 en el backend ANGLE/Metal WebGL de Chrome, con fingerprinting de compilación, shaders seleccionados y captura de artefactos de fallo. | Kitploit
Herramientas/GitHubGitHub/josephfarah-ciso/cve-2026-9999-exploit
Análisis de VulnerabilidadesExplotaciónSeguridad WebFuzzing
GitHubjosephfarah-ciso/cve-2026-9999-exploit

CVE-2026-9999-exploit

Prueba de concepto y fuzzer GLSL para CVE-2026-9999 en el backend ANGLE/Metal WebGL de Chrome, con fingerprinting de compilación, shaders seleccionados y captura de artefactos de fallo.

Ver Repositorio

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
hace 7 díasAún no revisado

CVE-2026-9999 — Harness de búsqueda de PoC para WebGL ANGLE/Metal de Chrome (macOS)


1. Resumen de la vulnerabilidad

CampoValor
CVECVE-2026-9999
Proveedor / productoGoogle Chrome
AfectadoChrome < 148.0.7778.216, solo macOS [1]
Corregido en148.0.7778.216 [1]
ImpactoEjecución arbitraria de código dentro de un sandbox mediante una página HTML manipulada [1]
Severidad en ChromiumAlta [1]
CVSS 3.1 (CISA-ADP)8.8 ALTA — CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H [1]
Evaluación CVSS de NVD (NIST)Aún no proporcionada [1]
CWECWE-269 — Gestión inadecuada de privilegios (enriquecimiento de CISA-ADP) [1]
CISA SSVC (2026-05-29)exploitation: none, automatable: no, technicalImpact: total [1]
Publicado / última modificación2026-05-28 / 2026-07-21 [1]
Causa raízNo pública — la incidencia 513364480 de Chromium muestra "Se requieren permisos" [1]

Implicación en la cadena de ataque: la ejecución de código "dentro de un sandbox" [1] significa que un atacante obtiene el control de un proceso en sandbox (muy probablemente el proceso de GPU). Una toma completa del navegador requeriría además un escape de sandbox independiente que no forma parte de este CVE.


2. Estrategia e hipótesis (evaluación propia del analista — tratar como no confirmada)

Lo siguiente es una inferencia del registro público, no hechos confirmados:

  • ANGLE es el motor que Chrome usa para traducir GLSL de WebGL a las API gráficas de la plataforma — en macOS, a Metal. Una "página HTML manipulada" [1] que llega a ANGLE casi con certeza significa contenido WebGL — es decir, shaders controlados por el atacante y/o estado de WebGL gestionado por el backend de Metal.
  • CWE-269 (Gestión inadecuada de privilegios) [1] combinado con un impacto contenido en el sandbox sugiere que la capa ANGLE/GPU no restringe adecuadamente algo controlado por el atacante durante la traducción de shaders o la validación de estado.
  • Históricamente, este componente ha producido errores de seguridad de memoria mediante casos límite en el traductor de GLSL (indexación constante fuera de límites, dimensionado de arrays con desbordamiento de enteros, interacciones swizzle/discard, bloques uniformes sobredimensionados, explosiones de desenrollado de bucles).

Por lo tanto, el harness ejercita exactamente esos patrones y luego muta GLSL a gran escala para buscar un fallo en el lado del renderizador (pérdida de contexto WebGL = fallo del proceso de GPU o muerte por watchdog).


3. Contenido del repositorio

ArchivoPropósito
cve-2026-9999-poc.htmlHarness de PoC autocontenido (sin dependencias): fingerprinting de build, 8 shaders seleccionados de estrés del traductor, fuzzer de GLSL con captura de artefactos de fallo
README.mdEste archivo

4. Requisitos

  • Una máquina macOS o VM compatible con Metal que estés autorizado a hacer fallar deliberadamente. El CVE es específico de macOS [1]; las pruebas en Windows/Linux no ejercitarán el backend vulnerable ANGLE Metal.
  • Build de Chrome < 148.0.7778.216 [1] (ver §5).
  • GPU de hardware / soporte Metal. Sin ello, Chrome recurre a SwiftShader (renderizado por software) y la ruta vulnerable nunca se alcanza — ver comprobación §5.4.
  • Python 3 (opcional, solo para el asistente de búsqueda de versiones en §5.1 y un servidor HTTP local).

5. Configuración del entorno

5.1 Método A — Chrome for Testing (recomendado)

El archivo Chrome for Testing de Google ofrece builds fijadas a una versión que no se autoactualizan. Encuentra el build vulnerable más reciente (todo lo anterior a 148.0.7778.216 está afectado [1]):

root@kitploit:~
import json, urllib.request
data = json.load(urllib.request.urlopen(
  "https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json"))
key = lambda v: tuple(int(x) for x in v.split('.'))
fix = (148, 0, 7778, 216)
cands = sorted((v["version"] for v in data["versions"]
                if "chrome" in v.get("downloads", {}) and key(v["version"]) < fix), key=key)
print(cands[-5:])   # pick the last (newest vulnerable) entry

Descarga para tu arquitectura (uname -m):

root@kitploit:~
# Apple Silicon
https://storage.googleapis.com/chrome-for-testing-public/<VERSION>/mac-arm64/chrome-mac-arm64.zip
# Intel
https://storage.googleapis.com/chrome-for-testing-public/<VERSION>/mac-x64/chrome-mac-x64.zip

Descomprime en una carpeta de laboratorio (p. ej. ~/lab/, no /Applications) y ejecútalo desde ahí.

5.2 Método B — Snapshots de Chromium

Si un build específico no está en Chrome for Testing, usa el archivo de snapshots de Chromium (commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/ para Intel, .../Mac_Arm/ para Apple Silicon), indexado por posición de commit — mapea la versión vulnerable a una posición de rama mediante chromium-history, y luego obtén el snapshot más cercano. Los snapshots tampoco se autoactualizan.

5.3 Bloquear autoactualizaciones (solo si usas un build comercial de otra fuente)

Termina los agentes de actualización de Keystone y bloquea googleupdate.googleapis.com, o el build de prueba se parcheará silenciosamente durante la noche. No es necesario para builds de Chrome for Testing.

5.4 Verifica que estás en el backend de Metal (crítico)

Sin Metal, Chrome renderiza WebGL por software (SwiftShader) y el backend ANGLE Metal nunca se toca. En la consola de la página del PoC, ejecuta:

root@kitploit:~
const c = document.createElement('canvas'), g = c.getContext('webgl2');
const x = g.getExtension('WEBGL_debug_renderer_info');
console.log(g.getParameter(x.UNMASKED_RENDERER_WEBGL));
// Good:  contains "ANGLE Metal Renderer"
// Bad:   contains "SwiftShader" -> the vulnerable path is NOT being exercised

También puedes confirmarlo en chrome://gpu. Los invitados de Parallels/VMware Fusion con virtualización de GPU suelen funcionar; las configuraciones mínimas de QEMU/UTM a menudo recurren a SwiftShader.


6. Pasos para reproducir

  1. Aísla el objetivo. Snapshot de VM o cuenta de macOS dedicada. Nunca inicies sesión ni actives la sincronización en el build vulnerable; trátalo como comprometido por diseño. (El impacto del CVE es la ejecución de código dentro de un sandbox con solo visitar una página web [1].)
  2. Instala el build vulnerable según §5 y verifica que §5.4 pasa.
  3. Sirve el PoC (abre el archivo directamente o):
    root@kitploit:~
    cd <repo dir>
    python3 -m http.server 8000
    # then browse to http://localhost:8000/cve-2026-9999-poc.html
    
  4. Comprueba la línea de fingerprint que se imprime al cargar. Debe indicar que el build es anterior a 148.0.7778.216 y, por tanto, potencialmente vulnerable [1]. En builds parcheados el harness avisa para que no pierdas tiempo.
  5. Haz clic en 1) Run curated triggers. Ocho shaders ejercitan los patrones del traductor descritos en §2 (indexación constante fuera de límites, dimensionado de arrays con desbordamiento de enteros, indexación dinámica de matrices, estrés de desenrollado de bucles, arrays de arrays, discard/swizzle, casos límite del preprocesador, UBOs sobredimensionados). Observa los resultados [!!] y los eventos de pérdida de contexto.
  6. Haz clic en 2) Fuzz. Los shaders GLSL mutados se compilan, enlazan, dibujan y se leen de vuelta en un bucle. Observa el registro en busca de CONTEXT LOST.
  7. Ante un fallo, el shader problemático se persiste en localStorage. Recupéralo:
    root@kitploit:~
    localStorage.getItem("cve20269999_poc_fs");      // crashing fragment shader
    localStorage.getItem("cve20269999_crashes");     // crash event log
    

Una instantánea en vivo de una ejecución sospechosa también es visible en chrome://gpu y en la Consola de macOS (informes de fallo del proceso de GPU).


7. Interpretación de resultados / falsos positivos conocidos

  • WEBGL_context_lost ≠ vulnerabilidad. El watchdog de GPU de Chrome mata shaders de larga duración (el disparador loop-unroll-dos y las iteraciones de fuzzing con recuentos de bucle enormes están diseñados para ser lentos). Elimina el ruido: reduce SH_ITER, o confirma que cualquier fallo candidato se reproduce rápidamente (< 1 s por iteración).
  • Un fallo real de seguridad de memoria debería reproducirse de forma determinista a partir del shader minimizado y mostrar una firma de fallo distintiva en la Consola (p. ej., EXC_BAD_ACCESS) en lugar de una terminación por watchdog.
  • Solo un informe ASAN que señale el backend ANGLE Metal es evidencia sólida de que has encontrado este error, en lugar de un contratiempo no relacionado del driver.

8. Confirmación de la causa raíz: build ASAN (opcional pero muy recomendado)

Compila una revisión vulnerable de Chromium con AddressSanitizer:

root@kitploit:~
fetch chromium
cd src
git checkout tags/148.0.7778.215          # last tag before the fix
gn gen out/asan --args='is_asan=true is_debug=false symbol_level=1 dcheck_always_on=true'
autoninja -C out/asan chrome

Luego ejecuta el shader minimizado que falla con la validación de la API de Metal activada:

root@kitploit:~
MTL_DEBUG_LAYER=1 out/asan/Chromium.app/Contents/MacOS/Chromium poc.html

El rastreo de ASAN nombrará la función exacta de ANGLE/Metal y confirmará si el fallo coincide con el componente del CVE [1]. (Posteriormente: una vez que el commit de corrección para 148.0.7778.216 sea visible, haz diff de third_party/angle/src/libANGLE/renderer/metal/ para identificar la causa raíz real y sustituye el enfoque de fuzzing por un disparador determinista.)


9. Limitaciones

  • No existe causa raíz ni PoC público. La incidencia de Chromium está restringida ("Se requieren permisos") [1]; este harness está guiado por hipótesis.
  • Sin explotación conocida en la naturaleza. El enriquecimiento SSVC de CISA (2026-05-29) registra exploitation: none [1].
  • Solo impacto contenido en el sandbox [1] — este PoC, incluso si produce ejecución de código, aborda únicamente la etapa del proceso en sandbox de una cadena de ataque real.
  • Objetivo solo macOS [1]; no saques conclusiones de ejecuciones en otras plataformas.

10. Seguridad y legal

Prueba solo en máquinas que sean tuyas o para las que tengas autorización explícita. El harness compila deliberadamente shaders adversariales para hacer fallar un proceso gráfico — espera muertes de procesos de GPU. Mantén el build vulnerable del navegador fuera de redes de producción.


11. Referencias

[1] NVD — CVE-2026-9999: https://nvd.nist.gov/vuln/detail/CVE-2026-9999 * Aviso del proveedor (blog Chrome Releases, actualización del canal Stable): https://chromereleases.googleblog.com/2026/05/stable-channel-update-for-desktop_0877304591.html * Incidencia 513364480 de Chromium (acceso restringido): https://issues.chromium.org/issues/513364480

Descargar herramienta
  • Minimiza y vuelve a probar el shader que falla de forma aislada (5+ ejecuciones consecutivas) para confirmar el determinismo.
  • Confirma la causa raíz con un build ASAN antes de atribuir cualquier cosa a CVE-2026-9999 — ver §8.