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
ghostlock-oneplus — # GhostLock (CVE-2026-43499) exploit del kernel per dispositivi Android con bootloader bloccato | Kitploit
Strumenti/GitHubGitHub/joinchang/ghostlock-oneplus
Sicurezza AndroidEscalation di PrivilegiFramework di ExploitAnalisi delle VulnerabilitàPenetration TestingSicurezza MobileApprendimento e FormazioneBinary Exploitation
GitHubjoinchang/ghostlock-oneplus

ghostlock-oneplus

# GhostLock (CVE-2026-43499) exploit del kernel per dispositivi Android con bootloader bloccato

Vedi Repository
235461681 mese 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

GhostLock — Jailbreak per bootloader bloccato

Exploit del kernel per dispositivi Android con bootloader bloccato. Ottiene root temporaneo + installazione di KernelSU senza sbloccare il bootloader o modificare l'immagine di boot. Rilevamento automatico a runtime della versione del kernel con tabella degli offset multi-dispositivo.

GhostLock in esecuzione su OnePlus Ace 6T con KernelSU (LKM, modalità Jailbreak)

Vulnerabilità

CVE-2026-43499 — Use-After-Free in Futex PI (Priority Inheritance)

Interessa il kernel Linux 5.7 ~ 7.1. Corretto nelle versioni stabili 6.1.175, 6.6.140, 6.12.86. La maggior parte dei dispositivi Android rimane non corretta a settembre 2026.

La syscall pselect6 copia i dati di fd_set sullo stack del kernel. Se combinato con il meccanismo dei waiter futex PI, un frame dello stack liberato può essere riallocato come struttura rt_mutex_waiter. Il ribilanciamento dell'rb-tree durante la traversata della catena PI scrive quindi valori controllati su indirizzi arbitrari del kernel.

Dispositivi supportati

Verificati funzionanti

DispositivoSoCKernelRamo GKISHIFT
OnePlus Ace 6T (PLR110)SM88456.12.38android16-50
OnePlus 15 (CPH2745/2747/2749)SM88506.12.23android16-50
OnePlus 15 (PLK110)SM88506.12.58android16-60
Xiaomi 17 (pudding)SM88506.12.23 / 6.12.69android16-5 / android16-60
OnePlus 13 (IN2060)SM87506.6.89android15-8-2
OPPO Pad 4 ProSM87506.6.89android15-8-2

Offset estratti (in attesa di test sul dispositivo)

DispositivoSoCKernelNote
OnePlus 15T (PLZ110)SM88456.12.38Stesso kernel dell'Ace 6T
OPPO Reno10 Pro+ (CPH2521)SM84755.10.236waiter compatto 5.10, waiter word=0
Sony Xperia 1 IV (nagara)SM84505.10.218waiter compatto 5.10, waiter word=0
OPPO Find X9 Pro (PLG110)D94006.12.23MediaTek, android16-5
Vivo X200 Ultra (V2454A)SM87506.6.89ashmem C, hook tradizionali
Vivo X Fold3 Pro (PD2337)SM86506.1.124waiter compatto 6.1, waiter word=3
Vivo T4SM86506.1.145waiter compatto 6.1, waiter word=3

Non fattibili

La sovrapposizione dello stack di pselect richiede che il rt_mutex_waiter liberato finisca all'interno della regione stack_fds controllabile dall'utente (word 0–14). Il punto in cui finisce è determinato dai profili PGO/LTO del compilatore, non dalla versione del kernel. Vedi Layout dello stack.

DispositivoSoCKernelCausa principale
OPPO Find X9 UltraSM87506.12.58PGO elimina do_futex → waiter word=14
OnePlus 15 (PLK110)SM88506.12.69PGO inlina do_futex → waiter word=20
OnePlus 12SM86506.1.141PGO inlina do_futex → waiter word=13/19
OnePlus 13R / Ace 5SM86506.1.xOPLUS 6.1: waiter word=13
realme RMX5070SM66506.1.141OPLUS 6.1: waiter word=13
OPPO Pad 5 (OPD2502)MT68786.1.134OPLUS 6.1: waiter word=13
Motorola Edge 60 FusionMT68786.1.145Non-OPLUS 6.1: stesso risultato
iQOO Neo 10 CNSM86506.1.84frame do_futex 0xD0 → waiter word=-11
OPPO PKW110—5.15.180frame do_futex 0x140 → waiter word=-29
iQOO Z9 5G—5.15.178frame do_futex troppo grande
CPH2763 (OPPO)—6.1.115OPLUS 6.1: PGO inlinato, waiter word=24
iQOO 12SM86506.1.1456.1: waiter word=9, task/lock nell'area azzerata

Nota sulla fattibilità su 6.1: i kernel OPLUS 6.1 sono costantemente non fattibili a causa dell'inlining di do_futex da parte di PGO. Tuttavia, alcuni kernel 6.1 non OPLUS (vivo) mantengono la catena di chiamate standard e sono fattibili (vivo T4, X Fold3 Pro). La fattibilità deve essere verificata per singolo dispositivo.

Flusso dell'exploit

Due percorsi di root, selezionati automaticamente in base alle capacità del dispositivo:

Percorso A: Root UMH (preferito, dispositivi con ashmem C)

Richiede off_ashmem_misc_fops != 0 (ashmem C con miscdevice statico in BSS).

PI write (mode=4)  →  redirect miscdevice fops to fake fops
                   →  configfs r/w → pipe physrw (1-byte precise kernel r/w)
                   →  SELinux enforcing = 0 (single byte, no policycap corruption)
                   →  UMH: inject work_struct into system_unbound_wq
                   →  root script → ksud late-load → KSU installed

Disponibile su: OnePlus 13, OPPO Pad 4 Pro, dispositivi con ashmem 5.10/6.1 C. Non disponibile su ashmem Rust (6.12 GKI) — miscdevice allocato nell'heap.

Percorso B: scrittura PI diretta (fallback)

Write 1 (mode=1)  →  SELinux enforcing = 0 (8-byte write, corrupts adjacent bytes)
Write 2 (mode=2)  →  task->cred = init_cred (uid=0, all capabilities)
Root shell         →  ksud late-load → KSU → SELinux policy fix

Dopo W1+W2, l'exploit modifica il campo di configurazione del binario della policy SELinux (|= 0xC0000000 per ANDROID_NETLINK_ROUTE + GETNEIGH) e ricarica tramite /sys/fs/selinux/load per ripristinare la connettività di rete.

Modalità Bootstrap (telefono autonomo)

App (seccomp)  →  Write 1 → mini-adb TCP → adb shell: full exploit → root

Auto-Boot

Il launcher all'avvio è fornito dalla app separata GhostLock Anchor.

Fattibilità del layout dello stack

Con NFDS=320, core_sys_select alloca un buffer stack_fds di 256 byte sullo stack del kernel:

stack_fds:  0    5    10   14 | 15   20   25   29
            ├─in─┤─out─┤─ex──┤ ├res_in┤res_out┤res_ex┤
            ◄── USER CONTROLLED ──►│◄── KERNEL ZEROED ──►

L'exploit inserisce falsi campi waiter (task, lock) nelle bitmap di input fd_set. Per il waiter annidato 6.12 (14 word): word massima del waiter fattibile = 3. Per il waiter compatto 5.10/6.1 (10 word): word massima del waiter fattibile = 7.

La posizione del waiter dipende dalla profondità della catena di chiamate:

PatternCatena di chiamateFattibile
android16-5 (6.12)sys_futex → do_futex → fwrpi✅ waiter word=2
android16-6 (6.12.58)sys_futex → do_futex → fwrpi✅ waiter word=2
android16-6 (6.12.69 OPLUS)sys_futex → fwrpi (PGO inlined)❌ waiter word=20
android16-6 (X9 Ultra)sys_futex → fwrpi (PGO inlined)❌ waiter word=14
android15-8 (6.6)sys_futex → do_futex → fwrpi✅ waiter word=2 (SHIFT=-2)
vivo 6.1sys_futex → do_futex → fwrpi✅ waiter word=3
OPLUS 6.1sys_futex → fwrpi (PGO inlined)❌ waiter word=13+
5.10 OPLUSsys_futex → do_futex → fwrpi✅ waiter word=0

kernel_phys_load

Tutte le scritture nel kernel usano l'alias della mappa lineare. Il bootloader sceglie kernel_phys_load, che varia per SoC:

SoCkernel_phys_load
SM8845 (Ace 6T, 15T)0xa8000000
SM8750 (OnePlus 13, OPPO Pad 4 Pro)0xa8000000
SM8650 (vivo T4, X Fold3 Pro)0xa8000000
SM8850 (OnePlus 15, Xiaomi 17)0xc7800000

Un valore errato fallisce silenziosamente. Leggilo su un'unità con root:

su -c 'grep -i "Kernel code" /proc/iomem'   # c7810000-... → 0xc7800000

Esegui l'override a runtime: KPHYS=0xc7800000 /data/local/tmp/a/e

PSELECT_SHIFT

/data/local/tmp/a/e                        # Default (shift=0)
PSELECT_SHIFT=-2 /data/local/tmp/a/e       # OnePlus 13 (6.6)

KIMAGE_TEXT_BASE

Scarica lo strumento