
Proof-of-concept exploit per CVE-2026-3909, una vulnerabilità out-of-bounds in Chromium Skia, con patch e analisi del crash per un trigger affidabile in ambienti browser reali.
Questo repository contiene una proof-of-concept (PoC) per CVE-2026-3909 che può essere attivata in modo affidabile nel browser Chromium.
La correzione ufficiale di Skia per questa vulnerabilità includeva solo un caso di test dimostrativo semplificato:
Non può essere eseguita in un ambiente Chromium reale. La demo ufficiale è stata volutamente limitata e ha omesso le condizioni chiave di attivazione.
Questa PoC è basata sulla demo ufficiale ed è stata modificata per attivare la vulnerabilità in modo affidabile all'interno di un ambiente browser Chromium reale.
Questa PoC consiste in modifiche ai seguenti file:
raster_implementation.cc.patchPercorso: /src/gpu/command_buffer/client/raster_implementation.cc
SkChromeRemoteGlyphCache.cpp.patchPercorso: /src/third_party/skia/src/text/gpu/SkChromeRemoteGlyphCache.cpp
Oltre ai due file di patch esistenti, puoi anche aggiungere codice di debug all'interno della funzione DrawAtlas::hasID(). Questo ti consente di analizzare e osservare perché viene attivato l'abort.``` bool hasID(const skgpu::PlotLocator& plotLocator) { if (!plotLocator.isValid()) { return false; }
uint32_t plot = plotLocator.plotIndex();
uint32_t page = plotLocator.pageIndex();
// patch code
printf("[*] POC plot idx: %x fNumPlots: %x\n", plot, fNumPlots);
// origin code
uint64_t plotGeneration = fPages[page].fPlotArray[plot]->genID();
uint64_t locatorGeneration = plotLocator.genID();
return plot < fNumPlots && page < fNumActivePages && plotGeneration == locatorGeneration;
}
```bash
go install -v github.com/projectdiscovery/katana/cmd/katana@latest
katana -h
Questo mostrerà l'aiuto per lo strumento. Ecco tutti gli switch supportati.
Katana è un crawler web veloce basato su intestazioni scritto in Go.
USO:
katana [comando]
COMANDI DISPONIBILI:
completamento genera lo script di completamento automatico per la shell specificata
aiuto Aiuto su qualsiasi comando
versione versione
FLAG:
-aff, -campi-di-autenticazione stringa[] campi di autenticazione opzionali
-cs, -dimensione-crawl int numero massimo di richieste da crawler (predefinito 0)
-ct, -tempo-crawl int durata massima del crawl in secondi (predefinito 0)
-d, -profondità int profondità massima del crawl (predefinito 3)
-ef, -filtro-estensione stringa[] filtra le estensioni specificate
-em, -modalità-estensione stringa modalità di estensione (predefinito "blacklist")
-e, -estensione stringa[] estensioni da filtrare
-fs, -strategia-form stringa strategia di estrazione dei moduli (predefinito "auto")
-H, -intestazioni stringa[] intestazioni personalizzate
-hl, -limite-intestazioni int numero massimo di intestazioni da estrarre (predefinito 100)
-hs, -intestazioni abilita l'estrazione delle intestazioni
-i, -ignora stringa[] ignora gli URL specificati
-iq, -query-ignorata ignora le query negli URL
-irr, -ignora-robots ignora i file robots.txt
-jc, -crawl-javascript abilita il crawling dei file JavaScript
-jsl, -limite-javascript int numero massimo di file JavaScript da crawler (predefinito 100)
-kf, -campi-conosciuti stringa[] campi noti da estrarre
-m, -modalità-crawl stringa modalità di crawl (predefinito "crawl")
-nc, -nessun-colore disabilita i colori nell'output
-no, -nessun-output disabilita l'output
-o, -output stringa file di output
-p, -proxy stringa[] proxy HTTP/S da utilizzare
-q, -query stringa[] query da aggiungere agli URL
-rl, -limite-richieste int numero massimo di richieste al secondo (predefinito 150)
-s, -strategia stringa strategia di crawl da utilizzare (predefinito "breadth-first")
-sc, -campi-scope stringa[] campi di scope da estrarre
-silent mostra solo i risultati
-t, -timeout int timeout in secondi (predefinito 10)
-u, -url stringa[] URL da crawler
-v, -verbose mostra output dettagliato
-version mostra la versione
katana -u https://example.com
katana -u https://example.com -d 5
katana -u https://example.com -t 15
katana -u https://example.com -H "Authorization: Bearer token"
katana -u https://example.com -p http://127.0.0.1:8080
katana -u https://example.com -hs
katana -u https://example.com -kf "api_key,api_token"
katana -u https://example.com -sc "in_scope"
katana -u https://example.com -aff "auth_token"
katana -u https://example.com -jc
katana -u https://example.com -rl 100
katana -u https://example.com -o output.txt
katana -u https://example.com -silent
katana -u https://example.com -v
katana -u https://example.com -s "depth-first"
katana -u https://example.com -fs "regex"
katana -u https://example.com -em "whitelist"
katana -u https://example.com -ef "png,css"
katana -u https://example.com -e "php,asp"
katana -u https://example.com -i "https://example.com/ignore"
katana -u https://example.com -iq
katana -u https://example.com -irr
katana -u https://example.com -q "param=value"
katana -u https://example.com -cs 100
katana -u https://example.com -ct 60
katana -u https://example.com -hl 50
katana -u https://example.com -jsl 50
katana -u https://example.com -nc
katana -u https://example.com -no
katana -u https://example.com,https://example.org
katana -u https://example.com -p http://127.0.0.1:8080,http://127.0.0.1:8081