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
Strumenti/GitHubGitHub/zhuowei/cheese
Sicurezza AndroidSicurezza Sistemi EmbeddedEscalation di PrivilegiAnalisi delle VulnerabilitàExploitReverse EngineeringSicurezza MobileSicurezza HardwareAnalisi del FirmwareBinary Exploitation
GitHubzhuowei/cheese
268591 anno faRevisionato da Kitploit

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

cheese

CVE-2025-21479 proof-of-concept, penso.

Vedi Repository

Exploit di root per Quest 3/3S per l'aggiornamento del 7 agosto 2025 e precedenti, basato su CVE-2025-21479.

screenshot di Magisk, Cheese e Termux con una shell di root

Avvertenza:

  • Il rooting è pericoloso. Se brickate un Quest 3/3S, non c'è modo di ripararlo.
  • Questo disabilita tutta la sicurezza durante il root temporaneo.
  • NON eseguire app o navigare su siti web di cui non ti fidi.
  • NON scrivere sulla partizione di boot o di sistema. BRICKERAI.
  • NON utilizzare la funzione "Installa" di Magisk.
  • Potresti voler eseguire il backup del tuo deviceKey, Meta Access Token e Oculus Access Token dopo il root.

Download

Puoi scaricare un APK nella sezione Release.

Guida al root

Vedi la guida di FreeXR per il root del Quest 3/3S.

Unisciti al Discord di FreeXR per maggiori informazioni.

Versioni supportate

  • Quest 3: v79 5115411.12900.520 (7 agosto 2025) e precedenti, fino circa alla versione v71.
  • Quest 3S: v79 117688.9900.610 (6 agosto 2025) e precedenti, fino circa alla versione v71.

Nessuna versione più recente è supportata. (Le versioni precedenti possono essere supportate con più lavoro.)

Versioni non supportate

Meta ha corretto CVE-2025-21479 in queste versioni e in qualsiasi versione successiva. NON saranno MAI supportate.

  • Quest 3: v79 5115411.13420.520 (10 agosto 2025)
  • Quest 3S: v79 117688.10380.610 (10 agosto 2025)

Contiene codice da:

  • adrenaline di Project Zero
  • adreno_user di m-y-mo
  • Freedreno di Mesa
  • shellcode di Longterm Security
  • Magisk di topjohnwu e degli sviluppatori di Magisk.

Sorgente

Questo repository contiene il sorgente per l'eseguibile da riga di comando cheese.

Il repository cheese-app contiene il sorgente per l'app.

Ringraziamenti

Questo si basa su articoli di altri ricercatori sulla GPU Adreno: utilizza codice da:

  • Adrenaline di Project Zero/Ben Hawkes
  • adreno_user di GitHub Security/Man Yue Mo
  • kilroy di Freedreno/Rob Clark

Ulteriori informazioni sul firmware delle GPU Adreno, incluso come fare diff del firmware e come funziona il firmware, provengono dalla documentazione afuc di Rob Clark, Connor Abbott e altri contributori di Freedreno/Turnip.

Grazie agli sviluppatori di XRBreak e FreeXR per tutto il loro aiuto e contributi.

====

Proof-of-concept per CVE-2025-21479, che dimostra che colpisce solo i dispositivi Adreno A7xx (Snapdragon 8 Gen 1 / XR2 Gen 2 e successivi).

Questo testa solo se il dispositivo è vulnerabile - ottenere qualcosa di interessante richiederebbe più sforzo.

Su dispositivi Adreno A7xx non patchati, l'esecuzione dovrebbe stampare:

root@kitploit:~
0 0

E se esegui adb bugreport, nel kernel dmesg, vedrai:

root@kitploit:~
<2>[146532.566695][  T933] kgsl kgsl-3d0: GPU PAGE FAULT: addr = 4000031004 pid= 0 name=(null) drawctxt=1111638594 context pid = 0
<2>[146532.566756][  T933] kgsl kgsl-3d0: context=gfx3d_user TTBR0=0x1234567841414141 (write unknown fault)
<2>[146532.566783][  T933] kgsl kgsl-3d0: FAULTING BLOCK: CP

Su dispositivi Adreno A6xx, l'esecuzione stampa:

root@kitploit:~
41414141 42424242

https://notnow.dev/notice/AvIZRBttG7DsDhx9hw

I dispositivi Adreno A7xx patchati (es. dispositivi Samsung dopo l'aggiornamento di sicurezza di maggio 2025) dovrebbero stampare anche questo, ma non l'ho testato.

Come usare

root@kitploit:~
# adjust path to point to your Android NDK
bash build.sh
adb push cheese /data/local/tmp
adb shell /data/local/tmp/cheese

Come funziona

https://notnow.dev/notice/Av4sfoQjyrxogkZ6Ya

Questo esegue un buffer di comandi sulla GPU Adreno (usando una versione modificata del codice Adrenaline di Project Zero)

Esegue CP_SET_MODE - questo abilita l'esecuzione immediata degli stati di disegno.

Esegue CP_SET_DRAW_STATE - questo imposta IB_LEVEL a 0x4, poi chiama un buffer di istruzioni.

All'interno di CP_SET_DRAW_STATE, esegue CP_SMMU_TABLE_UPDATE.

Ecco la gestione del firmware di CP_SMMU_TABLE_UPDATE:

root@kitploit:~
CP_SMMU_TABLE_UPDATE:
// get IB level
and $02, $12, 0x3
// if not 0 (kernel ring buffer), go to CP_NOP
brne $02, 0x0, #l1873
<actual SMMU modify code >

Quindi con IB_LEVEL=4, mascherando 4 con 3 si ottiene 0, che supera il controllo per il ring buffer del kernel.

Quindi puoi cambiare le tabelle delle pagine e causare un errore della GPU.

Come ho fatto il diff della patch

Ho fatto il diff di diversi firmware Samsung Galaxy usando il disassemblatore afuc di Freedreno.

Il firmware del Galaxy S24 è stato il più utile, poiché il suo firmware GPU differisce solo per una versione - la correzione di sicurezza:

https://notnow.dev/notice/AuueszvUVUQnWqMQeO

https://notnow.dev/notice/Av0kDfOUPKhqHyjyxE

Galaxy S24 firmware: gen70900_sqe.fw

  • April update (S921USQU4BYD9): v675
  • May update (S921USQS4BYE4): v676

https://notnow.dev/notice/Av0a7wUouVSa3EKkE4

Il diff del firmware Adreno del Galaxy S24 tra v675 e v676 mostra un tipo di diff:

root@kitploit:~
        0163: b80300a4  CP_ME_INIT:
        0163: b80300a4  fxn355:
        0163: b80300a4  cread $03, [$00 + 0x0a4]
-       0164: 2a440003  and $04, $12, 0x3
+       0164: 2a440007  and $04, $12, 0x7
        0165: 98641813  ushr $03, $03, $04
        0166: c860004a  brne $03, b0, #l432
        0167: 01000000  nop

Ogni accesso a $12 ora fa AND con 0x7 invece di 0x3. Non ci sono altre modifiche.

https://gist.github.com/zhuowei/46a68b9ee53589cdeaa40c11d15d895f

Il registro $12 sembra essere il livello IB: https://gitlab.freedesktop.org/mesa/mesa/-/blob/c0f56fc64cad946d5c4fda509ef3056994c183d9/src/freedreno/afuc/README.rst#id23 https://gitlab.freedesktop.org/mesa/mesa/-/blob/c0f56fc64cad946d5c4fda509ef3056994c183d9/src/freedreno/afuc/README.rst#id29

Che seleziona quale coda di comandi di disegno verrà letta. https://gitlab.freedesktop.org/mesa/mesa/-/blob/c0f56fc64cad946d5c4fda509ef3056994c183d9/src/freedreno/afuc/README.rst#id31

L'hardware Adreno 7xx supporta 5 code (RB (ring buffer del kernel, privilegiato), IB1, IB2, IB3 o SDS): https://cs.android.com/android/platform/superproject/main/+/main:external/mesa3d/src/freedreno/registers/adreno/adreno_control_regs.xml;l=327;drc=c0867f48117dc2c18b1ae689235cb1f60b237600

https://notnow.dev/notice/Av0kDfOUPKhqHyjyxE

Penso che questo diff sia CVE-2025-21479. Sembra che colpisca solo i dispositivi Adreno A7xx (Snapdragon 8 Gen 1 e successivi). Forse il bollettino Qualcomm è sbagliato?

  • A6xx ha 4 livelli IB: RB, IB1, IB2 e SDS: SDS=0x3
  • A7xx aggiunge IB3: ora ci sono 5 livelli IB: RB, IB1, IB2, IB3 e SDS=0x4.
  • SDS ora è 0x4, quindi mascherando con 0x3 si ottiene 0x0.

Immagino, su un dispositivo Adreno A7xx:

  • se in qualche modo potessi eseguire comandi al livello IB 4 (SDS) con CP_SET_DRAW_STATE
  • e trovare un comando che controlla il livello IB = RB (ring buffer fornito dal kernel), come CP_SMMU_TABLE_UPDATE
  • puoi ingannarlo per bypassare il controllo

Secondo il post del blog di Project Zero, l'istruzione CP_INDIRECT_BUFFER chiama un buffer indiretto di istruzioni del processore di controllo,

Quando un'app vuole usare la GPU, il RB (ring buffer del kernel) del kernel conterrà un comando CP_INDIRECT_BUFFER che chiama un buffer indiretto fornito dall'utente - IB1. Questo buffer utente può chiamare i propri buffer indiretti: IB2. Su A7xx, c'è anche IB3.

Inoltre, sia su A6xx che su A7xx, c'è SDS, che non viene inserito da buffer indiretto, ma da CP_SET_DRAW_STATE.

https://cs.android.com/android/platform/superproject/+/android15-qpr2-release:external/mesa3d/src/freedreno/decode/cffdec.c;l=3030;drc=0dc791ed57dacf9fe3df694d7f285a8d9f942fa7 https://cs.android.com/android/platform/superproject/+/android15-qpr2-release:external/mesa3d/src/freedreno/decode/cffdec.c;l=2283;drc=0dc791ed57dacf9fe3df694d7f285a8d9f942fa7

A6xx ha RB, IB1, IB2 e SDS. CP_SET_DRAW_STATE imposta il livello IB a 0x3: in a650_sqe.fw.v114 del firmware Galaxy Fold 3:

root@kitploit:~
mov $03, 0x3
or $12, $12, 0x20
call #fxn1132 // there's a branch delay slot, so this isn't executed yet...
cwrite $03, [$00 + @IB_LEVEL]

Ma A7xx ora ha RB, IB1, IB2, IB3 o SDS. CP_SET_DRAW_STATE ora imposta il livello IB a 0x4:

root@kitploit:~
mov $03, 0x4
cwrite $03, [$00 + @IB_LEVEL]

0x4 & 0x3 = 0x0.

https://cs.android.com/android/platform/superproject/main/+/main:external/mesa3d/src/freedreno/registers/adreno/adreno_control_regs.xml;l=327;drc=c0867f48117dc2c18b1ae689235cb1f60b237600

Quindi il codice che controlla il livello IB corrente penserà che SDS (set draw state) sia RB (ring buffer del kernel), e comandi come CP_SMMU_TABLE_UPDATE permetteranno l'esecuzione.

Scarica lo strumento