Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-9999-exploit — Prova de conceito e fuzzer GLSL para o CVE-2026-9999 no backend WebGL ANGLE/Metal do Chrome, com fingerprinting de build, shaders selecionados e captura de artefatos de crash. | Kitploit
Ferramentas/GitHubGitHub/josephfarah-ciso/cve-2026-9999-exploit
Análise de VulnerabilidadesExploraçãoSegurança WebFuzzing
GitHubjosephfarah-ciso/cve-2026-9999-exploit

CVE-2026-9999-exploit

Prova de conceito e fuzzer GLSL para o CVE-2026-9999 no backend WebGL ANGLE/Metal do Chrome, com fingerprinting de build, shaders selecionados e captura de artefatos de crash.

Ver Repositório
4há 28 diasAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-9999 — Harness de caça a PoC WebGL ANGLE/Metal do Chrome (macOS)


1. Resumo da vulnerabilidade

CampoValor
CVECVE-2026-9999
Fornecedor / produtoGoogle Chrome
AfetadoChrome < 148.0.7778.216, somente macOS [1]
Corrigido em148.0.7778.216 [1]
ImpactoExecução arbitrária de código dentro de um sandbox por meio de uma página HTML especialmente criada [1]
Severidade ChromiumAlta [1]
CVSS 3.1 (CISA-ADP)8.8 HIGH — CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H [1]
Avaliação CVSS NVD (NIST)Ainda não fornecida [1]
CWECWE-269 — Gerenciamento inadequado de privilégios (enriquecimento pela CISA-ADP) [1]
CISA SSVC (2026-05-29)exploitation: none, automatable: no, technicalImpact: total [1]
Publicado / última modificação2026-05-28 / 2026-07-21 [1]
Causa raizNão pública — a issue 513364480 do Chromium mostra "Permissions Required" [1]

Implicação para a cadeia de ataque: a execução de código "dentro de um sandbox" [1] significa que um atacante obtém o controle de um processo em sandbox (provavelmente o processo de GPU). Uma tomada completa do navegador exigiria adicionalmente uma fuga de sandbox separada que não faz parte deste CVE.


2. Estratégia e hipótese (avaliação própria do analista — tratar como não confirmada)

O seguinte é uma inferência a partir do registro público, não fatos confirmados:

  • ANGLE é o mecanismo que o Chrome usa para traduzir GLSL do WebGL para APIs gráficas da plataforma — no macOS, para Metal. Uma "página HTML especialmente criada" [1] que chega ao ANGLE quase certamente significa conteúdo WebGL — ou seja, shaders controlados pelo atacante e/ou estado WebGL manipulado pelo backend Metal.
  • A CWE-269 (Gerenciamento inadequado de privilégios) [1] combinada com o impacto contido no sandbox sugere que a camada ANGLE/GPU falha ao restringir adequadamente algo controlado pelo atacante durante a tradução de shaders ou a validação de estado.
  • Historicamente, esse componente produziu bugs de segurança de memória por meio de casos extremos no tradutor GLSL (indexação constante fora dos limites, dimensionamento de arrays com estouro de inteiro, interações swizzle/discard, blocos uniform superdimensionados, estouros de desenrolamento de loop).

Portanto, o harness exercita exatamente esses padrões e então muta GLSL em escala para caçar um crash no lado do renderizador (WebGL context lost = crash do processo de GPU ou kill pelo watchdog).


3. Conteúdo do repositório

ArquivoFinalidade
cve-2026-9999-poc.htmlHarness PoC autocontido (sem dependências): fingerprinting de build, 8 shaders selecionados de estresse do tradutor, fuzzer GLSL com captura de artefatos de crash
README.mdEste arquivo

4. Requisitos

  • Uma máquina macOS ou VM com suporte a Metal que você esteja autorizado a derrubar deliberadamente. O CVE é específico do macOS [1]; testar no Windows/Linux não exercitará o backend ANGLE Metal vulnerável.
  • Build do Chrome < 148.0.7778.216 [1] (veja §5).
  • Suporte a GPU / Metal de hardware. Sem isso, o Chrome recorre ao SwiftShader (renderização por software) e o caminho vulnerável nunca é alcançado — veja a verificação na §5.4.
  • Python 3 (opcional, apenas para o auxiliar de consulta de versão na §5.1 e para um servidor HTTP local).

5. Configuração do ambiente

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

O arquivo Chrome for Testing do Google fornece builds fixados em versões específicas que não são atualizados automaticamente. Encontre o build vulnerável mais recente (tudo abaixo de 148.0.7778.216 é afetado [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

Baixe para a sua arquitetura (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

Descompacte em uma pasta de laboratório (ex.: ~/lab/, não /Applications) e execute a partir dela.

5.2 Método B — snapshots do Chromium

Se um build específico não estiver disponível no Chrome for Testing, use o arquivo de snapshots do Chromium (commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/ para Intel, .../Mac_Arm/ para Apple Silicon), indexado por posição de commit — mapeie a versão vulnerável para uma posição de branch via chromium-history e baixe o snapshot mais próximo. Snapshots também não são atualizados automaticamente.

5.3 Bloquear atualizações automáticas (apenas se estiver usando um build oficial de outra fonte)

Encerre os agentes de atualização do Keystone e bloqueie googleupdate.googleapis.com; caso contrário, o build de teste se atualizará silenciosamente durante a noite. Não é necessário para builds do Chrome for Testing.

5.4 Verifique se você está no backend Metal (crítico)

Sem Metal, o Chrome renderiza WebGL por software (SwiftShader) e o backend ANGLE Metal nunca é acionado. No console da página do PoC, execute:

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

Você também pode confirmar em chrome://gpu. Convidados de Parallels/VMware Fusion com virtualização de GPU geralmente funcionam; configurações mínimas de QEMU/UTM frequentemente recorrem ao SwiftShader.


6. Passos para reproduzir

  1. Isole o alvo. Snapshot de VM ou conta macOS dedicada. Nunca faça login nem ative a sincronização no build vulnerável; trate-o como comprometido por design. (O impacto do CVE é a execução de código dentro de um sandbox que ocorre simplesmente ao visitar uma página da web [1].)
  2. Instale o build vulnerável conforme a §5 e verifique se a §5.4 passa.
  3. Sirva o PoC (abra o arquivo diretamente ou):
    root@kitploit:~
    cd <repo dir>
    python3 -m http.server 8000
    # then browse to http://localhost:8000/cve-2026-9999-poc.html
    
  4. Verifique a linha de fingerprint impressa ao carregar. Ela deve informar que o build é anterior a 148.0.7778.216 e, portanto, potencialmente vulnerável [1]. Em builds corrigidos, o harness avisa para que você não desperdice ciclos.
  5. Clique em 1) Run curated triggers. Oito shaders exercitam os padrões do tradutor descritos na §2 (indexação constante fora dos limites, dimensionamento de arrays com estouro de inteiro, indexação dinâmica de matrizes, estresse de desenrolamento de loop, arrays de arrays, discard/swizzle, casos extremos de pré-processador, UBOs superdimensionados). Fique atento a resultados [!!] e eventos de perda de contexto.
  6. Clique em 2) Fuzz. Shaders GLSL mutados são compilados, vinculados, renderizados e lidos de volta em um loop. Observe o log em busca de CONTEXT LOST.
  7. Em caso de crash, o shader causador é persistido em localStorage. Recupere-o:
    root@kitploit:~
    localStorage.getItem("cve20269999_poc_fs");      // crashing fragment shader
    localStorage.getItem("cve20269999_crashes");     // crash event log
    
  8. Minimize e re-teste o shader com crash isoladamente (5+ execuções consecutivas) para confirmar o determinismo.
  9. Confirme a causa raiz com um build ASAN antes de atribuir qualquer coisa ao CVE-2026-9999 — veja §8.

Um snapshot ao vivo de uma execução suspeita também é visível em chrome://gpu e no Console do macOS (relatórios de crash do processo de GPU).


7. Interpretando resultados / falsos positivos conhecidos

  • WEBGL_context_lost ≠ vulnerabilidade. O watchdog de GPU do Chrome encerra shaders de execução prolongada (o gatilho loop-unroll-dos e as iterações de fuzz com contagens enormes de loop são projetados para serem lentos). Elimine o ruído: reduza SH_ITER ou confirme se qualquer crash candidato se reproduz rapidamente (< 1 s por iteração).
  • Um crash real de segurança de memória deve se reproduzir deterministicamente a partir do shader minimizado e mostrar uma assinatura de crash distinta no Console (ex.: EXC_BAD_ACCESS) em vez de uma terminação pelo watchdog.
  • Somente um relatório ASAN que aponte o backend ANGLE Metal é evidência sólida de que você encontrou este bug, em vez de um problema não relacionado do driver.

8. Confirmação da causa raiz: build ASAN (opcional, mas fortemente recomendado)

Compile uma revisão vulnerável do Chromium com 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

Em seguida, execute o shader minimizado que causa o crash com a validação da API Metal ativada:

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

O trace ASAN nomeará a função exata do ANGLE/Metal e confirmará se o crash corresponde ao componente do CVE [1]. (Posteriormente: quando o commit da correção para 148.0.7778.216 estiver visível, faça diff em third_party/angle/src/libANGLE/renderer/metal/ para identificar a verdadeira causa raiz e substitua a abordagem de fuzzing por um gatilho determinístico.)


9. Limitações

  • Não existe causa raiz ou PoC público. A issue do Chromium é restrita ("Permissions Required") [1]; este harness é orientado por hipóteses.
  • Nenhuma exploração conhecida em ambientes reais. O enriquecimento SSVC da CISA (2026-05-29) registra exploitation: none [1].
  • Apenas impacto contido no sandbox [1] — este PoC, mesmo que produza execução de código, aborda somente o estágio do processo em sandbox de uma cadeia de ataque real.
  • Alvo somente macOS [1]; não tire conclusões de execuções em outras plataformas.

10. Segurança e aspectos legais

Teste apenas em máquinas suas ou nas quais você tenha autorização explícita para testar. O harness compila intencionalmente shaders adversários para derrubar um processo gráfico — espere encerramentos do processo de GPU. Mantenha o build vulnerável do navegador fora de redes de produção.


11. Referências

[1] NVD — CVE-2026-9999: https://nvd.nist.gov/vuln/detail/CVE-2026-9999 * Aviso do fornecedor (blog Chrome Releases, atualização do canal estável): https://chromereleases.googleblog.com/2026/05/stable-channel-update-for-desktop_0877304591.html * Issue 513364480 do Chromium (acesso restrito): https://issues.chromium.org/issues/513364480

Baixar ferramenta