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-21017 — Prueba de concepto del exploit para CVE-2021-21017, una confusión de tipos en Adobe Reader que provoca una lectura fuera de los límites y un desbordamiento de montón, con análisis técnico y orientación de detección. | Kitploit
Herramientas/GitHubGitHub/tzwlhack/cve-2021-21017
Forensia de MemoriaAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebAnálisis de Binarios
GitHubtzwlhack/cve-2021-21017

CVE-2021-21017

Prueba de concepto del exploit para CVE-2021-21017, una confusión de tipos en Adobe Reader que provoca una lectura fuera de los límites y un desbordamiento de montón, con análisis técnico y orientación de detección.

Ver Repositorio
5hace 4 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

CVE-2021-21017

Otro bug de Byte Order Mark en Adobe Reader :)

root@kitploit:~
# IA32 plugin, ver. 2020.013.20074.
char * __cdecl FUN_2581894c(char *base_url,LPCSTR rel_url)
{
  ............................................................
  ............................................................
  if ((base_url != (char *)0x0) && (rel_url != (LPCSTR)0x0)) {
    if ((*base_url == -2) && (base_url[1] == -1)) {
      iVar6 = bytes_len(base_url);
      pcVar7 = base_url + iVar6;
      pcVar8 = rel_url + 2;
      do {
        do {
          cVar3 = *pcVar8;
          pcVar1 = pcVar8 + 2;
          *pcVar7 = cVar3;
          pcVar2 = pcVar7 + 2;
          cVar4 = pcVar8[1];
          pcVar7[1] = cVar4;
          pcVar7 = pcVar2;
          pcVar8 = pcVar1;
        } while (cVar3 != '\0');
      } while (cVar4 != '\0');
    }
    else {
      lstrcatA(base_url,rel_url);
    }
    return base_url;
  }
  .............................................................
  .............................................................
}

Al construir una URL absoluta a partir de una relativa al baseURL de un documento PDF para ser utilizada por APIs como: app.launchURL, document.submitForm o app.media.createPlayer, si el baseURL parece ser una cadena UTF-16BE, la relativa también se trata como una cadena UTF-16BE al realizar la concatenación, aunque en realidad es una cadena ANSI.

Esto puede resultar en un acceso de lectura fuera de límites por un lado. Por otro lado, al asignar memoria para contener el búfer de destino, la URL relativa se "mide" como una cadena ANSI. Esto, por supuesto, no es suficiente si se produce una lectura fuera de límites. (cadena + el terminador NULL llenando un chunk completo del heap).

¿Qué significa esto?

Confusión de tipos => Lectura fuera de límites => Desbordamiento del heap => ¡FULL BUKAKE!

PoC Adjunto

La mayoría de las veces resultará en un fallo y ocasionalmente en sobrescribir el byteLength de un ArrayBuffer a 0xFF.

Si tienes preguntas, no dudes en contactarme en twitter: https://twitter.com/Zeusb0x

Detección

El catálogo del documento PDF tendrá una entrada URI que contiene una referencia indirecta a un objeto de diccionario. Este, a su vez, tendrá una entrada Base, que es el baseURL real. Lo más probable es que esté presente en notación hexadecimal y comience con los caracteres \xFE\xFF. (ver PoC). Afortunadamente, esta es la única forma de cambiar el baseURL de un documento en un contexto normal y sin privilegios. Intentar hacerlo desde JavaScript lanzará una excepción de seguridad.

Descargar herramienta