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-2025-21479-iqoo11pro — Note di riproduzione per CVE-2025-21479 (Qualcomm Adreno GPU) per vivo iQOO 11 Pro (PD2254) - ricerca autorizzata | Kitploit
Strumenti/GitHubGitHub/type010/cve-2025-21479-iqoo11pro
Sicurezza AndroidEscalation di PrivilegiAnalisi delle VulnerabilitàExploitReverse EngineeringSicurezza MobileAnalisi del FirmwareBinary Exploitation

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
GitHub
type010/cve-2025-21479-iqoo11pro

cve-2025-21479-iqoo11pro

Note di riproduzione per CVE-2025-21479 (Qualcomm Adreno GPU) per vivo iQOO 11 Pro (PD2254) - ricerca autorizzata

Vedi Repository
6 giorni faNon ancora revisionato

Replica di CVE-2025-21479: root temporaneo su vivo iQOO 11 Pro (PD2254)

Ricerca di sicurezza autorizzata su dispositivi di propria proprietà. CVE-2025-21479 è una vulnerabilità del Qualcomm Adreno GPU divulgata pubblicamente, corretta (2025-08) e inclusa nel catalogo CISA KEV. Questo documento descrive l'intero processo di replica del root temporaneo su iQOO 11 Pro e la consegna finale.

1. Panoramica della vulnerabilità

  • CVE: CVE-2025-21479 (CVSS 8.6, CWE-863 Incorrect Authorization)
  • Componente: firmware GPU Qualcomm Adreno (a740_sqe.fw)
  • Causa principale: difetto nella condizione di filtro dell'istruzione microcodice v675 and $04, $12, 0x3 (nella versione corretta 0x7), che consente a un flusso di comandi in spazio utente di aggirare i controlli di autorizzazione ed eseguire operazioni GPU privilegiate (hijacking della tabella di pagine SMMU), ottenendo infine lettura/scrittura arbitraria della memoria fisica
  • Impatto: serie Adreno A7xx (Snapdragon 8 Gen 1/2/3, ecc.)
  • Correzione: bulletin Qualcomm 2025-06 / security patch Google 2025-08 (firmware v676+)

2. Dispositivo target

Il firmware di Android 16 (16.3.10.1) è corretto; questa replica è valida esclusivamente per Android 15 (15.2.12.2).

3. Fonti della replica

  • zhuowei/cheese (Quest 3/3S, Adreno 740)
  • ma4the/omae-wa-cheese-da (Galaxy Z Flip5, SM8550/Adreno 740 v675)

4. Lavoro di porting

4.1 Verifica della disponibilità della vulnerabilità (offline)

  • Estratto a740_sqe.fw dal pacchetto OTA completo: 75.380 byte; la ricerca del pattern di istruzione vulnerabile 0300 422a (and $04,$12,0x3) ha prodotto 3 corrispondenze → non corretto
  • Nel pacchetto Android 16 lo stesso file non contiene il pattern → corretto

4.2 Estrazione dei materiali del kernel (offline)

  • boot.img → kernel.raw → vmlinux-to-elf per il ripristino dei simboli
  • Simboli chiave: _text=0xffffffc008000000, _stext=0xffffffc008010000, swapper_pg_dir, selinux_state, init_task
  • Offset delle strutture BTF (task_struct / mm_struct / cred)
  • Verifica KASLR: _stext fisico fissato a 0xa8010000 (PHYS_OFFSET=0xA8000000, layout standard SM8550), verificato lato VMLINUX a 0xffffffc008010000

4.3 Punti chiave del porting (rispetto a omae-wa-cheese-da)

  1. Costanti KASLR: i VA di swapper_pg_dir / init_task / selinux_state sostituiti con i valori A15
  2. Bypass di SELinux: scrittura fisica di selinux_state.enforcing=0. Verificato che il kernel A15 del PD2254 ha CONFIG_SECURITY_SELINUX_DEVELOP=y (in kallsyms sono presenti sel_write_enforce/enforcing_setup); enforcing_enabled() legge il campo a runtime → la scrittura ha effetto e getenforce mostra Permissive
  3. Adattamento dei candidati GPU spray (critico): i candidati Samsung (0xbe..-0xfe..) ricadono nella zona riservata del dispositivo vivo da 2-4 GB; >4 GB (0x100000000) innesca un fault SMMU della GPU e il riavvio. Strategia combinata = cluster verificato 0xfebeb000 + candidati adiacenti da 2-4 GB + candidati sparsi nella fascia alta 5-11 GB → tasso di successo notevolmente aumentato
  4. Ottenimento del root (solo caps, contrapposizione centrale all'anti-root di vivo): vr.ko di vivo (modulo incorporato in vendorboot) tramite hook kprobe/tracepoint + thread daemon uccide qualsiasi processo con uid=0, e il modulo è auto-nascosto, con verifica vermagic. Per questo l'uid non viene azzerato: si riscrivono fisicamente i bit di capability nella struct cred (uid mantenuto a 2000 + tutte le caps + PR_SET_KEEPCAPS/) → il set completo di capacità viene preservato attraverso gli exec, equivalente a root, senza attivare il watchdog

5. Risultati della verifica (su dispositivo reale)

Log di successo (prima esecuzione, dispositivo inizialmente in Enforcing, percorso di scrittura fisica di enforcing):

root@kitploit:~
phyaddr: 0xfebeb000 (attempt 1/27)        # spray 候选命中
GPU R/W ready                             # 任意物理读写建立
found _stext at 0xa8010000                # KASLR 泄漏(扫描路径;显式 CHEESE_STEXT_PA 时无此行)
FW symbols resolved
stext = 0xa8010000                        # 物理 _stext = VA - 0xffffffc000000000 + 0xA8000000
SELinux enforcing overwrite verified (readback=1 enforce=0)
self creds: full caps granted (uid=2000 kept, watchdog dodge)
root shell (uid=2000, full caps kept)...

Se eseguito una seconda volta nella stessa sessione (SELinux già permissivo), la riga diventa SELinux already permissive.

6. Utilizzo

root@kitploit:~
# 设备刷入 Android 15 (15.2.12.2) 后:
adb push cheese /data/local/tmp/
adb shell chmod 755 /data/local/tmp/cheese
adb shell CHEESE_STEXT_PA=0xa8010000 /data/local/tmp/cheese
# 完成后当前 adb shell 会话即为 root shell(uid=2000 + 全 caps),SELinux 宽容模式

Variabili d'ambiente:

Nuovi tentativi automatici: bash cheese_auto.sh (esecuzione in loop, rilevamento di riavvii offline, log su disco).

7. Note

  • Root temporaneo: va rieseguito dopo ogni riavvio; SELinux torna a Enforcing
  • Il GPU spray è di natura probabilistica: in caso di fallimento basta riprovare (con i candidati combinati il tasso di successo al primo tentativo è alto)
  • Alcuni candidati della fascia alta possono innescare un fault GPU e causare il riavvio del dispositivo (innocuo; dopo il riavvio si ritenta automaticamente)
  • Limitazione nota: vr.ko di vivo uccide i processi con uid=0 e il modulo è auto-nascosto; non è stata implementata la persistenza / l'integrazione con KernelSU (i moduli KernelSU non possono essere caricati con insmod perché il kernel non esporta i simboli, vedi appendice)
  • Da usare esclusivamente per ricerca di sicurezza autorizzata su dispositivi di propria proprietà

8. Elenco dei file

  • cheese: artefatto compilato (ELF Android aarch64, NDK r28, distribuito come binario, sorgenti non pubbliche)
  • cheese_auto.sh: script per i nuovi tentativi automatici
  • README.md: questo documento

Appendice: meccanismo anti-root di vivo (vr.ko)

  • Fonte: vr.ko all'interno di vendorboot.img, in lib/modules/5.15-gki/vr.ko (389 KB)
  • Meccanismo: hook kprobe / tracepoint + thread daemon che monitora e uccide i processi con uid=0; dopo il caricamento si auto-nasconde e rmmod non funziona
  • Conclusioni del contrasto: setuid normale, modifica fisica della cred con uid=0 ed eredità da parte dei processi figli vengono tutti uccisi → l'unico percorso stabile è solo caps (uid≠0 + tutte le caps)

Dichiarazione di esclusione di responsabilità

Questo repository è destinato esclusivamente a scopi di ricerca sulla sicurezza e formazione; tutti i test sono stati eseguiti su dispositivi di proprietà dell'autore. Utilizzare solo nell'ambito di un'autorizzazione legittima; l'utilizzatore si assume ogni rischio.

Scarica lo strumento
CampoValore
Dispositivovivo iQOO 11 Pro (PD2254 / V2254A)
SistemaAndroid 15, PD2254B_A_15.2.12.2.W10
Kernel5.15.178-g3dc7c01077b8-dirty
SoCSnapdragon 8 Gen 2 (SM8550 / kalama)
GPUAdreno 740, firmware a740_sqe.fw v675 (versione vulnerabile)
SECBIT_KEEP_CAPS
  • Alternativa: CHEESE_ZERO_IDS=1 per il vecchio percorso (uid azzerato, vivo lo ucciderebbe, solo per debug)
Elemento verificatoRisultato
getenforcePermissive
/sys/fs/selinux/enforce0
Capacità del processoCapEff=ffffffffffffffff (set completo di capacità)
Shell di rootaccesso a sh, disponibili insmod / lettura e scrittura di file arbitrari
VariabileFunzione
CHEESE_STEXT_PASpecifica l'indirizzo fisico di _stext (default 0xa8010000, fallback automatico alla scansione in caso di verifica fallita)
CHEESE_ATTEMPTSpecifica l'indice del candidato di indirizzo fisico
CHEESE_ROUNDSNuovi tentativi automatici su più round
CHEESE_NO_RETRYDisabilita i nuovi tentativi automatici
CHEESE_ZERO_IDSSe impostato a 1 azzera anche uid/gid (vecchio comportamento, attiva il watchdog di vivo, solo per debug)
ROOT_CMDEsegue direttamente il comando specificato dopo l'elevazione dei privilegi (in combinazione con il percorso cold-patch di cap_capset)