Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-5281-CVE-2026-11057-fullchain — Full-chain exploit per Android Chromium che combina la info leak di CVE-2026-11057 e la use-after-free di CVE-2026-5281 per ottenere il vtable hijack e l'esecuzione arbitraria di codice. | Kitploit
Strumenti/GitHubGitHub/jaf0rk/cve-2026-5281-cve-2026-11057-fullchain
Sicurezza AndroidFramework di ExploitAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza MobileBinary Exploitation
GitHub

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
jaf0rk/cve-2026-5281-cve-2026-11057-fullchain

CVE-2026-5281-CVE-2026-11057-fullchain

Full-chain exploit per Android Chromium che combina la info leak di CVE-2026-11057 e la use-after-free di CVE-2026-5281 per ottenere il vtable hijack e l'esecuzione arbitraria di codice.

Vedi Repository
402 mesi faNon ancora revisionato

CVE-2026-5281+CVE-2026-11057 catena completa Android

Dispositivo

Pixel 7 Android 16 ARM64

Versione di Chromium

commit 994c846bbd7a35241ba7c08158c13d66412a6993 (HEAD -> 146.0.7680.111, tag: 146.0.7680.111)
Author: Roger McFarlane <[email protected]>
Date:   Mon Mar 9 12:48:07 2026 -0700

Descrizione

Approccio di sfruttamento

Questo repository combina CVE-2026-11057 (memoria dell'immagine del glifo non inizializzata in Skia) e CVE-2026-5281 (use-after-free di DeviceInfo nel wire server di Dawn) in una catena completa. Tutte le modifiche sono lato renderer; il codice del processo GPU è invariato:

  1. Info leak (CVE-2026-11057) — Attiva un buffer dell'immagine del glifo non inizializzato tramite il rendering del testo su canvas, rilegge i puntatori dall'heap del processo GPU, li convalida con esecuzioni aritmetiche, deriva la base del pool PartitionAlloc e calcola il target falso del Server M = POOL + 0x202A08000 (offset calibrato).

  2. CC spray — createBuffer(label="CCM:<m>:<n>") attiva l'iniezione di 3000 ChunkedCommands incompleti (bucket da 10KB, remainingSize=1, mantenuti vivi nel mChunkedCommands del wire server). Il payload riempie la regione attorno a M con un falso Server disposto per Android arm64: vptr di MutexProtected a +0xB20, ChunkedCommandSerializer a +0xB50/+0xB58, falso CommandSerializer/vtable a +0xC00/+0xD00.

  3. Trigger 5281 + occupy — queue.writeBuffer(buffer, 0x414141, ...) chiama prima Unregister(Device) per liberare il DeviceInfo da 16 byte, poi inietta un ChunkedCommand occupy da 16 byte per recuperare quello slot e sovrascrivere info->server con M, e infine attiva un errore di validazione con un offset fuori dai limiti.

  4. Callback pendente → hijack della vtable — La callback dell'errore non catturato dereferenzia info->server = M (falso Server): i mutex azzerati superano il controllo, l'esecuzione raggiunge OnUncapturedError → SerializeCommand, e la chiamata indiretta relativa alla vtable colpisce la nostra falsa vtable, fornendo pc = fake_vtable + offset int32 controllato, dimostrato da pc = 0x7641414141.

Nota: Chromium su Android arm64 utilizza vtable relative (-fexperimental-relative-c++-abi-vtables); le voci della vtable sono offset relativi a 32 bit anziché puntatori assoluti a funzione, quindi il PoC utilizza un offset int32 controllato come marcatore nel punto di hijack della vtable.

Sul dispositivo di test, la catena completa raggiunge il crash da hijack della vtable con un tasso di successo quasi del 100%; la fase di leak può occasionalmente richiedere diversi ricaricamenti automatici prima di riuscire.

Ruoli dei file

  • SkStrike.cpp.patch — Trigger del leak di CVE-2026-11057. FlattenGlyphsByType() riscrive il payload dello strike in modo che il processo GPU crei uno SkGlyph con fImage == nullptr, leggendo infine un buffer dell'immagine non inizializzato per far trapelare puntatori dell'heap.
  • Device.cpp.patch — CC spray del client wire di Dawn. APICreateBuffer() analizza l'etichetta CCM:, costruisce il payload del falso Server per Android arm64 e inietta N ChunkedCommands incompleti che restano vivi nel processo GPU.
  • ApiProcs.cpp.patch — Trigger + occupy di CVE-2026-5281. Sull'offset magico 0x414141 di QueueWriteBuffer, chiama Unregister(Device) per liberare DeviceInfo, inietta un ChunkedCommand da 16 byte per recuperare lo slot e impostare info->server = M, quindi procede con un offset fuori dai limiti per attivare la callback pendente.
  • exploit.html — Orchestrazione della pagina: primitiva di leak (groom/draw/readCell/verifyRuns/derivePoolBase), CC spray e un trigger autonomo exploit5281(); in caso di fallimento ripulisce lo stato dello spray e ricarica in modo che le fasi non interferiscano.

Ambito della divulgazione

Questo ExP è divulgato solo fino al passaggio di hijack della vtable (target della chiamata indiretta controllato, pc = base+0x41414141). I passaggi dal salto controllato in poi, così come l'implementazione dell'RCE, sono mantenuti riservati e non sono inclusi in questo repository.

Exploit reale vs. PoC originale

Il mio exploit differisce dall'approccio del reporter originale in un modo fondamentale. L'exploit originale è stato ottenuto modificando il codice sorgente di PartitionAlloc nel processo GPU per disabilitare la randomizzazione degli indirizzi. Questo approccio è adatto solo a scopi di proof-of-concept. Al contrario, il mio exploit combina una vulnerabilità di divulgazione di informazioni per aggirare la randomizzazione degli indirizzi, consentendo un exploit pienamente funzionante che opera in ambienti reali.

Argomenti di build args.gn

# Set build arguments here. See `gn help buildargs`.
is_official_build = true
is_debug = false
symbol_level = 0
v8_symbol_level = 0
blink_symbol_level = 0
is_component_build = false  
proprietary_codecs = true   
ffmpeg_branding = "Chrome"  
dcheck_always_on =false
optimize_webui = true
android_static_analysis = "off"
target_os = "android"
target_cpu = "arm64"

# Disable PartitionAllocEventuallyZeroFreedMemory
disable_fieldtrial_testing_config = true

treat_warnings_as_errors = false

Riproduzione

  1. cd third_party/dawn
  2. git apply ApiProcs.cpp.patch
  3. git apply Device.cpp.patch
  4. cd ../skia
  5. git apply SkStrike.cpp.patch
  6. Compilare chromium
  7. Aprire Chrome su un dispositivo Android ed eseguire exploit.html
  8. Eseguire adb logcat | grep DEBUG sul PC

Nota

  1. Fare attenzione alla trappola di PartitionAllocEventuallyZeroFreedMemory. Quando è abilitata, azzera infine la memoria liberata. Questa funzionalità è disabilitata per impostazione predefinita. Nelle build Stable ufficiali è controllata da Finch di Google (field trial lato server) e Google generalmente non la attiva per la popolazione generale. Tuttavia, è spesso abilitata nelle build locali / non ufficiali e nei canali ufficiali Dev/Canary (soprattutto quando sono attive configurazioni di test dei field trial). Questo è un errore comune quando si sviluppano o si testano exploit contro build non Stable.
  2. Accedere a exploit.html tramite l'indirizzo di loopback 127.0.0.1. Altrimenti HTTP verrà considerato non attendibile e WebGPU non funzionerà
  3. In questo caso d'uso, il layout dell'heap della primitiva di leak si comporta particolarmente bene su Pixel 7, richiedendo solo 1–10 secondi. Riesce anche su Pixel 9, sebbene il processo richieda 2–3 minuti. Sebbene il layout dell'heap possa essere ulteriormente ottimizzato per una più ampia compatibilità con la maggior parte dei dispositivi Pixel—e tali miglioramenti siano già stati identificati—queste ottimizzazioni esulano dall'ambito di questo esperimento e non sono discusse qui.
Scarica lo strumento