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-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
692 mesi 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)

| Voce | Valore |
|---|---|
| Tipo di vulnerabilità | Use-After-Free **sullo stack** nel percorso rt_mutex / futex PI |
| Versione di introduzione | Linux 2.6.39-rc1 (maggio 2011, commit 8161239a8bcc) |
| Versione corretta | Mainline 7.1 (commit 3bfdc63936dd), rami stabili: 6.1.175 / 6.6.140 / 6.12.86 / 6.18.27 / 7.0.4 |
| Prerequisito | `CONFIG_FUTEX_PI=y` (abilitato di default nei kernel mainstream) |
| CVSS | 7.8 High |
| Stabilità dello sfruttamento | 97% 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

| Voce | Valore |
|---|---|
| SoC | Qualcomm SM8475 (Snapdragon 8 Gen 1 Plus) |
| Versione kernel | 5.10.233-gki-g6e61de9f5b58 #1 SMP PREEMPT (24 nov 2025) |
| Versione Android | 15 (OriginOS 5) |
| Data di compilazione | 25/11/2025 |
| Patch Android | 01/11/2025 |
| `CONFIG_FUTEX_PI` | y ✅ |
| `CONFIG_UNMAP_KERNEL_AT_EL0` | y (KPTI attivo) |
| `kptr_restrict` | enforced |
| `CONFIG_IO_URING` | y ✅ (confermato dal simbolo vmlinux e seccomp non intercetta `io_uring_setup`) |


---

## 二、Catena di sfruttamento ideale vs progresso effettivo su PD2229

### 2.1 Catena originale NebuSec (x86_64 / Pixel 10 riuscita)

```
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

| Fase | Stato | Descrizione |
|---|---|---|
| 1. Bypass KASLR | ✅ **Implementato** | Canale laterale `perf_event_open` + campionamento callchain (stesso metodo di adattamento di OPPO Find X6 Pro 5.15.149) |
| 2. Trigger UAF | ✅ **Implementato** | Deadlock PI a tre thread riuscito, FUTEX_CMP_REQUEUE_PI restituisce -EDEADLK |
| 3. Primitiva di riciclo stack | ❌ **Fallimento architetturale** | I frame dello stack di tutte le syscall note non si sovrappongono al waiter (vedi Sezione 3) |
| 4. Scrittura limitata rb_erase | ❌ Bloccata | Prerequisiti non soddisfatti |
| 5. Sovrascrittura inet6_protos | ❌ Non iniziata | Dipende dalla fase 4 |
| 6. ROP / dirottamento del flusso di controllo | ❌ Non iniziata | Dipende dalla fase 5 |
| 7. Shell root | ❌ Non iniziata | Dipende dalla fase 6 |

---

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

### 3.1 Calcoli chiave del layout dello stack frame

```
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

| # | Metodo | Syscall | Risultato su PD2229 | Motivo principale del fallimento |
|---|---|---|---|---|
| 1 | `stamp_prctl` | `PR_SET_MM_MAP` | ❌ EPERM | Intercettazione rigida Android |
| 2 | `stamp_pselect` | `pselect6` (NFDS=320) | ❌ Nessuna sovrapposizione | Waiter 120B sotto fd_set |
| 3 | `stamp_pselect` | `pselect6` (NFDS>336) | ❌ Allocazione heap | Percorso kvmalloc |
| 4 | `stamp_socket` | `MCAST_JOIN_SOURCE_GROUP` | ❌ Copertura insufficiente | Scrive solo il campo `lock` |
| 5 | `stamp_sendmsg` | `sendmsg` | ❌ A 80B dal waiter | Profondità stack frame 0x90 insufficiente |
| 6 | `stamp_sendmmsg` | `sendmmsg` | ❌ A 112B dal waiter | Stack frame insufficiente |
| 7 | `stamp_recvmmsg` | `recvmmsg` | ❌ Azzera task/lock | Lo stack frame 0x1d0 danneggia puntatori critici |
| 8 | `stamp_process_vm` | `process_vm_writev` | ❌ Nessuna sovrapposizione | Stack del thread figlio allocato separatamente |
| 9 | `stamp_keyctl` | `KEYCTL_INSTANTIATE_IOV` | ❌ EOPNOTSUPP | Syscall non supportata + stack frame 0x40 |
| 10 | `stamp_tcp` | `TCP_ZEROCOPY_RECEIVE` | ❌ Stack frame insufficiente | Profondità stimata non sufficiente |
| 11 | `stamp_futex` | `FUTEX_CMP_REQUEUE_PI` ricorsivo | ❌ Logicamente non fattibile | Distrugge la finestra UAF |
| 12 | binder ioctl | `BINDER_WRITE_READ` | ❌ EACCES | La shell non ha permessi su /dev/binder |
| 13 | `poll` | `poll` | ❌ Allocazione heap | pollfd sull'heap |
| 14 | `epoll_wait` | `epoll_wait` | ❌ Frame troppo superficiale | Stack frame 0xE0 |
| 15 | `sched_setattr` | `sched_setattr` | ❌ Profondità insufficiente | Stack frame 0xb0 |
| 16 | `timerfd_settime` | `timerfd_settime` | ❌ Nessuna copia stack | Nessun buffer stack di grandi dimensioni |
| 17 | `io_uring_register` | `IORING_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 |

**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

| Repository | Dispositivo | SoC | Kernel | Metodo di riciclo stack | Stato | Riusabilità su PD2229 |
|---|---|---|---|---|---|---|
| NebuSec/CyberMeowfia | Pixel 10 | - | 6.x | `PR_SET_MM_MAP` | ✅ 97% | ❌ Intercettato da Android |
| JoinChang/ghostlock-oneplus | OnePlus Ace 6T | SM8845 | 6.12.38 | pselect (SP diff=-64) | ✅ Verificato | ❌ Generazione kernel non corrispondente |
| p2p3p/GhostLock-for-OnePlus | OnePlus Ace 6T | SM8845 | 6.12.38 | pselect | ✅ Verificato | ❌ Generazione kernel non corrispondente |
| YuKongA/ghostlock-oplus | Find N5/X8 | - | 6.6.118 | pselect | ✅ | ❌ Generazione kernel non corrispondente |
| Adattamento OPPO Find X6 Pro | Find X6 Pro | SM8550 | 5.15.149 | perf KASLR + ? | 🟡 KASLR ✅, fasi successive non pubbliche | ❌ Piattaforma diversa |
| **pubglite55/oppo-ghostlock** | **Find N2** | **SM8475** | **5.10.236** | Enumerazione fallita | ❌ Blocco principale | ⚠️ **Stessa piattaforma e generazione, stesso destino** |
| **harry1080/oppo-ghostlock** | **Find N2** | **SM8475** | **5.10.236** | Enumerazione fallita | ❌ Architetturalmente non fattibile | ⚠️ **Stessa piattaforma e generazione, stesso destino** |
| **PD2229 (questo report)** | **PD2229** | **SM8475** | **5.10.233** | **Tutti i 17 candidati falliti** | ❌ **Architetturalmente non fattibile** | **—** |

---

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

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

| Simbolo | Indirizzo | Scopo |
|---|---|---|
| `rt_mutex_start_proxy_lock` | `0xffffffc00822baa8` | Punto di ingresso del trigger della vulnerabilità |
| `futex_wait_requeue_pi` | `0xffffffc0082d7df4` | Allocazione waiter, stack frame 0x1b0 |
| `__arm64_sys_futex` | `0xffffffc0082dfe9c` | Stack frame 0x90 |
| `do_futex` | `0xffffffc0082d0768` | Stack frame 0xc0 |
| `core_sys_select` | `0xffffffc008634cf0` | Stack frame pselect 0x1c0 |
| `____sys_sendmsg` | `0xffffffc0093eda88` | Stack frame 0x90 |
| `do_recvmmsg` | `0xffffffc0093ef49c` | Stack frame 0x1d0 |
| `__arm64_sys_io_uring_register` | `0xffffffc008aae328` | Stack frame 0x10+0x70 |
| `__io_uring_register` | `0xffffffc008aae5f8` | Stack frame 0x80 |
| `inet6_protos` | `0xffffffc00ab0a278` | Destinazione di scrittura fase 4 |
| `selinux_state` | `0xffffffc00aee8c70` | Destinazione disabilitazione SELinux |
| `init_task` | `0xffffffc00ab0c240` | Sorgente lettura cred |

### Struttura rt_mutex_waiter (personalizzazione vivo 5.10.233)

```c
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

| Repository | URL | Valore chiave |
|---|---|---|
| NebuSec/CyberMeowfia | https://github.com/NebuSec/CyberMeowfia | Framework di sfruttamento originale, tasso di successo 97% |
| JoinChang/ghostlock-oneplus | https://github.com/JoinChang/ghostlock-oneplus | Adattamento riuscito su GKI 6.12, metodologia estrazione 103 offset |
| p2p3p/GhostLock-for-OnePlus | https://github.com/p2p3p/GhostLock-for-OnePlus | Catena di sfruttamento completa GKI 6.12 |
| YuKongA/ghostlock-oplus | https://github.com/YuKongA/ghostlock-oplus | Adattamento OPPO GKI 6.6 |
| pubglite55/oppo-ghostlock | https://github.com/pubglite55/oppo-ghostlock | **Riferimento di fallimento stessa piattaforma SM8475 5.10.236** |
| harry1080/oppo-ghostlock | https://github.com/harry1080/oppo-ghostlock | **Riferimento di fallimento stessa piattaforma SM8475 5.10.236** |
| Analisi tecnica NebuSec | https://nebusec.ai/research/ionstack-part-2/ | Dettagli tecnici della catena originale GhostLock |
| Correzione upstream | commit 3bfdc63936dd | Codice di correzione |

---
Scarica lo strumento