
Utilisez CVE-2026-43499 pour désactiver SELinux sur Android
Extraction uniquement de la Write-1 de
JoinChang/ghostlock-oneplus
pour CVE-2026-43499. Il
désactive SELinux enforcing sur les noyaux OnePlus pris en charge et vulnérables avec un
chargeur d'amorçage verrouillé, et ne fait rien d'autre : pas d'écrasement de cred, pas de shell root, pas de
KernelSU, pas de bootstrap, et pas de fuite KASLR.
CVE-2026-43499 est une utilisation après libération (use-after-free) du rtmutex du noyau Linux dans le chemin de réexpédition du futex PI.
Lors du rollback du proxy-lock, remove_waiter() opère sur current
au lieu de la tâche du waiter, laissant le pointeur pi_blocked_on du waiter
dangling. Cela est corrigé en amont dans Linux 6.12.86 et les versions 6.12 plus récentes.
Une seule écriture PI de nœud enfant :
fake_right = base + 0x100 -> byte0 = 0 (enforcing), byte1 = 1
Il réutilise le heap spray de l'exploit complet + la route PI pselect, mais contourne KASLR
(kaslr_slide = 0). Il réessaie jusqu'à 20 fois (avec drainage du slab entre
les tentatives) et se termine dès que /sys/fs/selinux/enforce lit 0.
La primitive partagée (heap spray de util.c, route pselect de fops.c,
kernelsnitch, et les tables d'offset) est conservée.
Voir src/devices/offsets.h, indexé par uname -r :
6.12.38-android16-5-...-ab14275539-4k6.12.38-android16-5-...-ab14552068-4k6.12.23-android16-5-...-ab14541642-4k (offsets only, unverified)make # uses /opt/android-ndk (or $ANDROID_NDK_HOME)
Produit selinux_disabler, un PIE aarch64 pour Android API 35.
adb push selinux_disabler /data/local/tmp/a/e && chmod 755 /data/local/tmp/a/e
adb shell /data/local/tmp/a/e
Vérification :
adb shell cat /sys/fs/selinux/enforce # -> 0
Seul boot.img est nécessaire. Utilisez les utilitaires d'extraction dans le
répertoire tools du projet,
puis ajoutez une entrée dans src/devices/<device>/offsets.h et incluez-la depuis
src/devices/offsets.h.
Uniquement à des fins de recherche en sécurité et d'éducation autorisées.
| Supprimé | Raison |
|---|
slide.c | fuite KASLR SLIDE — pas nécessaire (slide = 0) |
pipe.c | R/W physique via pipe — utilisé uniquement par l'étape CFI/root |
root.c | patche de cred / install_android_root — Write 2 uniquement |
miniadb.c | client mini ADB bootstrap — non utilisé |
try_cfi_stage, install_child_root, repair/refresh/leak/restore helpers (fops.c) | étape CFI / fuite KASLR / pipe-physrw — jamais atteinte sur le chemin d'écriture personnalisé |
perf_find_task, spawn_child, write_root_script, run_exploit, run_bootstrap (main.c) | Write 2 (cred → init_cred), shell root, KSU, bootstrap |