
Catena di exploit proof-of-concept per CVE-2026-43499 che prende di mira i dispositivi Android OPPO MT6835, con payload di precaricamento, sistema di build e note di analisi per la ricerca difensiva.
GhostLock: vulnerabilità Use-After-Free nel futex PI del kernel Linux, CVE-2026-43499. Gli attaccanti sfruttano i cicli di dipendenza dei PI-futex per innescare una race condition, ottenendo l'escalation dei privilegi locale su kernel con
CONFIG_FUTEX_PI=y.Target: OPPO PLS120 (OP5E1C) — Android 17, kernel
5.15.180-android13-8-o-g7b9cfca06464Ambiente di analisi: Ubuntu 24.04 x86_64 + Android NDK r29 (clang 21.0.0, API 35)
Repository sorgente: NebuSec/CyberMeowfia — IonStack/CVE-2026-43499
Questo progetto studia la fattibilità di sfruttare GhostLock (CVE-2026-43499) per ottenere i privilegi di root su un dispositivo OPPO PLS120 (OP5E1C). Attraverso la verifica sistematica di tutti i percorsi noti di leak KASLR, si conferma che la combinazione di hardening di sicurezza del dispositivo costituisce una catena di protezione non aggirabile.
| Fase | Stato | Descrizione |
|---|---|---|
| Fase 1: analisi di boot.img ed estrazione dei simboli | ✅ Completata | Estrazione di boot.img dal pacchetto OTA → ricostruzione della tabella dei simboli con vmlinux-to-elf (159.668 simboli) |
| Fase 2: compilazione di preload.so | ✅ Completata | Compilazione incrociata con Android NDK r29, meccanismo forzato di scrittura dei log su disco in tempo reale |
| Fase 3: diagnosi dei guasti e correzioni iterative | 🔄 In corso | Corretti MM_STRUCT_SZ, il supporto MTE e la logica di salto SLIDE |
L'hardening di sicurezza di OPPO PLS120 blocca completamente la catena di exploit:
| Voce di hardening | Impatto |
|---|---|
CONFIG_SLAB_FREELIST_HARDENED=y | Impedisce le collisioni slab di KernelSnitch |
CONFIG_KASAN_HW_TAGS=y (MTE) | I tag di indirizzo aumentano la complessità del bruteforce |
CONFIG_CFI_CLANG=y | Integrità del flusso di controllo |
| Policy SELinux del dominio shell | Blocca perf_event_open + /proc/kallsyms |
CONFIG_CHECKPOINT_RESTORE=n | Blocca il percorso PR_SET_MM_MAP |
| Backport della correzione wchan | Impedisce a /proc/<pid>/stat di divulgare VA del kernel |
| Soluzione | Stato | Motivo |
|---|---|---|
| perf_event_open callchain | ❌ | EACCES (dominio shell SELinux bloccato) |
| /proc/kallsyms | ❌ | EACCES (kptr_restrict + SELinux) |
| wchan (/proc/<pid>/stat campo 35) | ❌ | Il kernel ha applicato la correzione v5.16 (restituisce 1 invece del VA del kernel) |
| Canale laterale SLIDE (sovrascrittura boot_id) | ❌ | Il modulo nfulnl non è caricabile |
| Recupero stack PR_SET_MM_MAP | ❌ | CONFIG_CHECKPOINT_RESTORE=n |
| KernelSnitch (timing hash futex) | ⚠️ Successo occasionale | Il rumore temporale big.LITTLE influisce sulla stabilità |
SLIDE_MAX_ATTEMPTS=1 si evita il ciclo infinito di SLIDE!route_signal, consentendo 24 tentativiQuesto progetto studia la fattibilità di sfruttare GhostLock (CVE-2026-43499) per l'escalation dei privilegi di root su un dispositivo OPPO PLS120 (OP5E1C). Dopo aver testato sistematicamente tutti i percorsi noti di leak KASLR, la configurazione di hardening di sicurezza del dispositivo forma una catena di difesa non aggirabile contro questo exploit.
| Fase | Stato | Descrizione |
|---|---|---|
| Fase 1: Analisi di boot.img | ✅ Completata | Estratto boot.img dall'OTA → ricostruzione dei simboli vmlinux-to-elf (159.668 simboli) |
| Fase 2: Build di preload.so | ✅ Completata | Cross-compilato con Android NDK r29, logging su disco in tempo reale forzato |
| Fase 3: Diagnosi e iterazione | 🔄 In corso | Corretti MM_STRUCT_SZ, supporto MTE, logica di bypass SLIDE |
OPPO PLS120 blocca la catena di exploit su più livelli:
| Funzionalità di Hardening | Impatto |
|---|---|
CONFIG_SLAB_FREELIST_HARDENED=y | Blocca la collisione degli slab di KernelSnitch |
CONFIG_KASAN_HW_TAGS=y (MTE) | I tag di indirizzo aumentano la complessità del bruteforce |
CONFIG_CFI_CLANG=y | Control Flow Integrity |
| Policy del dominio shell SELinux | Blocca perf_event_open + /proc/kallsyms |
CONFIG_CHECKPOINT_RESTORE=n | Blocca il percorso PR_SET_MM_MAP |
| Backport della correzione wchan | Blocca la fuga di kernel VA da /proc/<pid>/stat |
| Metodo | Stato | Motivo |
|---|---|---|
| callchain di perf_event_open | ❌ | EACCES (dominio shell SELinux) |
| /proc/kallsyms | ❌ | EACCES (kptr_restrict + SELinux) |
| wchan (campo 35 di /proc/<pid>/stat) | ❌ | Il kernel ha il backport della correzione v5.16 (restituisce 1 invece del kernel VA) |
| Canale laterale SLIDE (sovrascrittura di boot_id) | ❌ | Il modulo nfulnl non è caricabile |
| Recupero dello stack tramite PR_SET_MM_MAP | ❌ | CONFIG_CHECKPOINT_RESTORE=n |
| KernelSnitch (timing dell'hash futex) | ⚠️ Intermittente | Il rumore di timing big.LITTLE influisce sulla stabilità |
SLIDE_MAX_ATTEMPTS=1!route_signal, consente 24 tentativi/home/ubuntu/CyberMeowfia/
├── devices/ # Target device artifacts (OTA zip, config.gz, etc.)
├── work_bootimg/ # boot.img analysis output
│ └── oppo/ # OPPO-specific kernel data
│ ├── kernel.dec # Decompressed ARM64 Image (47MB)
│ ├── vmlinux_extracted.elf # Reconstructed vmlinux with symbols (159,668)
│ ├── kallsyms_oppo.txt # Full symbol table
│ └── kernel_config_oppo # Kernel .config (189KB)
├── IonStack/CVE-2026-43499/exploit/ # Exploit source code
│ ├── src/ # Source files (slide.c, fops.c, main.c, etc.)
│ │ ├── kernelsnitch/ # KernelSnitch futex hash timing module
│ │ └── targets/
│ │ └── oppo-pls120-BP2A.250605.015/ # OPPO-specific target configuration
│ └── build/ # Compiled binaries
├── unpack_bootimg.py # Python boot.img unpacker (v3/v4)
├── report.md # Phase 1 analysis report (Chinese)
├── GhostLock_CVE202643499_OPPO_PLS120_研究报告.md # Full research report (Chinese, 620 lines)
└── CVE202643499.txt # Research plan document