
Investigación de CVE y exploits para ayudar a obtener root en dispositivos Pixel
Rootea un Google Pixel de fábrica con el bootloader bloqueado desde un adb shell sin privilegios, usando una CVE del kernel — sin desbloqueo, sin flasheo, sin ayuda del fabricante.
Un fallo del kernel alcanzable desde espacio de usuario proporciona una primitiva de lectura/escritura de corta duración. Esa primitiva se emplea en cargar tardíamente un módulo de KernelSU en el kernel GKI en ejecución, tras lo cual se entrega root al gestor de KernelSU que ya esté instalado. No se escribe ninguna partición, por lo que un reinicio es la desinstalación. Todo se ejecuta desde el host a través de adb mediante un único ejecutable, ./pixel-ksu-root.
| CVE | el fallo | en qué punto está |
|---|---|---|
| CVE-2026-43499 — GhostLock | un recorrido PI de futex sigue un rt_mutex_waiter que remove_waiter() dejó colgando, leído desde una ranura de pila que pselect(2) ha vuelto a ocupar | rootea, verificado en hardware; es la receta default, así que una ejecución sin más la toma |
| CVE-2026-43049 — FFWheel | hidpp_probe() publica el dispositivo de entrada antes de la inicialización de force-feedback y devuelve el error sin hid_hw_stop(), por lo que un struct uhid_device liberado sigue siendo alcanzable a través de /dev/input/eventN | rootea, verificado en hardware; un use-after-free desde un shell sin privilegios hasta lectura/escritura arbitraria del kernel, y luego una sobrescritura del propio cred in situ |
| CVE-2026-93189 — Joyride | hid_hw_stop() nunca espera a que la entrada se detenga, así que un probe fallido libera el struct hidraw en el que hidraw_report_event() sigue escribiendo en otro procesador | sucesor candidato; el camino hacia el free se recorre en hardware desde un shell sin privilegios a través de /dev/uhid, y está abierto en compilaciones que cierran ambas cadenas anteriores |
| CVE-2026-46242 — BadEpoll | __ep_remove() limpia file->f_ep y sigue usando el archivo, por lo que un __fput() concurrente libera el eventpoll a través del cual sigue escribiendo | parcial; tanto la cadena de lectura como la de escritura se ejecutan de principio a fin, pero la entrega a través del límite del slab no está resuelta |
| CVE-2026-56945 — RogueWave | bigo_iommu_fault_handler() recorre una lista global de instancias del driver sin bloqueo, sobre una suposición documentada e incorrecta acerca de su llamador | alcanzable sin privilegios a través de la API pública AMediaCodec; el propio manejador de fallos aún no se ha alcanzado |
| CVE-2026-56914 — DirtyDock | gcip_iommu_mapping_unmap_buffer() marca como sucia una página DMA fijada con el set_page_dirty() sin bloqueo en lugar de su variante con bloqueo, compitiendo con el desmontaje de la memoria subyacente | desencadenable de principio a fin, aunque el nodo de dispositivo está restringido por privilegios; dos estrategias de carrera refutadas, el timing aún no se ha ganado |
| CVE-2026-64468 — Frostbind | binder_free_transaction() desreferencia t->to_proc sin mantener una referencia | caza; la lectura vulnerable se ejecuta, pero la carrera se pierde en hardware real |
| CVE-2026-64469 — Frostwalk | un hermano de Frostbind, en la misma función: la lectura sin bloqueo de binder_free_transaction() compite con binder_thread_release() recorriendo el transaction_stack de un hilo diferente | caza; tanto el free como el recorrido están confirmados como alcanzables, sin ninguna dependencia de root en el mecanismo — alcanza un proceso de aplicación de la misma forma que Shizuku; un intento de recuperación sin una lectura de verificación (flood + pin) aún no ha dado resultado — el objetivo real de la escritura todavía no se distingue |
| CVE-2026-64560 — Zombietick | un temporizador POSIX de CPU de alcance de proceso se libera mientras sigue en cola, porque posix_cpu_timer_del() retorna antes de tiempo una vez que de_thread() ha puesto a null ->sighand | caza; la etapa de KASLR llega, el descriptor puente nunca valida |
| CVE-2026-49881 — Telecom | Telecom confía en un nombre de componente proporcionado por el llamador y lo carga con CONTEXT_INCLUDE_CODE, por lo que una app cebo ejecuta Java arbitrario dentro de system_server | investigación; un pivote de dominio en espacio de usuario más que un fallo del kernel, emparejado con domainprobe/ |