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-2026-43499 — PD2229B的43499(ghostlock)可行性研究 | Kitploit
Strumenti/GitHubGitHub/catxiaoshi/cve-2026-43499
Sicurezza AndroidEscalation di PrivilegiAnalisi delle VulnerabilitàExploitReverse EngineeringSicurezza MobileBinary Exploitation
GitHubcatxiaoshi/cve-2026-43499

cve-2026-43499

PD2229B的43499(ghostlock)可行性研究

Vedi Repository
101 mese faNon ancora revisionato

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

Riepilogo del fallimento dello sfruttamento di GhostLock su PD2229 (SM8475, 5.10.233 GKI)

一、Fatti relativi alla vulnerabilità e al dispositivo

1.1 Informazioni di base su CVE-2026-43499 (GhostLock)

VoceValore
Tipo di vulnerabilitàUse-After-Free sullo stack nel percorso rt_mutex / futex PI
Versione di introduzioneLinux 2.6.39-rc1 (maggio 2011, commit 8161239a8bcc)
Versione correttaMainline 7.1 (commit 3bfdc63936dd), rami stabili: 6.1.175 / 6.6.140 / 6.12.86 / 6.18.27 / 7.0.4
PrerequisitoCONFIG_FUTEX_PI=y (abilitato di default nei kernel mainstream)
CVSS7.8 High
Stabilità dello sfruttamento97% nella catena originale NebuSec, root in circa 5 secondi
Ricompensa kernelCTF$92.337 USD

Intervallo di kernel interessati:

  • 2.6.39 ≤ Linux < 6.1.175 ✅ Interessato
  • 6.2 ≤ Linux < 6.6.140 ✅ Interessato
  • 6.7 ≤ Linux < 6.12.86 ✅ Interessato
  • 6.13 ≤ Linux < 6.18.27 ✅ Interessato
  • 6.19 ≤ Linux < 7.0.4 ✅ Interessato
  • Android GKI 5.10 non incluso in alcun ramo di correzione → il 5.10.233 di PD2229 teoricamente interessato

1.2 Test effettivi sul dispositivo PD2229


二、Catena di sfruttamento ideale vs progresso effettivo su PD2229

2.1 Catena originale NebuSec (x86_64 / Pixel 10 riuscita)

root@kitploit:~
1. Bypass KASLR        → prefetch timing / PR_SET_MM_MAP auxv
2. Trigger UAF         → deadlock di dipendenza PI a tre thread → FUTEX_CMP_REQUEUE_PI restituisce -EDEADLK
3. Riciclo stack       → PR_SET_MM_MAP copia auxv nel frame dello stack del waiter
4. Scrittura limitata rb_erase   → sovrascrive inet6_protos[IPPROTO_UDP]
5. CEA + ROP           → dirottamento del flusso di controllo
6. Inversione core_pattern → shell root (tasso di successo 97%)

2.2 Progresso effettivo di ciascuna fase su PD2229


三、Risultati dell'enumerazione esaustiva della primitiva di riciclo stack (test effettivi su PD2229)

3.1 Calcoli chiave del layout dello stack frame

root@kitploit:~
Profondità totale del percorso futex:
  __arm64_sys_futex    0x90
  + do_futex           0xc0
  + futex_wait_requeue_pi  0x1b0
  = 0x300
Posizione waiter = SYS_SP - 0x300 + 0x20 = SYS_SP - 0x2e0

Percorso pselect:
  stack frame core_sys_select 0x1c0, stack_fds a sp+0x50
  Intervallo di copertura: a partire da SYS_SP - 0x1c0 + 0x50 = SYS_SP - 0x170
  Differenza dal waiter (SYS_SP - 0x2e0) di 0x170 (368 byte) → nessuna sovrapposizione

3.2 17 metodi di scrittura stack tentati

17/17 tutti falliti.

3.3 Causa principale del fallimento

Il layout dello stack prodotto dal compilatore GKI 5.10 di SM8475 su PD2229 (PGO + LTO + BOLT) fa sì che stack_fds di core_sys_select e rt_mutex_waiter di futex_wait_requeue_pi non si sovrappongano architetturalmente. Questo è un fatto oggettivo determinato dal compilatore, non un problema di tecnica di sfruttamento.

Il repository JoinChang afferma esplicitamente: "The pselect stack overlay only works when the freed rt_mutex_waiter lands within the user-controllable region of the stack_fds buffer" — PD2229 non soddisfa questa condizione.


四、Analisi comparativa dei repository di riferimento pubblici

NebuSec/CyberMeowfia — Framework di sfruttamento originale

  • Repository: https://github.com/NebuSec/CyberMeowfia
  • Target: x86_64 Linux / Pixel 10 (6.x GKI)
  • Riciclo stack: PR_SET_MM_MAP copia auxv nello stack del kernel
  • Tasso di successo: 97%, circa 5 secondi per [root shell]
  • Applicabilità a PD2229: ❌ PR_SET_MM_MAP intercettato con EPERM su Android

JoinChang/ghostlock-oneplus — Jailbreak BL OnePlus

  • Repository: https://github.com/JoinChang/ghostlock-oneplus
  • Dispositivi verificati:
    • OnePlus Ace 6T (PLR110, SM8845) — 6.12.38 GKI ✅
    • OnePlus 15 (PLK110, SM8845) — 6.12.23 GKI ✅
  • Punti tecnici:
    • Estrazione automatica offset: kallsyms (28) + BTF (57) + derivati (9) + costanti (12) = 103/103
    • Sovrapposizione stack pselect, SP diff = -64
    • PSELECT_SHIFT = -2
    • Catena di sfruttamento: futex UAF → waiter falsificato → pselect controlla lo stack → scrittura limitata rb_erase → selinux_state.enforcing=0 → sovrascrittura cred con init_cred
  • Dichiarazione esplicita di non fattibilità: "Not Feasible (stack layout incompatible)" — applicabile solo ai kernel in cui pselect stack_fds si sovrappone al waiter
  • Applicabilità a PD2229: ❌ Generazione kernel non corrispondente (6.12 vs 5.10) e layout stack non sovrapposto

p2p3p/GhostLock-for-OnePlus — Sfruttamento completo OnePlus 6.12

  • Repository: https://github.com/p2p3p/GhostLock-for-OnePlus
  • Verificato: OnePlus Ace 6T (SM8845, 6.12.38) ✅
  • Applicabilità a PD2229: ❌ Come JoinChang, generazione kernel non corrispondente

YuKongA/ghostlock-oplus — OPPO Find N5/X8

  • Repository: https://github.com/YuKongA/ghostlock-oplus
  • Kernel: 6.6.118 GKI
  • Applicabilità a PD2229: ❌ Generazione kernel non corrispondente

Adattamento OPPO Find X6 Pro (PGEM10) — 5.15.149

  • Dispositivo: SM8550, 5.15.149-android13, Android 15
  • Progresso: ✅ Bypass KASLR (perf_event_open + campionamento callchain); le fasi successive non hanno pubblicato uno sfruttamento completo
  • Significato: dimostra che il bypass KASLR è fattibile su GKI 5.15, ma la fase di riciclo stack non è stata verificata pubblicamente

pubglite55/oppo-ghostlock — OPPO Find N2

  • Repository: https://github.com/pubglite55/oppo-ghostlock
  • Dispositivo: OPPO Find N2 (CPH2413, SM8475)
  • Kernel: 5.10.236-android12-9-o-g74d132f4467a
  • Android: 16 (BP2A.250605.015)
  • Implementato:
    • ✅ Firefox CVE-2026-10702 AAW (Stage 1)
    • ✅ Bypass KASLR (calcolo diretto di kaslr_base)
    • ✅ Trigger GhostLock FUTEX (FUTEX_CMP_REQUEUE_PI ret=0)
    • ✅ Leak mm_struct KernelSnitch
    • ✅ Heap spray sk_buff (invio 4/4 riuscito)
    • ✅ Verifica 70+ offset con IDA Pro
  • Blocco principale:

    "pselect non può manipolare la struttura waiter — con NFDS >336 fd_set è sull'heap; configfs/ashmem non supportati (SET_NAME di ashmem troncato); tutti gli altri percorsi di scrittura kernel bloccati (/proc/self/mem, /dev/mem, binder)"

  • Relazione con PD2229: Stessa piattaforma e stessa generazione (SM8475, 5.10.236 vs 5.10.233), differenza di sole 3 versioni minori, affronta esattamente le stesse limitazioni architetturali

harry1080/oppo-ghostlock — OPPO Find N2

  • Repository: https://github.com/harry1080/oppo-ghostlock
  • Dispositivo: OPPO Find N2 (CPH2413, SM8475)
  • Kernel: 5.10.236-android12-9-o-g74d132f4467a
  • Android: 16 (BP2A.250605.015)
  • Dichiarazione pubblica della community:

    "pixel10 能利用的版本的 pselect stack_fds 正好和 rt_waiter 在内核栈上重合,这个部分实际上是最麻烦的地方,OPPO findN2 的内核这两个调用的栈部分完全不重合,或者重合也不可控,得找另外的控制栈的方法,要换其他可控内核栈的系统调用来构造栈,简单适配偏移是不可能成功的,oppo 的 rt_waiter 完全与 pselect stack_fds 不重合"

  • Relazione con PD2229: Anche PD2229 è SM8475 5.10 GKI, la conclusione è pienamente applicabile

4.3 Tabella riepilogativa comparativa dei repository di riferimento


五、Simboli chiave del kernel e offset (misurati su vmlinux PD2229)

Base statica 0xffffffc008000000, aggiungere lo slide KASLR a runtime.

Struttura rt_mutex_waiter (personalizzazione vivo 5.10.233)

root@kitploit:~
struct rt_mutex_waiter {
    uint64_t private;           // +0x00  (campo privato vivo)
    struct rb_node {
        uint64_t rb_parent_color; // +0x08
        uint64_t rb_right;        // +0x10  (ordine invertito da vivo)
        uint64_t rb_left;         // +0x18
    } tree;
    struct task_struct *task;   // +0x20
    struct rt_mutex *lock;      // +0x28
};
// Dimensione totale 0x30 (48 byte)

六、Implementato vs da implementare

✅ Infrastruttura implementata

  1. Bypass KASLR — perf_event_open + campionamento callchain (stesso metodo di OPPO Find X6 Pro 5.15.149)
  2. Trigger UAF — Deadlock PI a tre thread, FUTEX_CMP_REQUEUE_PI restituisce -EDEADLK
  3. Tabella simboli completa — 103+ simboli verificati con IDA (secondo la metodologia di estrazione 103/103 di JoinChang)
  4. Layout della struttura rt_mutex_waiter — Offset personalizzati vivo confermati
  5. Analisi precisa del layout degli stack frame — Calcolo completato delle profondità dei percorsi futex e pselect/io_uring
  6. Esclusione esaustiva di 17 candidati per il riciclo stack — Matrice completa di "non fattibilità" stabilita

❌ Non implementato (blocco principale)

  1. Primitiva di riciclo stack — Layout stack del compilatore GKI 5.10 SM8475 architetturalmente inutilizzabile
  2. Primitiva di scrittura limitata — rb_erase non attivabile a causa del fallimento del riciclo stack
  3. Tutte le fasi successive — Blocco a cascata

七、Conclusione finale

⚠️ GhostLock (CVE-2026-43499) non è sfruttabile su PD2229 (vivo X Fold+, SM8475, 5.10.233 GKI, Android 15 OriginOS 5).

La causa principale è il layout dello stack prodotto dal compilatore GKI 5.10 di SM8475 (PGO+LTO+BOLT), che rende i frame dello stack di tutte le syscall note architetturalmente non sovrapposti a rt_mutex_waiter. Questo è un fatto oggettivo determinato dal compilatore, non un problema di tecnica di sfruttamento.

Tutti i casi di sfruttamento riuscito riguardano GKI 6.6/6.12, perché l'output del compilatore di questi kernel più recenti fa sì che pselect fd_set e waiter si sovrappongano perfettamente (SP diff=-64). Il GKI 5.10 non possiede questa condizione.


Infrastruttura stabilita

  • ✅ Primitiva di bypass KASLR (canale laterale perf_event_open)
  • ✅ 103+ simboli kernel e offset
  • ✅ Layout della struttura rt_mutex_waiter
  • ✅ Capacità di trigger UAF
  • ✅ Matrice di esclusione di 17 candidati per il riciclo stack

九、Indice dei repository di riferimento


Scarica lo strumento
VoceValore
SoCQualcomm SM8475 (Snapdragon 8 Gen 1 Plus)
Versione kernel5.10.233-gki-g6e61de9f5b58 #1 SMP PREEMPT (24 nov 2025)
Versione Android15 (OriginOS 5)
Data di compilazione25/11/2025
Patch Android01/11/2025
CONFIG_FUTEX_PIy ✅
CONFIG_UNMAP_KERNEL_AT_EL0y (KPTI attivo)
kptr_restrictenforced
CONFIG_IO_URINGy ✅ (confermato dal simbolo vmlinux e seccomp non intercetta io_uring_setup)
FaseStatoDescrizione
1. Bypass KASLR✅ ImplementatoCanale laterale perf_event_open + campionamento callchain (stesso metodo di adattamento di OPPO Find X6 Pro 5.15.149)
2. Trigger UAF✅ ImplementatoDeadlock PI a tre thread riuscito, FUTEX_CMP_REQUEUE_PI restituisce -EDEADLK
3. Primitiva di riciclo stack❌ Fallimento architetturaleI frame dello stack di tutte le syscall note non si sovrappongono al waiter (vedi Sezione 3)
4. Scrittura limitata rb_erase❌ BloccataPrerequisiti non soddisfatti
5. Sovrascrittura inet6_protos❌ Non iniziataDipende dalla fase 4
6. ROP / dirottamento del flusso di controllo❌ Non iniziataDipende dalla fase 5
7. Shell root❌ Non iniziataDipende dalla fase 6
#MetodoSyscallRisultato su PD2229Motivo principale del fallimento
1stamp_prctlPR_SET_MM_MAP❌ EPERMIntercettazione rigida Android
2stamp_pselectpselect6 (NFDS=320)❌ Nessuna sovrapposizioneWaiter 120B sotto fd_set
3stamp_pselectpselect6 (NFDS>336)❌ Allocazione heapPercorso kvmalloc
4stamp_socketMCAST_JOIN_SOURCE_GROUP❌ Copertura insufficienteScrive solo il campo lock
5stamp_sendmsgsendmsg❌ A 80B dal waiterProfondità stack frame 0x90 insufficiente
6stamp_sendmmsgsendmmsg❌ A 112B dal waiterStack frame insufficiente
7stamp_recvmmsgrecvmmsg❌ Azzera task/lockLo stack frame 0x1d0 danneggia puntatori critici
8stamp_process_vmprocess_vm_writev❌ Nessuna sovrapposizioneStack del thread figlio allocato separatamente
9stamp_keyctlKEYCTL_INSTANTIATE_IOV❌ EOPNOTSUPPSyscall non supportata + stack frame 0x40
10stamp_tcpTCP_ZEROCOPY_RECEIVE❌ Stack frame insufficienteProfondità stimata non sufficiente
11stamp_futexFUTEX_CMP_REQUEUE_PI ricorsivo❌ Logicamente non fattibileDistrugge la finestra UAF
12binder ioctlBINDER_WRITE_READ❌ EACCESLa shell non ha permessi su /dev/binder
13pollpoll❌ Allocazione heappollfd sull'heap
14epoll_waitepoll_wait❌ Frame troppo superficialeStack frame 0xE0
15sched_setattrsched_setattr❌ Profondità insufficienteStack frame 0xb0
16timerfd_settimetimerfd_settime❌ Nessuna copia stackNessun buffer stack di grandi dimensioni
17io_uring_registerIORING_REGISTER_*❌ Doppio fallimento①Stack frame solo 0xF0, destinazione copy_from_user fissa a sp+0x8 (differenza di 424 byte dal sp+0x1D0 del waiter); ②sebbene io_uring_setup non sia intercettato da seccomp (restituisce EFAULT invece di ENOSYS), il layout dello stack non corrisponde
RepositoryDispositivoSoCKernelMetodo di riciclo stackStatoRiusabilità su PD2229
NebuSec/CyberMeowfiaPixel 10-6.xPR_SET_MM_MAP✅ 97%❌ Intercettato da Android
JoinChang/ghostlock-oneplusOnePlus Ace 6TSM88456.12.38pselect (SP diff=-64)✅ Verificato❌ Generazione kernel non corrispondente
p2p3p/GhostLock-for-OnePlusOnePlus Ace 6TSM88456.12.38pselect✅ Verificato❌ Generazione kernel non corrispondente
YuKongA/ghostlock-oplusFind N5/X8-6.6.118pselect✅❌ Generazione kernel non corrispondente
Adattamento OPPO Find X6 ProFind X6 ProSM85505.15.149perf KASLR + ?🟡 KASLR ✅, fasi successive non pubbliche❌ Piattaforma diversa
pubglite55/oppo-ghostlockFind N2SM84755.10.236Enumerazione fallita❌ Blocco principale⚠️ Stessa piattaforma e generazione, stesso destino
harry1080/oppo-ghostlockFind N2SM84755.10.236Enumerazione fallita❌ Architetturalmente non fattibile⚠️ Stessa piattaforma e generazione, stesso destino
PD2229 (questo report)PD2229SM84755.10.233Tutti i 17 candidati falliti❌ Architetturalmente non fattibile—
SimboloIndirizzoScopo
rt_mutex_start_proxy_lock0xffffffc00822baa8Punto di ingresso del trigger della vulnerabilità
futex_wait_requeue_pi0xffffffc0082d7df4Allocazione waiter, stack frame 0x1b0
__arm64_sys_futex0xffffffc0082dfe9cStack frame 0x90
do_futex0xffffffc0082d0768Stack frame 0xc0
core_sys_select0xffffffc008634cf0Stack frame pselect 0x1c0
____sys_sendmsg0xffffffc0093eda88Stack frame 0x90
do_recvmmsg0xffffffc0093ef49cStack frame 0x1d0
__arm64_sys_io_uring_register0xffffffc008aae328Stack frame 0x10+0x70
__io_uring_register0xffffffc008aae5f8Stack frame 0x80
inet6_protos0xffffffc00ab0a278Destinazione di scrittura fase 4
selinux_state0xffffffc00aee8c70Destinazione disabilitazione SELinux
init_task0xffffffc00ab0c240Sorgente lettura cred
RepositoryURLValore chiave
NebuSec/CyberMeowfiahttps://github.com/NebuSec/CyberMeowfiaFramework di sfruttamento originale, tasso di successo 97%
JoinChang/ghostlock-oneplushttps://github.com/JoinChang/ghostlock-oneplusAdattamento riuscito su GKI 6.12, metodologia estrazione 103 offset
p2p3p/GhostLock-for-OnePlushttps://github.com/p2p3p/GhostLock-for-OnePlusCatena di sfruttamento completa GKI 6.12
YuKongA/ghostlock-oplushttps://github.com/YuKongA/ghostlock-oplusAdattamento OPPO GKI 6.6
pubglite55/oppo-ghostlockhttps://github.com/pubglite55/oppo-ghostlockRiferimento di fallimento stessa piattaforma SM8475 5.10.236
harry1080/oppo-ghostlockhttps://github.com/harry1080/oppo-ghostlockRiferimento di fallimento stessa piattaforma SM8475 5.10.236
Analisi tecnica NebuSechttps://nebusec.ai/research/ionstack-part-2/Dettagli tecnici della catena originale GhostLock
Correzione upstreamcommit 3bfdc63936ddCodice di correzione