
Honor WIN RT (AAK-AN00) CVE-2026-43499 root temporaire - notes de recherche
(tout a été écrit par deepseek, je n'y comprends rien)
Le Bootloader de l'appareil est verrouillé en permanence (
ro.oem_unlock.supportedest vide), pas de fastboot, pas de su persistant, pas de Magisk. La seule voie encore praticable est une vulnérabilité du noyau. Ce dépôt documente le processus complet, de « est-ce exploitable » à « à quel point c'est stable une fois exploité ».
Nature : root temporaire, invalide après redémarrage.
Ce dépôt documente un processus de recherche de sécurité mené sur mon propre appareil, dans le but de comprendre les causes et les limites de stabilité d'une condition de course PI du noyau.
Le seul chemin qui a fonctionné est :
CVE-2026-43499 (course PI futex write-what-where) + porteuse rt_sigreturn
→ injection LD_PRELOAD dans un processus du domaine shell
→ en deux étapes : d'abord passer SELinux en Permissive, puis modifier task->real_cred / cred en init_cred
→ uid=0(root) context=u:r:kernel:s0, et implantation d'un démon su
Mais ce qui mérite vraiment d'être écrit, ce n'est pas « comment obtenir root » — c'est ce qui se passe après.
Ce qu'on obtient n'est pas un root stable, mais un « état susceptible d'exploser à tout moment ».
La primitive d'écriture de l'exploit insère un
rt_mutex_waiterfalsifié dans la chaîne PI futex réelle, et le support de ce waiter est une pile noyau / page pulvérisée réutilisée par les appels système suivants. Ainsi, dès l'instant où root est obtenu, toute ordonnancement ou changement de priorité au niveau système peut le déclencher, provoquant directement un panic du noyau et un redémarrage. Ce n'est pas un bug, c'est le coût inhérent de cette technique d'exploitation — voirdocs/03.
Pourquoi la version du noyau doit être strictement respectée : le défaut est corrigé dans 6.6.140, et cette machine est en 6.6.118 < 6.6.140, donc toujours vulnérable ;
de plus, toutes les adresses de symboles noyau et la « géométrie de la porteuse » de l'exploit sont ancrées sur ce build précis ; après un changement de noyau, la table d'offsets devient immédiatement caduque, et généralement sans retour possible.
┌─ Matériaux ────────────────────────────────────────────┐
│ boot.img + xbl_config.elf (extraits du firmware de l'appareil) │
│ ↓ résolution de symboles │
│ target.h (adresses de symboles noyau, vérifiées octet par octet avec kallsyms) │
│ ↓ compilation │
│ preload.so ──► /data/local/tmp/*.so sur l'appareil │
└────────────────────────────────────────────────────────┘
↓ injection LD_PRELOAD
┌──────────── en deux étapes (deux processus distincts obligatoires) ────────────┐
│ Étape A GW_SELINUX=1 → selinux_state.enforcing = 0 │
│ Étape B GW_CHAIN=1 RTSIG_TASK_INIT=1 GW_SU=1 │
│ → task->real_cred ← &init_cred │
│ → task->cred ← &init_cred (réalisé par le processus « écrivain pré-positionné ») │
│ → setresuid(0,0,0) normalisation │
│ → implantation d'un su embarqué + daemon │
└─────────────────────────────────────────────────────────────┘
↓
uid=0(root) context=u:r:kernel:s0
Trois points à ne pas rater (une erreur bloque tout ou provoque un panic immédiat) :
real_cred, ensuite cred. L'ordre inverse donne instantanément tous les privilèges et fait perdre le contrôle des threads.cred ≠ real_cred. À ce moment, tout sched_setaffinity renvoie EPERM → blocage complet du cycle.
La solution correcte est de forker le processus « écrivain pré-positionné » avant la première écriture (identifiants propres) ; le processus père effectue la première écriture, l'écrivain effectue la seconde, et aucun des deux n'émet d'appel système pendant l'état transitoire.alias(image) = PAGE_OFFSET | (image − KIMAGE_TEXT_BASE + Δ), stable à travers les redémarrages ;
la véritable valeur de la « phase slide » est l'auto-vérification de la primitive d'écriture, et non le contournement de KASLR.Framework amont :
Linuxoid-cn/CVE-2026-43499-Poc-Analysis. Attention, ce n'est pas GhostLock — GhostLock passe par la voie pselect, et la géométrie du point de chute du waiter ne correspond pas à ce build, voirdocs/06.
Si vous aussi vous ciblez un modèle dont le BL est verrouillé, réfléchissez d'abord à ce que vous voulez faire avec root, car sur ce type de modèle, root n'est probablement qu'une fenêtre utilisable de quelques dizaines de minutes. Listez les opérations qui « nécessitent root et doivent survivre au redémarrage », exécutez-les en une seule fois, puis
rebootpour revenir à un état propre. N'essayez pas d'« éliminer les effets secondaires » — c'est le coût inhérent de la technique elle-même.
| Élément | Valeur | Remarque |
|---|
| Modèle | Honor WIN RT, modèle AAK-AN00 | Nom commercial « Honor WIN RT » |
| SoC | Snapdragon 8 Elite SM8750-AB | Firmware non compatible avec le Honor WIN (AAP-AN00, SM8850-AC) |
| Système | Android 16 / MagicOS 10 | — |
| Noyau | 6.6.118-android15-8-gf17133276a57-abogki518694926-4k | ★ Condition stricte, correspondance caractère par caractère |
| Configuration noyau | 4K pages, VA_BITS=39, CONFIG_FUTEX_PI=y | Prérequis pour la géométrie de la porteuse |
| Paquet firmware | .170 | .160 / .175 non testés |
| Bootloader | Verrouillé en permanence | Pas de fastboot / pas de su persistant |
| Document | Contenu |
|---|
| 01 · Analyse de faisabilité | Pourquoi il ne reste que rt_sigreturn comme porteuse |
| 02 · Chaîne d'élévation de privilèges et facteurs de succès | Primitive d'écriture, chaîne en six étapes, écrivain pré-positionné, critères de succès |
| 03 · Cause réelle de l'instabilité : résidus de chaîne PI | ★ Essentiel. La « coupure réseau » n'est pas une coupure réseau, c'est un panic ; inclut la désassemblage des points de crash |
| 04 · Canal sans ordinateur : Shizuku | Utiliser rish de Shizuku à la place d'adb pour lancer l'exploit |
| 05 · late-load de KernelSU | Mode d'activation du LKM et pourquoi c'est le détonateur le plus dangereux |
| 06 · Liste des impasses | Chemins essayés mais infructueux, pour éviter que d'autres ne les retentent |
| 07 · Pièges et environnement | Obtenir une pile de panic sans root, pièges d'environnement de script |
| tools/ | Scripts réutilisables (version générique anonymisée) |
| Date | Progrès |
|---|
| 09-08 | Confirmation du verrouillage permanent du BL et de la suppression du canal de déverrouillage OEM ⇒ abandon de la voie officielle, passage à la voie des vulnérabilités |
| 09-09 | Obtention du firmware après-vente du constructeur, récupération de boot.img, extraction du noyau et des symboles |
| 09-10 | Convergence de la recherche de porteuse vers rt_sigreturn ; élévation de privilèges réussie (20:14), uid=0 |
| 09-11 | Mise en place du canal sans ordinateur (Shizuku) ; KernelSU activable ; identification de la cause réelle de la « coupure réseau » = résidus de chaîne PI |