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-2023-28218 — Análisis técnico detallado y exploit de prueba de concepto para CVE-2023-28218, una vulnerabilidad de elevación de privilegios del kernel de Windows en el controlador AFD.sys, con guía de explotación y análisis de parches. | Kitploit
Herramientas/GitHubGitHub/h1bana/cve-2023-28218
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónAprendizaje y EducaciónExplotación de Binarios
GitHubh1bana/cve-2023-28218

CVE-2023-28218

Análisis técnico detallado y exploit de prueba de concepto para CVE-2023-28218, una vulnerabilidad de elevación de privilegios del kernel de Windows en el controlador AFD.sys, con guía de explotación y análisis de parches.

Ver Repositorio
11hace 3 añosAú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

Reporte CVE-2023-28218

Resumen del error

Error que conduce a una escalada de privilegios en el kernel de Windows. El error aparece en el controlador Windows Ancrillary Function Driver for WinSock (AFD.sys). El error fue publicado en el parche del 11/04/2023. Tiene una puntuación CVSS:3.1 7.0 / 6.1 y está clasificado como Important.

Descripción del error

  • Tipo de error: Double fetch y Integer overflow que conducen a un pool overflow.
  • El error ocurre en las funciones Afd!AfdComputeCMSGLength y Afd!AfdCopyCMSGBuffer. img1

Ambas funciones reciben v82 como parámetro de entrada. v82 es una dirección controlada por el modo de usuario. En la función Afd!AfdComputeCMSGLength, esta dirección se referencia directamente para obtener el valor. Luego calcula la longitud del buffer CMSG para retornarla. Después se asigna un pool según este tamaño. Controlando los dos parámetros de entrada a1 y a2, podemos controlar el tamaño que se retornará en el parámetro a3. img2

En la función Afd!AfdCopyCMSGBuffer, la dirección v82 se referencia directamente para obtener el valor. Tras algunas comprobaciones, este valor se utiliza como tamaño de la operación memmove. img3

En esta función hay un error de Integer overflow, combinado con que ambas funciones obtienen directamente el valor desde una dirección del lado de usuario, podemos cambiar su valor durante la ejecución. Esto resulta en un tamaño de memmove muy grande. Al copiar a una región de memoria inaccesible, se produce un try-catch. Pero la copia de las regiones anteriores ya ha ocurrido. Así podemos copiar con el tamaño que queramos. img4

  • Para desencadenar el PoC, primero se debe crear un socket con el parámetro type como SOCK_DGRAM. Luego usar el handle de este socket como parámetro para llamar a la función bind. Finalmente, crear 2 hilos: un hilo llamará continuamente a DeviceControl con el IOCTL 0x120D3. Configurar el userbuffer adecuadamente para eludir algunas comprobaciones. El otro hilo cambiará continuamente el valor almacenado en la dirección de modo de usuario que sirve como parámetro para las dos funciones mencionadas.

Explotación

  • Con este error, podemos desbordar un pool non-paged NX con un tamaño y datos completamente controlables desde el modo de usuario.
  • El enfoque de explotación será hacer spray de muchos objetos NamedPipe, luego liberar algunos objetos para crear agujeros en el heap. Después, crear un pool después de calcular el tamaño desde la función Afd!AfdComputeCMSGLength, este tamaño debe coincidir con el tamaño del objeto NamedPipe. Así, el pool se asignará en los objetos recién liberados. Usar el bug para desbordar los objetos NamedPipe adyacentes, y luego usar los mecanismos de NamedPipe para obtener capacidad de lectura/escritura de la memoria del kernel. Leer el token del proceso system y luego escribirlo en el token del proceso actual.

Rango de afectación

  • Windows Server 2012 R2 (Server Core installation) build anterior a 6.3.9600.20919
  • Windows Server 2012 R2 build anterior a 6.3.9600.20919
  • Windows Server 2012 (Server Core installation) build anterior a 6.2.9200.24216
  • Windows Server 2012 build anterior a 6.2.9200.24216
  • Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation) build anterior a 6.1.7601.26466
  • Windows Server 2008 R2 for x64-based Systems Service Pack 1 build anterior a 6.1.7601.26466
  • Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core installation) build anterior a 6.0.6003.22015
  • Windows Server 2008 for x64-based Systems Service Pack 2 build anterior a 6.0.6003.22015
  • Windows Server 2008 for 32-bit Systems Service Pack 2 (Server Core installation) build anterior a 6.0.6003.22015
  • Windows Server 2008 for 32-bit Systems Service Pack 2 build anterior a 6.0.6003.22015
  • Windows Server 2016 (Server Core installation) build anterior a 10.0.14393.5850
  • Windows Server 2016 build anterior a 10.0.14393.5850
  • Windows 10 Version 1607 for x64-based Systems build anterior a 10.0.14393.5850
  • Windows 10 Version 1607 for 32-bit Systems build anterior a 10.0.14393.5850
  • Windows 10 for x64-based Systems build anterior a 10.0.10240.19869
  • Windows 10 for 32-bit Systems build anterior a 10.0.10240.19869
  • Windows 10 Version 22H2 for 32-bit Systems build anterior a 10.0.19045.2846
  • Windows 10 Version 22H2 for ARM64-based Systems build anterior a 10.0.19045.2846
  • Windows 10 Version 22H2 for x64-based Systems build anterior a 10.0.19045.2846
  • Windows 11 Version 22H2 for x64-based Systems build anterior a 10.0.22621.1555
  • Windows 11 Version 22H2 for ARM64-based Systems build anterior a 10.0.22621.1555
  • Windows 10 Version 21H2 for x64-based Systems build anterior a 10.0.19044.2846
  • Windows 10 Version 21H2 for ARM64-based Systems build anterior a 10.0.19044.2846
  • Windows 10 Version 21H2 for 32-bit Systems build anterior a 10.0.19044.2846
  • Windows 11 version 21H2 for ARM64-based Systems build anterior a 10.0.22000.1817
  • Windows 11 version 21H2 for x64-based Systems build anterior a 10.0.22000.1817
  • Windows 10 Version 20H2 for ARM64-based Systems build anterior a 10.0.19042.2846
  • Windows 10 Version 20H2 for 32-bit Systems build anterior a 10.0.19042.2846
  • Windows 10 Version 20H2 for x64-based Systems build anterior a 10.0.19042.2846
  • Windows Server 2022 (Server Core installation) build anterior a 10.0.20348.1668
  • Windows Server 2022 build anterior a 10.0.20348.1668
  • Windows Server 2019 (Server Core installation) build anterior a 10.0.17763.4252

El parche

  • El error se ha corregido reemplazando las dos funciones antiguas por dos nuevas, las funciones antiguas tienen el sufijo _old al final del nombre. Estas nuevas funciones ya. En las dos nuevas funciones, aunque todavía hay double fetch, pero el valor obtenido se verifica antes de usarlo. Se utilizan funciones Rtl para reemplazar las operaciones aritméticas, evitando el Integer overflow.

Conclusión

  • El error tiene un rango de afectación muy amplio, amenazando a muchos sistemas. Sin embargo, el payload de explotación al ejecutarse todavía tiene una pequeña tasa de fallos que provoca un crash de Windows debido al spray del heap. Además, después de haber escalado los privilegios del proceso cmd a System, si se sale de este proceso también provocará un crash de Windows. Esto se debe a que durante la explotación se ha corrompido el objeto NamedPipe.

Adjuntos

  • PoC mínimo minimal
  • PoC de explotación exploit
Descargar herramienta
  • Windows Server 2019 build anterior a 10.0.17763.4252
  • Windows 10 Version 1809 for ARM64-based Systems build anterior a 10.0.17763.4252
  • Windows 10 Version 1809 for x64-based Systems build anterior a 10.0.17763.4252
  • Windows 10 Version 1809 for 32-bit Systems build anterior a 10.0.17763.4252