Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-9999-exploit — Proof-of-concept e fuzzer GLSL per CVE-2026-9999 nel backend WebGL ANGLE/Metal di Chrome, con fingerprinting delle build, shader selezionati e acquisizione degli artefatti di crash. | Kitploit
Strumenti/GitHubGitHub/josephfarah-ciso/cve-2026-9999-exploit
Analisi delle VulnerabilitàExploitSicurezza WebFuzzing
GitHubjosephfarah-ciso/cve-2026-9999-exploit

CVE-2026-9999-exploit

Proof-of-concept e fuzzer GLSL per CVE-2026-9999 nel backend WebGL ANGLE/Metal di Chrome, con fingerprinting delle build, shader selezionati e acquisizione degli artefatti di crash.

Vedi Repository
427 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-9999 — Harness di caccia ai PoC per WebGL ANGLE/Metal di Chrome (macOS)


1. Riepilogo della vulnerabilità

CampoValore
CVECVE-2026-9999
Vendor / prodottoGoogle Chrome
InteressateChrome < 148.0.7778.216, solo macOS [1]
Corretta in148.0.7778.216 [1]
ImpattoEsecuzione di codice arbitrario all'interno di una sandbox tramite una pagina HTML appositamente predisposta [1]
Gravità 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]
Valutazione CVSS NVD (NIST)Non ancora fornita [1]
CWECWE-269 — Gestione impropria dei privilegi (arricchimento da parte di CISA-ADP) [1]
CISA SSVC (2026-05-29)exploitation: none, automatable: no, technicalImpact: total [1]
Pubblicata / ultima modifica2026-05-28 / 2026-07-21 [1]
Causa principaleNon pubblica — l'issue Chromium 513364480 mostra "Permissions Required" [1]

Implicazione per la catena di attacco: l'esecuzione di codice "all'interno di una sandbox" [1] significa che un attaccante ottiene il controllo di un processo in sandbox (molto probabilmente il processo GPU). Un takeover completo del browser richiederebbe inoltre una separata fuga dalla sandbox che non fa parte di questa CVE.


2. Strategia e ipotesi (valutazione personale dell'analista — da considerare non confermata)

Quanto segue è un'inferenza basata su documenti pubblici, non fatti confermati:

  • ANGLE è il motore che Chrome usa per tradurre il GLSL di WebGL nelle API grafiche della piattaforma — su macOS, in Metal. Una "pagina HTML appositamente predisposta" [1] che raggiunge ANGLE significa quasi certamente contenuto WebGL — cioè shader controllati dall'attaccante e/o stato WebGL gestito dal backend Metal.
  • CWE-269 (Gestione impropria dei privilegi) [1] combinata con un impatto contenuto nella sandbox suggerisce che il livello ANGLE/GPU non riesca a limitare correttamente qualcosa controllato dall'attaccante durante la traduzione degli shader o la validazione dello stato.
  • Storicamente, questo componente ha prodotto bug di memory safety tramite casi limite nel traduttore GLSL (indicizzazione costante fuori dai limiti, dimensionamento di array con overflow di interi, interazioni swizzle/discard, uniform block sovradimensionati, esplosioni di loop unrolling).

L'harness quindi esercita esattamente questi pattern e poi muta GLSL su larga scala per cercare un crash lato renderer (WebGL context lost = crash del processo GPU o kill da parte del watchdog).


3. Contenuto del repository

FileScopo
cve-2026-9999-poc.htmlHarness PoC autonomo (nessuna dipendenza): fingerprinting della build, 8 shader curati per stressare il traduttore, fuzzer GLSL con acquisizione degli artefatti di crash
README.mdQuesto file

4. Requisiti

  • Una macchina macOS o VM con supporto Metal che sei autorizzato a mandare in crash deliberatamente. La CVE è specifica per macOS [1]; i test su Windows/Linux non esercitano il backend Metal di ANGLE vulnerabile.
  • Build di Chrome < 148.0.7778.216 [1] (vedi §5).
  • Supporto GPU hardware / Metal. Senza di esso, Chrome ripiega su SwiftShader (rendering software) e il percorso vulnerabile non viene mai raggiunto — vedi il controllo in §5.4.
  • Python 3 (opzionale, solo per l'helper di ricerca versione in §5.1 e per un server HTTP locale).

5. Configurazione dell'ambiente

5.1 Metodo A — Chrome for Testing (consigliato)

L'archivio Chrome for Testing di Google fornisce build ancorate a una versione specifica che non si aggiornano automaticamente. Trova la build vulnerabile più recente (tutto ciò che è inferiore a 148.0.7778.216 è affetto [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

Scarica per la tua architettura (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

Decomprimi in una cartella di laboratorio (es. ~/lab/, non /Applications) e avvia da lì.

5.2 Metodo B — Snapshot Chromium

Se una build specifica non è disponibile in Chrome for Testing, usa l'archivio degli snapshot Chromium (commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/ per Intel, .../Mac_Arm/ per Apple Silicon), indicizzato per posizione di commit — mappa la versione vulnerabile a una posizione di branch tramite chromium-history, quindi scarica lo snapshot più vicino. Anche gli snapshot non si aggiornano automaticamente.

5.3 Blocca gli aggiornamenti automatici (solo se usi una build branded da un'altra fonte)

Termina gli agenti di aggiornamento Keystone e blocca googleupdate.googleapis.com, altrimenti la build di test si auto-patcha silenziosamente durante la notte. Non necessario per le build di Chrome for Testing.

5.4 Verifica di essere sul backend Metal (critico)

Senza Metal, Chrome esegue il rendering WebGL via software (SwiftShader) e il backend Metal di ANGLE non viene mai toccato. Nella console della pagina PoC, esegui:

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

Puoi anche verificarlo su chrome://gpu. Le macchine virtuali Parallels/VMware Fusion con virtualizzazione GPU di solito funzionano; le configurazioni minimali QEMU/UTM spesso ripiegano su SwiftShader.


6. Passaggi per riprodurre

  1. Isola il target. Snapshot della VM o account macOS dedicato. Non accedere mai né abilitare la sincronizzazione nella build vulnerabile; trattala come compromessa by design. (L'impatto della CVE è l'esecuzione di codice in una sandbox ottenuta semplicemente visitando una pagina web [1].)
  2. Installa la build vulnerabile secondo §5 e verifica che il controllo §5.4 sia superato.
  3. Servi il PoC (apri direttamente il file oppure):
    root@kitploit:~
    cd <repo dir>
    python3 -m http.server 8000
    # then browse to http://localhost:8000/cve-2026-9999-poc.html
    
  4. Controlla la riga di fingerprint stampata al caricamento. Dovrebbe segnalare la build come inferiore a 148.0.7778.216 e quindi potenzialmente vulnerabile [1]. Sulle build patchate l'harness avvisa per evitare di sprecare cicli.
  5. Fai clic su 1) Run curated triggers. Otto shader stressano i pattern del traduttore descritti in §2 (indicizzazione costante fuori dai limiti, dimensionamento array con overflow di interi, indicizzazione dinamica di matrici, stress da loop unrolling, array di array, discard/swizzle, casi limite del preprocessore, UBO sovradimensionati). Controlla i risultati [!!] e gli eventi di context loss.
  6. Fai clic su 2) Fuzz. Gli shader GLSL mutati vengono compilati, linkati, usati per il rendering e riletti in loop. Controlla il log per CONTEXT LOST.
  7. In caso di crash, lo shader che ha causato il problema viene salvato in localStorage. Recuperalo:
    root@kitploit:~
    localStorage.getItem("cve20269999_poc_fs");      // crashing fragment shader
    localStorage.getItem("cve20269999_crashes");     // crash event log
    
  8. Minimizza e ritesta lo shader che crasha in isolamento (5+ esecuzioni consecutive) per confermare il determinismo.
  9. Conferma la causa principale con una build ASAN prima di attribuire qualsiasi cosa a CVE-2026-9999 — vedi §8.

Uno snapshot live di un'esecuzione sospetta è visibile anche su chrome://gpu e nella Console di macOS (report di crash del processo GPU).


7. Interpretazione dei risultati / falsi positivi noti

  • WEBGL_context_lost ≠ vulnerabilità. Il watchdog GPU di Chrome termina gli shader a lunga esecuzione (il trigger loop-unroll-dos e le iterazioni di fuzz con conteggi di loop enormi sono progettati per essere lenti). Elimina il rumore: riduci SH_ITER, oppure conferma che qualsiasi crash candidato si riproduca rapidamente (< 1 s per iterazione).
  • Un crash reale di memory safety dovrebbe riprodursi in modo deterministico partendo dallo shader minimizzato e mostrare una firma di crash distinta nella Console (es. EXC_BAD_ACCESS) piuttosto che una terminazione del watchdog.
  • Solo un report ASAN che individua il backend Metal di ANGLE è una prova solida di aver trovato questo bug piuttosto che un inconveniente non correlato del driver.

8. Conferma della causa principale: build ASAN (opzionale ma fortemente consigliata)

Compila una revisione vulnerabile di 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

Quindi esegui lo shader minimizzato che causa il crash con la validazione dell'API Metal abilitata:

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

La traccia ASAN indicherà l'esatta funzione ANGLE/Metal e confermerà se il crash corrisponde al componente della CVE [1]. (A valle: quando il commit del fix per 148.0.7778.216 sarà visibile, esegui il diff di third_party/angle/src/libANGLE/renderer/metal/ per individuare la vera causa principale e sostituire l'approccio di fuzzing con un trigger deterministico.)


9. Limitazioni

  • Non esiste una causa principale pubblica né un PoC pubblico. L'issue Chromium è riservata ("Permissions Required") [1]; questo harness è guidato da ipotesi.
  • Nessuno sfruttamento noto in-the-wild. L'arricchimento SSVC di CISA (2026-05-29) registra exploitation: none [1].
  • Impatto limitato alla sandbox [1] — questo PoC, anche se produce esecuzione di codice, affronta solo la fase del processo in sandbox di una reale catena di attacco.
  • Target solo macOS [1]; non trarre conclusioni da esecuzioni su altre piattaforme.

10. Sicurezza e aspetti legali

Esegui i test solo su macchine di tua proprietà o per le quali hai l'esplicita autorizzazione. L'harness compila intenzionalmente shader avversari per mandare in crash un processo grafico — aspettati terminazioni del processo GPU. Tieni la build vulnerabile del browser lontana dalle reti di produzione.


11. Riferimenti

[1] NVD — CVE-2026-9999: https://nvd.nist.gov/vuln/detail/CVE-2026-9999 * Avviso del vendor (blog Chrome Releases, aggiornamento del canale Stable): https://chromereleases.googleblog.com/2026/05/stable-channel-update-for-desktop_0877304591.html * Issue Chromium 513364480 (accesso limitato): https://issues.chromium.org/issues/513364480

Scarica lo strumento