
Chaîne d'exploitation de preuve de concept pour CVE-2026-43499 ciblant les appareils Android OPPO MT6835, avec charge utile de préchargement, système de construction et notes d'analyse pour la recherche défensive.
GhostLock : vulnérabilité Use-After-Free dans les futex PI du noyau Linux, CVE-2026-43499. Les attaquants exploitent les boucles de dépendance des PI-futex pour déclencher une condition de course, obtenant ainsi une élévation de privilèges locale sur les noyaux avec
CONFIG_FUTEX_PI=y.Cible : OPPO PLS120 (OP5E1C) — Android 17, noyau
5.15.180-android13-8-o-g7b9cfca06464Environnement d'analyse : Ubuntu 24.04 x86_64 + Android NDK r29 (clang 21.0.0, API 35)
Dépôt source : NebuSec/CyberMeowfia — IonStack/CVE-2026-43499
Ce projet étudie la faisabilité de l'exploitation de GhostLock (CVE-2026-43499) pour obtenir les privilèges root sur un appareil OPPO PLS120 (OP5E1C). Après avoir systématiquement testé tous les chemins de fuite KASLR connus, il est confirmé que la combinaison de renforcement de la sécurité de cet appareil constitue une chaîne de protection impossible à contourner.
| Phase | Statut | Description |
|---|---|---|
| Phase 1 : Analyse de boot.img et extraction des symboles | ✅ Terminé | Extraction de boot.img depuis le paquet OTA → reconstruction de la table des symboles avec vmlinux-to-elf (159 668 symboles) |
| Phase 2 : Compilation de preload.so | ✅ Terminé | Compilation croisée avec Android NDK r29, mécanisme de journalisation forcée en temps réel sur disque |
| Phase 3 : Diagnostic des pannes et corrections itératives | 🔄 En cours | Correction de MM_STRUCT_SZ, du support MTE et de la logique de saut SLIDE |
Le renforcement de la sécurité de l'OPPO PLS120 bloque entièrement la chaîne d'exploitation :
| Mesure de renforcement | Impact |
|---|---|
CONFIG_SLAB_FREELIST_HARDENED=y | Empêche les collisions de slab de KernelSnitch |
CONFIG_KASAN_HW_TAGS=y (MTE) | Les étiquettes d'adresse augmentent la complexité du bruteforce |
CONFIG_CFI_CLANG=y | Intégrité du flux de contrôle |
| Politique SELinux du domaine shell | Bloque perf_event_open + /proc/kallsyms |
CONFIG_CHECKPOINT_RESTORE=n | Bloque le chemin PR_SET_MM_MAP |
| Correctif wchan rétroporté | Bloque la fuite d'adresse VA du noyau via /proc/<pid>/stat |
| Méthode | État | Raison |
|---|---|---|
| perf_event_open callchain | ❌ | EACCES (blocage par le domaine shell SELinux) |
| /proc/kallsyms | ❌ | EACCES (kptr_restrict + SELinux) |
| wchan (/proc/<pid>/stat champ 35) | ❌ | Correctif v5.16 appliqué au noyau (renvoie 1 au lieu de l'adresse VA du noyau) |
| Canal auxiliaire SLIDE (écrasement de boot_id) | ❌ | Module nfulnl non chargeable |
| Récupération de pile PR_SET_MM_MAP | ❌ | CONFIG_CHECKPOINT_RESTORE=n |
| KernelSnitch (timing du hash futex) | ⚠️ Succès occasionnel | Le bruit temporel big.LITTLE affecte la stabilité |
SLIDE_MAX_ATTEMPTS=1!route_signal, permettant 24 nouvelles tentativesCe projet étudie la faisabilité de l'exploitation de GhostLock (CVE-2026-43499) pour l'élévation de privilèges root sur un appareil OPPO PLS120 (OP5E1C). Après avoir testé systématiquement tous les chemins de fuite KASLR connus, la configuration de renforcement de la sécurité de l'appareil forme une chaîne de défense impossible à contourner contre cette exploitation.
| Phase | État | Description |
|---|---|---|
| Phase 1 : Analyse de boot.img | ✅ Terminée | Extraction de boot.img depuis l'OTA → reconstruction des symboles vmlinux-to-elf (159 668 symboles) |
| Phase 2 : Compilation de preload.so | ✅ Terminée | Compilation croisée avec Android NDK r29, journalisation disque en temps réel forcée |
| Phase 3 : Diagnostic et itération | 🔄 En cours | Correction de MM_STRUCT_SZ, prise en charge MTE, logique de contournement SLIDE |
L'OPPO PLS120 bloque la chaîne d'exploitation à plusieurs niveaux :
| Fonctionnalité de durcissement | Impact |
|---|---|
CONFIG_SLAB_FREELIST_HARDENED=y | Bloque la collision de slab de KernelSnitch |
CONFIG_KASAN_HW_TAGS=y (MTE) | Les tags d'adresse augmentent la complexité du bruteforce |
CONFIG_CFI_CLANG=y | Control Flow Integrity |
| Politique de domaine shell SELinux | Bloque perf_event_open + /proc/kallsyms |
CONFIG_CHECKPOINT_RESTORE=n | Bloque le chemin PR_SET_MM_MAP |
| Backport du correctif wchan | Bloque la fuite d'adresse VA du noyau via /proc/<pid>/stat |
| Méthode | État | Raison |
|---|---|---|
| Chaîne d'appels perf_event_open | ❌ | EACCES (domaine shell SELinux) |
| /proc/kallsyms | ❌ | EACCES (kptr_restrict + SELinux) |
| wchan (/proc/<pid>/stat champ 35) | ❌ | Le noyau a le backport du correctif v5.16 (renvoie 1 au lieu de l'adresse VA du noyau) |
| Canal auxiliaire SLIDE (écrasement de boot_id) | ❌ | Module nfulnl non chargeable |
| Récupération de pile PR_SET_MM_MAP | ❌ | CONFIG_CHECKPOINT_RESTORE=n |
| KernelSnitch (timing du hash futex) | ⚠️ Intermittent | Le bruit de timing big.LITTLE affecte la stabilité |
SLIDE_MAX_ATTEMPTS=1!route_signal, permettant 24 nouvelles tentatives/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