Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
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
CVE-2021-28664-PoC — Esqueleto de PoC para CVE-2021-28664, un use-after-free en el controlador de GPU Mali kbase, que demuestra una primitiva de lectura/escritura arbitraria de memoria física en el kernel en Android ARM64. | Kitploit
Herramientas/GitHubGitHub/woaphone/cve-2021-28664-poc
Seguridad AndroidForensia de MemoriaAnálisis de VulnerabilidadesExplotaciónSeguridad MóvilSeguridad de Hardware e IoTPapers e InvestigaciónAprendizaje y EducaciónExplotación de Binarios

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
GitHubwoaphone/cve-2021-28664-poc

CVE-2021-28664-PoC

Esqueleto de PoC para CVE-2021-28664, un use-after-free en el controlador de GPU Mali kbase, que demuestra una primitiva de lectura/escritura arbitraria de memoria física en el kernel en Android ARM64.

Ver Repositorio
hace 11h 5mAún no revisado

CVE-2021-28664-PoC

Esqueleto de PoC para la primitiva de lectura/escritura arbitraria de memoria física del kernel a partir de un UAF en el driver Mali kbase GPU (CVE-2021-28664). Orientado a plataformas ARM64 Android genéricas, independiente de cualquier fabricante o modelo concreto.

El alcance de la investigación llega únicamente hasta la "primitiva de lectura/escritura arbitraria de memoria física del kernel": cómo convertir un use-after-free de un driver GPU en una capacidad de lectura/escritura de memoria del kernel estable, controlada y con fallo seguro.

Este repositorio no proporciona ningún ataque. No contiene exploits terminados, ni código directamente ejecutable, ni offsets/números de serie/firmware de ningún dispositivo; queda prohibido utilizar cualquier contenido para actividades de ataque (ver más abajo).


Descargo de responsabilidad / Disclaimer (lectura obligatoria)

  1. Este repositorio no proporciona ataques. Este repositorio es un análisis técnico del principio de la vulnerabilidad y de las primitivas de corrupción de memoria, e incluye únicamente documentación metodológica y plantillas didácticas con todos los valores específicos de dispositivo en blanco. No puede utilizarse directamente para atacar ningún dispositivo.
  2. Ataques prohibidos. Queda terminantemente prohibido utilizar el contenido de este repositorio contra cualquier dispositivo no autorizado, dispositivo ajeno o para cualquier fin ilegal; todas las consecuencias derivadas de ello son responsabilidad exclusiva del usuario y ajenas al autor.
  3. Los experimentos de investigación se realizaron únicamente en dispositivos propiedad del propio autor, con el propósito de reproducir la vulnerabilidad y realizar investigación de seguridad.
  4. CVE-2021-28664 fue corregido por el upstream (Arm/Mali) en 2021; los afectados son drivers/firmwares antiguos que no se han actualizado durante mucho tiempo. El valor de esta investigación radica en comprender el principio de explotación de vulnerabilidades históricas y el enfoque de detección desde la perspectiva defensiva.
  5. El contenido de este repositorio se proporciona "AS IS", sin garantía explícita ni implícita de ningún tipo.
  6. Si representas a un fabricante/equipo de seguridad y necesitas más detalles, contacta con el autor a través de GitHub.

Ámbito de aplicación

Técnicamente aplicable (premisas para que cada eslabón de la cadena de explotación se cumpla)

Técnicamente no aplicable

  • Drivers Mali con CVE-2021-28664 ya corregido (posterior a la corrección de la serie r);
  • Plataformas con GPU que no sea Mali (esta cadena depende profundamente del comportamiento alias/MMU-dump de kbase);
  • Kernels nuevos con diferencias significativas en la estructura pipe_buffer/validación de copy_page_to_iter (a partir de 5.x es necesario reverificar según el código fuente correspondiente; la estructura de la cadena sirve de referencia pero los detalles no son universales);
  • Entornos sin permiso de acceso a /dev/mali (restricciones de seLinux/políticas del fabricante).

Declaración de límites

  • Este repositorio cubre únicamente la primitiva de lectura/escritura; localizar objetivos concretos del kernel tras obtener la primitiva, explotarla más a fondo o escalar privilegios queda fuera del alcance de este repositorio.
  • Todas las constantes relacionadas con el dispositivo se dejan en blanco en las plantillas con TODO(DEVICE); la adaptación es trabajo de ingeniería inversa del propio usuario, el repositorio no lo realiza.

Contexto de la vulnerabilidad

CVE-2021-28664: la ruta MEM_ALIAS del driver Mali kbase carece de comprobación del permiso GPU_WR, lo que permite al atacante hacer alias de páginas de memoria GPU ya liberadas en su propio espacio de direcciones GPU, creando una "visibilidad/escritura persistente desde el lado GPU sobre páginas físicas ya liberadas" — un use-after-free que cruza la frontera GPU/kernel.

El valor de explotación no reside en la memoria GPU en sí, sino en que:

  1. Las páginas físicas liberadas serán reasignadas por el slab/buddy del kernel a objetos del kernel (en esta investigación, pipe_buffer);
  2. La vista alias de la GPU sigue viendo estas páginas → permite leer/escribir campos de objetos que el kernel está utilizando;
  3. Mediante jobs WRITE_VALUE de la GPU se realizan modificaciones puntuales sobre las páginas visibles por alias.

Hasta dónde llega esta investigación

root@kitploit:~
buffer GPU víctima + dump de tablas de páginas MMU → construir el mapa de direcciones físicas
  → trigger de liberación del buffer para generar presión → spray de pipe (F_SETPIPE_SZ reducido)
  → el array pipe_buffer cae en la zona liberada (reutilización UAF entre cachés)
  → escaneo del puntero ops en la vista alias → fuga de anon_pipe_buf_ops → KASLR slide
  → la GPU reescribe page / offset / len de pipe_buffer
  → aprovechando la ruta legítima de pipe read/write
  ⇒ lectura de página física arbitraria (falsificación del puntero page)
  ⇒ escritura de página física arbitraria (ruta de escritura pipe merge)
  ⇒ usar una página de contenido conocido como oráculo de autoverificación, garantizando que la lectura/escritura no caiga en huecos/zonas no mapeadas

Hasta aquí.

Puntos técnicos clave (cada uno tiene una sección independiente en docs/)

  • Múltiples puertas de seguridad: antes de cualquier lectura física deben superarse las puertas de overlap / autoconsistencia / contigüidad / autoverificación de contenido, etc.; si alguna falla, se restaura el estado y se sale inmediatamente — la disciplina de ingeniería más importante de toda la investigación.
  • Trampas del modelo de direcciones físicas: contaminación de bits de flags software en los PTE de la GPU, truncamiento a 32 bits de direcciones físicas, aleatorización de KASLR también sobre la base física de la imagen del kernel, diferencias en la implementación de page_to_virt entre fabricantes, regiones reservadas no-map que simplemente no existen en el mapeo lineal (leerlas provoca panic).
  • Tratamiento de la ambigüedad de m: la ambigüedad de los bits altos de la dirección física nunca se resuelve adivinando; se utiliza el "oráculo de página de contenido conocido" para la autoverificación de contenido.
  • Vida útil de la primitiva y fallo seguro: las sondas de lectura tienen un presupuesto de intentos; al superarlo debe abandonarse la ronda; cada ruta de salida de cada experimento debe restaurar los campos de objetos manipulados.

Estructura del repositorio

root@kitploit:~
docs/
  01-exploit-chain.md            Del UAF a la primitiva de lectura/escritura: principios y puntos de implementación de cada fase
  02-physical-address-model.md   Modelo de direcciones físicas, puertas de seguridad, ambigüedad de m, trampas conocidas
exploit/
  cve-2021-28664-poc.c           Plantilla de PoC: esqueleto completo del flujo de la primitiva de lectura/escritura (sin valores de dispositivo)
scripts/
  README.md                      Descripción del diseño de las herramientas de automatización experimental (bucle/verificación/restauración)

Descripción del código fuente

exploit/cve-2021-28664-poc.c es la plantilla esqueleto de PoC de la primitiva de lectura/escritura:

  • Conserva la estructura completa del flujo (preparación de recursos → spray → escaneo → calibración → primitiva de lectura/escritura → restauración y salida);
  • Todas las constantes relacionadas con el dispositivo están marcadas con TODO(DEVICE), sin ningún valor directamente utilizable;
  • Antes de cada operación peligrosa hay puertas de verificación explícitas y rutas de restauración, mostrando el diseño de "fallo seguro".

Sirve para comprender cómo se organiza toda la cadena; no puede compilarse directamente en una herramienta eficaz contra ningún dispositivo.

Referencias

  • Driver ARM Mali kbase (árbol de código fuente público del kernel)
  • Registro de corrección upstream de CVE-2021-28664 y análisis públicos
  • Linux fs/pipe.c / include/linux/pipe_fs_i.h (código fuente público)
  • Modelo de memoria arm64: Documentation/arch/arm64/memory.rst (documentación pública)

License

  • Código (exploit/): GPL-3.0, ver LICENSE
  • Documentación (README, docs/, scripts/): CC BY-NC-SA 4.0, ver LICENSE-DOCS (prohibido el uso comercial; el contenido derivado debe compartirse bajo la misma licencia y conservar esta declaración)
Descargar herramienta
EslabónCondición previa
Vulnerabilidad en síLa versión del driver Mali kbase se encuentra en el rango afectado por CVE-2021-28664 (serie r anterior a la corrección upstream); no depende de la versión del kernel, solo del driver
Recursos GPU/dev/mali es accesible para el proceso correspondiente; MEM_ALLOC soporta buffers grandes con SAME_VA; el comportamiento de MEM_ALIAS coincide con la descripción de la vulnerabilidad
Reutilización de tuberíasLinux ≥ 4.5 (introducción de pipe_buf_operations), verificado en 4.9 ~ 4.14; F_SETPIPE_SZ permite reducir la tubería a una sola página
Fuga de KASLRKernel con CONFIG_RANDOMIZE_BASE habilitado (arm64 ≥ 4.6); anon_pipe_buf_ops existe en la tabla de símbolos pública
Modelo de direcciones físicasarm64 + diseño vmemmap; sizeof(struct page) y el formato de tablas de páginas deben medirse en el dispositivo, no pueden asumirse