
Tentativo di exploit per l'escalation dei privilegi del kernel Linux basato su CVE-2026-43499 (GhostLock) — Huawei Watch 4 Pro (MDS-AL00, armv7l)
Questo progetto è un tentativo di exploit della vulnerabilità del kernel GhostLock per il dispositivo Huawei Watch 4 Pro (MDS-AL00, Snapdragon SW5100, HarmonyOS 4.3.0 AOSP 12), adattato per l'architettura ARM 32-bit (armv7l).
GhostLock (CVE-2026-43499) è una vulnerabilità UAF futex PI del kernel che colpisce Linux 2.6.39 fino a 7.x. L'obiettivo di questo progetto è completare l'intera catena di escalation dei privilegi sullo smartwatch Huawei.
Repository originale: MobiusM/CVE-2026-43499 (PoC per arm64)
Sul kernel 5.4.161 ARM32, dopo che FUTEX_CMP_REQUEUE_PI attiva EDEADLK, l'attraversamento della catena PI non esegue il secondo rb_erase. La catena di exploit su cui GhostLock 64 si basa (UAF → secondo rb_erase che scrive nella pagina UAF) fallisce completamente su questo kernel.
Tutte le varianti dello spray writev a 8 iov falliscono: sc[0] after = e3a0002a (la pagina della shellcode non viene scritta).
Lo spray writev a 8 iov di ghostlock64 dipende dalla sovrapposizione tra l'array iovstack[8] sullo stack del kernel e la struttura rt_mutex_waiter. Su questo kernel:
clear_refs_operations.writesched_setattr riesce ad attivare l'attraversamento della catena PI (verificato con success=1600+), ma rb_erase opera su pi_tree_entry del thread OWNER (situato nella task_struct nell'heap kmalloc), non sui dati dello stack del thread waiter (dati writev di fd_set).
Pertanto nemmeno la strada pselect + sched_setattr può essere usata per controllare il valore scritto.
mmap(0, ..., MAP_FIXED, ...) restituisce -EINVAL, non il -EACCES del Linux standardCONFIG_SECURITY_SELINUX_DEVELOP=n → il campo selinux_state.enforcing non esistemremap → ENOSYScommit_creds: 0xC0140390
prepare_kernel_cred: 0xC014059C
proc_clear_refs_ops: 0xC0CAF280 (.write @ +12 = 0xC0CAF28C)
mmap_min_addr: 0xC12E8568
dac_mmap_min_addr: 0xC123C734
selinux_hooks[mmap]: 0xC0F64E1C
| Repository | Dispositivo | Kernel | Architettura |
|---|---|---|---|
| x-spy/CVE-2026-43499-popsicle |
Entrambi i repository usano pselect() + sched_setattr per attivare la catena PI + scrittura diretta in physmap, sfruttando il meccanismo direct map di ARM64. ARM32 non ha la direct map e il comportamento della catena PI di questo kernel è diverso.
CVE-2026-43499-armv7/
├── config/
│ └── kernel.config # 设备内核 .config (5.4.161-perf)
├── scripts/
│ ├── ghostlock_all.sh # 批量测试脚本
│ └── ghostlock_check.sh # 检测脚本
├── src/
│ ├── ghostlock64.c # 原始 8-iov 双 erase PoC (基础框架)
│ ├── ghostlock5-33.c # 早期迭代版本 (ghostlock5 ~ ghostlock33)
│ ├── ghostlock63.c # ghostlock 6.x 3-iov 变种
│ ├── g62_*.c # 3-iov 变种 (不同目标地址)
│ ├── g62_8e.c # 8-iov 精确喷溅 (最终版)
│ ├── g62_scan.c # 多 iov 偏移扫描
│ ├── g62_self.c # waiter 自触发 EDEADLK 测试
│ ├── g62_pispray.c # EDEADLK + slab spray + sched_setattr
│ ├── g62_rand.c # 写 randomize_va_space 测试
│ ├── gsu_v19.c # 8-iov + sched_setattr 触发
│ ├── gl_pselect*.c # pselect + sched_setattr 测试
│ ├── gl_scan.c # fd_set 偏移扫描
│ ├── sc64.c # shellcode payload
│ ├── trigger*.c # 原始触发 PoC (验证漏洞存在)
│ ├── ghostlock_root.c # 早期 root 尝试
│ └── test_*.c # 编译/运行测试
├── README.md
├── ghostlock64 # 8-iov 双 erase PoC 二进制
├── ghostlock63 # ghostlock 6.x 3-iov 二进制
├── g62_* # 3-iov 变种二进制
├── gl_* # pselect 测试二进制
├── gsu # sc-page hijack 变种
├── sc64 # shellcode
├── trigger* # 原始触发 PoC 二进制
└── test_* # 测试二进制
L'implementazione della catena PI di questa versione del kernel (5.4.161 ARM32) non supporta la tecnica di scrittura arbitraria basata sul doppio rb_erase di GhostLock. Tutte le strade di exploit note per CVE-2026-43499 sono bloccate su questo dispositivo. È necessario scoprire una nuova primitiva di scrittura zero o un'altra vulnerabilità per proseguire.
Huawei, mi hai fregato per bene: mi hai bruciato 30 RMB di token di DeepSeek V4 Pro.
| Parametro | Valore |
|---|
| Dispositivo | Huawei Watch 4 Pro (MDS-AL00) |
| Kernel | 5.4.161-perf (ARM32 armv7l) |
| Sistema | HarmonyOS 4.3.0 (AOSP 12) |
| CPU | Snapdragon SW5100 |
| SELinux | Enforcing (CONFIG_SECURITY_SELINUX_DEVELOP=n) |
| KASLR | Disattivato |
| MMU | CONFIG_STRICT_KERNEL_RWX=y |
| Stack | NX (stack del kernel non eseguibile) |
| mmap(0) | Intercettazione aggiuntiva di Huawei (-EINVAL, non il -EACCES standard) |
| Fase | Stato | Descrizione |
|---|
| Trigger FUTEX PI GhostLock | ✅ Verifica riuscita | FUTEX_CMP_REQUEUE_PI restituisce EDEADLK (-35) |
| Trigger attraversamento catena PI | ✅ Verifica riuscita | sched_setattr attiva la PI chain walk |
| Secondo rb_erase | ❌ Blocco principale | L'implementazione della catena PI di questo kernel non esegue il secondo rb_erase |
| Allineamento iovstack | ❌ Bloccato | Lo spray writev a 8 iov non si sovrappone a rt_mutex_waiter |
| Bypass di mmap(0) | ❌ Bloccato | Controllo aggiuntivo del kernel Huawei (-EINVAL) |
| Hijack di fops | ❌ Bloccato | Nessuna primitiva di scrittura arbitraria controllata |
| Sovrascrittura di cred | ❌ Bloccato | Limitata dai blocchi sopra elencati |
| Escalation completata | ❌ | Non implementata |
| Percorso | Risultato | Motivo |
|---|
| ghostlock64 writev a 8 iov → FLPI | ❌ | Il secondo rb_erase non viene attivato |
| ghostlock64 + sched_setattr | ❌ | Come sopra, la catena PI non raggiunge la pagina UAF |
| g62 3-iov | ❌ | Scrive ma il valore è un indirizzo di stack; lo stack NX non è eseguibile |
| pselect + sched_setattr | ❌ | rb_erase opera sui dati heap dell'owner |
| Auto-FLPI del waiter (secondo tentativo) | ❌ | Fast path di EDEADLK, non legge lo stack |
| Scansione offset iov (22 layout) | ❌ | Nessuna sovrapposizione |
| Bypass di mm(0) / mremap | ❌ | -EINVAL / ENOSYS |
| Azzeramento degli hook SELinux | ❌ | Il campo enforcing non esiste |
| Xiaomi 17 Pro Max |
| 6.12.23 |
| ARM64 |
| pubglite55/oppo-ghostlock | OPPO Find N2 | 5.10.236 | ARM64 |