Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2021-21017 — Preuve de concept pour CVE-2021-21017, une confusion de type dans Adobe Reader conduisant à une lecture hors limites et à un débordement de tas, avec analyse technique et conseils de détection. | Kitploit
Outils/GitHubGitHub/tzwlhack/cve-2021-21017
Criminalistique MémoireAnalyse des VulnérabilitésExploitationExploitation d'Applications WebAnalyse de Binaires
GitHubtzwlhack/cve-2021-21017

CVE-2021-21017

Preuve de concept pour CVE-2021-21017, une confusion de type dans Adobe Reader conduisant à une lecture hors limites et à un débordement de tas, avec analyse technique et conseils de détection.

Voir le dépôt
5il y a 4 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2021-21017

Encore un bug de Byte Order Mark dans Adobe Reader :)

root@kitploit:~
# Plugin IA32, 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;
  }
  .............................................................
  .............................................................
}

Lors de la construction d'une URL absolue à partir d'une URL relative au baseURL d'un document PDF, destinée à être utilisée par des API telles que : app.launchURL, document.submitForm ou app.media.createPlayer, si le baseURL ressemble à une chaîne UTF-16BE, l'URL relative est également traitée comme une chaîne UTF-16BE lors de la concaténation, alors qu'il s'agit en réalité d'une chaîne ANSI.

Cela peut d'une part entraîner une lecture hors limites. D'autre part, lors de l'allocation de mémoire pour contenir le tampon de destination, l'URL relative est « mesurée » comme une chaîne ANSI. Cela ne suffit bien sûr pas si une lecture hors limites se produit. (chaîne + le terminateur NULL remplissant tout un bloc du tas).

Qu'est-ce que cela signifie ?

Confusion de type => Lecture hors limites => Débordement de tas => BUKAKE TOTAL !

PoC joint

Cela entraînera le plus souvent un crash et, occasionnellement, l'écrasement de la propriété byteLength d'un ArrayBuffer à 0xFF.

Si vous avez des questions, n'hésitez pas à me contacter sur Twitter : https://twitter.com/Zeusb0x

Détection

Le catalogue du document PDF contiendra une entrée URI faisant référence indirectement à un objet dictionnaire. Celui-ci contiendra à son tour une entrée Base, qui est le baseURL réel. Il sera très probablement présent en notation hexadécimale et commencera par les caractères \xFE\xFF. (voir le PoC). Heureusement, c'est la seule façon de modifier le baseURL d'un document dans un contexte normal et non privilégié. Tenter de le faire depuis JavaScript lèvera une exception de sécurité.

Télécharger l’outil