Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
UnPlus — CVE-2026-43499 exploit de root por arranque — lógica central (arm64 Android GKI 6.6) | Kitploit
Herramientas/GitHubGitHub/no-22-github/unplus
Seguridad AndroidEscalada de PrivilegiosExplotaciónPruebas de PenetraciónExplotación de Binarios
GitHubno-22-github/unplus

UnPlus

CVE-2026-43499 exploit de root por arranque — lógica central (arm64 Android GKI 6.6)

Ver Repositorio
2314hace 2 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

unplus

UnPlus

CVE-2026-43499 (Futex PI UAF) Código lógico central del exploit de escritura arbitraria en el kernel, utilizado para eludir SELinux y obtener root.

Este repositorio solo contiene el código fuente de la lógica central del exploit (src/) y el empaquetador binario único (wrapper/). src/target.h es una plantilla que debes completar con los parámetros de tu propio dispositivo para ejecutarlo (ver "Adaptación del dispositivo" más abajo).

Compilación

Lógica central (src/)

# Entorno requerido: Android NDK r29+ (API 35, aarch64)
export ANDROID_NDK_ROOT=/path/to/android-ndk

# Compilar producto de lógica pura
make
# → build/unplus            (binario del exploit)
# → build/unplus_preload.so (biblioteca preload)

Los productos son dos ELF, no incrustan ningún binario externo.

Empaquetado binario único completo (wrapper/)

Para empaquetar el exploit y las cargas externas (magiskpolicy / ksud / kernelsu.ko) en un solo binario que se ejecute con un clic, debes proporcionar estas cargas externas y luego empaquetarlas con wrapper/:

# 1. Primero compilar los productos de src/ (ver arriba)
# 2. Generar datos de carga (payload_data.h no está en el repositorio, lo genera el usuario, contiene los bytes de los binarios externos)
cd wrapper
python3 embed_payloads.py \
  --unplus ../build/unplus \
  --preload ../build/unplus_preload.so \
  --magiskpolicy <ruta> \
  --ksud <ruta> \
  --kernelsu <ruta> \
  --out payload/
# 3. Compilar el binario único
make    # → wrapper/build/unplus

Estructura del código fuente

src/
├── target.h          Plantilla de parámetros del dispositivo (los marcados con ◆ FILL IN deben completarse con los valores de tu dispositivo)
├── offset.h          Pegamento de enrutamiento para target.h (inyectado mediante -DTARGET_CONFIG_H)
├── unplus.h          Cabecera de orquestación + declaraciones compartidas (incluye macros derivadas como P0 alias / data_addr)
├── main.c            Orquestación de entrada
├── stage1.c          Write 1/2: Desactivación de SELinux + sobrescritura de cred
├── root.c            Persistencia de root en Android (reparación de SELinux golden + sepolicy + lista blanca de KSU)
├── slide.c           Fuga de KASLR
├── fops.c            Enrutamiento configfs/fops + derivación de la dirección base del kernel
├── route.c           Hilo de enrutamiento de PI futex
├── direct_write.c    Primitiva de lectura directa
├── pipe_direct.c     Escritura directa con pselect
├── pipe_physrw.c     Primitiva physrw por pipe
├── util.c            Funciones de utilidad
├── utils.h           Utilidades generales (log, rutas de procfs)
├── kernelsnitch.h    Capa de arquitectura (mapa de identidad ARM64/x86)
├── futex_hash.h      Portabilidad de jhash del kernel (genérico)
└── timeutils.h       Temporización de capa de arquitectura (ARM/x86/AMD)

Adaptación del dispositivo

src/target.h tiene dos tipos de constantes:

  • Marcados con ◆ FILL IN : Relacionados con el dispositivo/núcleo, debes completar con tus propios valores. La plantilla usa 0xDEADBEEF... como marcador de posición, se compila pero falla al ejecutarse.
  • Sin marcar : Invariantes de GKI 6.6 (desplazamientos de campos de struct), generalmente no es necesario modificarlos.

Cambiar de dispositivo = completar la parte ◆ FILL IN. Para saber qué es cada campo y cómo obtenerlo, consulta el Apéndice: Descripción de campos.

Apéndice: Descripción de campos

Los campos marcados con ◆ FILL IN en target.h se agrupan por propósito:

GrupoCampo (ejemplo)Significado / Método de obtención
Identidad de compilaciónBUILD_VARIANT_LABEL, BUILD_FINGERPRINTCadenas de identificación arbitrarias, para logs. Completa con el build fingerprint de tu dispositivo
Diseño de memoriaKIMAGE_TEXT_BASE, P0_PHYS_OFFSET, VMEMMAP_START, etc.Diseño de direcciones virtuales/físicas del kernel. Para arm64 VA39 suele haber valores predeterminados; confírmalo desde IKCONFIG / kallsyms / /proc/iomem
ASHMEMASHMEM_IOCTL_OFF ... ASHMEM_MISC_FOPS_OFFDesplazamientos de símbolos de los miembros de fops del controlador ashmem + misc. kallsyms_lookup_name("ashmem_fops"), etc.
CONFIGFS / PIPE / VFSCONFIGFS_READ_ITER_OFF, ANON_PIPE_BUF_OPS_OFF, KMALLOC_CACHES_OFF, etc.Desplazamientos de configfs (lectura/escritura), splice, pipe_buf_ops, kmalloc_caches. Consultar con kallsyms
SELinuxSELINUX_ENFORCING_OFF, SELINUX_BLOB_SIZES_OFF, SECURITY_HOOK_HEADS_OFFDesplazamientos de selinux_state / selinux_blob_sizes / security_hook_heads. SELINUX_ENFORCING_OFF es el punto de anclaje de coincidencia de la compilación del kernel, debe ser exacto
Símbolos centrales del kernelINIT_TASK_OFF, INIT_CRED_OFF, ENTRY_TASK_PERCPU_OFF, etc.Desplazamientos de init_task / init_cred / entry_task / __per_cpu_offset / root_task_group. Consultar con kallsyms; ENTRY_TASK_PERCPU_OFF es el desplazamiento de __entry_task dentro de la sección percpu
Per-CPU runtimeTARGET_PCPU_BASE_ADDR, TARGET_PCPU_UNIT_SIZEDirección en tiempo de ejecución del chunk per-CPU (después de KASLR), cambia cada reinicio. Se debe volcar en tiempo de ejecución; UNIT_SIZE depende del número de CPUs
SLIDE (fuga de KASLR)SLIDE_NFULNL_LOGGER_OFF, SLIDE_RANDOM_BOOT_ID_DATA_OFF, etc.Desplazamientos de símbolos de datos del kernel utilizados para la fuga de KASLR (nfulnl_logger / boot_id data, etc.). Consultar con kallsyms
SELinux goldenTARGET_SELINUX_GOLDENPlantilla booleana de los primeros 16 bytes de selinux_state, estable entre reinicios pero diferente por dispositivo. Se debe obtener del volcado de selinux_state de tu dispositivo. byte0 es el bit enforcing, el llamante escribe 0x00 para indicar permissive
Información de inodo de pipePIPE_INODE_INFO_*, PIPE_HEAD_OFF, etc.Diseño de la estructura pipe_inode_info, normalmente estable dentro de la misma familia GKI, pero se debe verificar al cambiar de compilación del kernel

Experiencia general: Todos los desplazamientos del tipo *_OFF se pueden obtener tomando la dirección del símbolo con kallsyms_lookup_name en un dispositivo root y restando KIMAGE_TEXT_BASE. TARGET_PCPU_* y TARGET_SELINUX_GOLDEN son valores de tiempo de ejecución/volcado, no se pueden obtener de una imagen estática.

Licencia

WTFPL — Do What The Fuck You Want To Public License.

Agradecimientos

  • Equipo CyberMeowfia — Marco de escalada de privilegios pipe physrw
  • Referencia de adaptación de dispositivos de la comunidad
Descargar herramienta