
Honor 80 GT (MagicOS 8.0.0.128, kernel 5.10.168), PoC d'élévation de privilèges : GhostLock (CVE-2026-43499) + chargement de module KernelSU personnalisé
Anglais | 中文
Un exploit local d'élévation de privilèges pour le Honor 80 GT (AGT-AN00),
CVE-2026-43499 — une use-after-free dans le chemin remove_waiter du rtmutex
du noyau — ainsi qu'une solution complémentaire de chargement de module noyau
KernelSU.
En principe, le bug et les techniques présentés ici s'appliquent à toutes les builds MagicOS jusqu'à 9.0.0.220. Versions adaptées :
| MagicOS | Kernel | Statut |
|---|---|---|
| 8.0.0.128 | 5.10.168 | vérifié |
| 8.0.0.160 | 5.10.209 | vérifié |
| 9.0.0.157 | 5.10.209 | vérifié |
| 9.0.0.200SP1 | 5.10.236 | vérifié |
| 9.0.0.220SP2 / SP4 | 5.10.236 | vérifié sur appareil (SP4 embarque la même image de boot que SP2) |
Les autres versions de la gamme 9.0 devraient fonctionner après régénération
de la table d'offsets (src/targets/) et nouvelle vérification de l'emplacement
du slot porteur du kstack.
⚠️ Avertissement
- Réservé à la recherche de sécurité sur votre propre appareil uniquement.
- À UTILISER À VOS RISQUES ET PÉRILS. Ce logiciel est fourni SANS garantie d'aucune sorte (voir LICENSE). En théorie, le simple fait de l'exécuter ne devrait pas bricker votre appareil ni entraîner de perte de données, mais sauvegardez quand même d'abord ; quoi qu'il arrive — que ce soit en exécutant ce code ou en faisant quoi que ce soit avec l'accès root qu'il accorde — relève de votre responsabilité, pas de celle des auteurs.
- L'exploit modifie la mémoire du noyau via une UAF. Un échec redémarre l'appareil ; un redémarrage restaure tout. Le succès n'est pas garanti à 100 % à chaque exécution — relancez simplement l'exploit.
- Root signifie contrôle total de l'appareil — utilisez-le avec précaution. Ce projet ne fait que vous donner root ; flasher des images, écrire des partitions, désactiver des protections ou installer des modules non testés par la suite peut bricker définitivement l'appareil, et cela relève de votre responsabilité.
exploit/ GhostLock PoC source (Android arm64) + build system
src/ exploit core: futex UAF, KASLR slide, sysctl boot_id hijack,
arbitrary R/W, cred/SELinux/sig_enforce writes, KSU load
src/targets/ per-firmware offset tables (target.h)
ksu/ custom kernelsu.ko build (MagicOS kernel + device config) and the
PC-side adb load driver
tools/ on-device load helpers: load_ko.c / kmsg_dumper.c (built from
source), policy rules, loader template (+ where to get the
binaries)
Prérequis : Docker, Android Platform Tools.
Bundles précompilés par firmware : récupérez celui correspondant à votre version MagicOS dans Releases, décompressez-le sur l'hôte, puis exécutez
./setup.sh # PC, with adb: checks the kernel version, pushes
# everything, runs the chain, retries on the
# occasional miss
Pas de PC sous la main ? Décompressez le bundle sur le téléphone et exécutez le même script depuis un shell Shizuku (rish) — il détecte son emplacement et fait le reste en local :
sh /sdcard/ghostlock-<version>/setup.sh
Pour compiler depuis les sources à la place :
# 1. Build the device exploit binary
cd exploit && ./docker-build.sh bin # exploit_static (8.0.0.128)
# 8.0.0.160: ./docker-build.sh PROJECT=annap-AGT-AN00_8.0.0.160 bin
# (./docker-build.sh ondevice builds the static binary with the default
# env config baked in; first run pulls the NDK, ~1.2GB)
# 2. Obtain/build the KSU bundle binaries into ksu/tools/ —
# see ksu/tools/README.md (kernelsu_h80gt.ko: ksu/README.md — build it
# against the opensource tree matching your firmware's kernel sublevel;
# ksud: shipped in the repo; magiskpolicy: shipped in the repo; load_ko/kmsg_dumper:
# ./docker-build.sh tools)
# 3. Enable ADB debugging on the phone, then
bash ../ksu/ksu_load_ko.sh
# 8.0.0.160: PROJECT=annap-AGT-AN00_8.0.0.160 bash ../ksu/ksu_load_ko.sh
Le script pilote toute la chaîne via adb : GhostLock (root + permissif +
bascule sig_enforce), injection de la politique SELinux via magiskpolicy,
bind-mount d'un faux kallsyms, load_ko (init_module), puis les étapes de
démarrage de ksud, avec restauration du mode enforcing de SELinux en toute
dernière étape. Attendez que kernelsu apparaisse dans /proc/modules, puis
ouvrez le gestionnaire KernelSU (il affiche « Working <LKM> [Jailbreak mode] »).
CONFIG_MODULE_SIG_FORCE=y — le drapeau d'exécution sig_enforce bloque le
chargement de modules non signés ; l'exploit le bascule temporairement à 0
(le script du loader le restaure à 1 une fois le module chargé).commit_creds et consorts
de /proc/kallsyms, si bien que le chargeur du noyau ne peut pas résoudre les
symboles non définis du .ko. Le processus effectue un bind-mount d'un faux
kallsyms avec les symboles supprimés préfixés à leurs véritables adresses
d'exécution (adresse de lien + décalage KASLR).android12-5.10_kernelsu.ko ne peut pas être utilisé directement.
ksu/ recompile KernelSU v3.2.5 contre la source du noyau MagicOS
correspondant au sous-niveau du firmware et à la configuration noyau de
l'appareil. Voir ksu/README.md.La chaîne complète (UAF → KASLR → lecture/écriture arbitraire → cred → SELinux permissif → sig_enforce → KernelSU actif, enforcing restauré, boot_id restauré) a été vérifiée sur un appareil réel pour chaque version du tableau ci-dessus. Une exécution peut échouer tôt et redémarrer le téléphone (environ une fois sur quatre) ; le script d'installation réessaie automatiquement, ou relancez-le simplement.
exploit/, documentation à la racine)
sont sous licence Apache 2.0 (voir LICENSE), comme le PoC
IonStack amont dont ce portage est dérivé.ksu/ sont sous GPL-2.0 (voir
ksu/LICENSE) : init-h80gt.patch et l'ensemble de règles de
politique ksu_rules.annotated dérivent du répertoire kernel/ de KernelSU,
qui est sous GPL-2.0.