Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2021-21017 — Exploit proof-of-concept per CVE-2021-21017: confusione di tipo in Adobe Reader che porta a overflow dell'heap tramite un baseURL PDF manipolato con disallineamento UTF-16BE/ANSI. | Kitploit
Strumenti/GitHubGitHub/zeusbox/cve-2021-21017
Memory ForensicsAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebFuzzingBinary Exploitation
GitHubzeusbox/cve-2021-21017

CVE-2021-21017

Exploit proof-of-concept per CVE-2021-21017: confusione di tipo in Adobe Reader che porta a overflow dell'heap tramite un baseURL PDF manipolato con disallineamento UTF-16BE/ANSI.

Vedi Repository
44125 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2021-21017

Non un altro bug del Byte Order Mark di 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;
  }
  .............................................................
  .............................................................
}

Quando si costruisce un URL assoluto da uno relativo al baseURL di un documento PDF da utilizzare con API come: app.launchURL, document.submitForm o app.media.createPlayer, se il baseURL sembra essere una stringa UTF-16BE, anche quello relativo viene trattato come stringa UTF-16BE durante la concatenazione, sebbene sia in realtà una stringa ANSI.

Questo può comportare un accesso in lettura fuori dai limiti da un lato. Dall'altro lato, quando si alloca memoria per contenere il buffer di destinazione, l'URL relativo viene "misurato" come stringa ANSI. Questo ovviamente non è sufficiente se si verifica una lettura OOB. (stringa + il terminatore NULL che riempie un intero chunk dell'heap).

Cosa significa?

Confusione di tipo => Lettura fuori dai limiti => Overflow dell'heap => FULL BUKAKE!

PoC allegato

Il più delle volte provocherà un crash e occasionalmente sovrascriverà il byteLength di un ArrayBuffer con 0xFF.

Se hai domande, sentiti libero di contattarmi su twitter: https://twitter.com/Zeusb0x

Rilevamento

Il catalogo del documento PDF avrà una voce URI che contiene un riferimento indiretto a un oggetto dizionario. Questo a sua volta avrà una voce Base, che è l'effettivo baseURL. Sarà molto probabilmente presente in notazione esadecimale e inizierà con i caratteri \xFE\xFF. (vedi PoC). Fortunatamente questo è l'unico modo per cambiare il baseURL di un documento in un contesto normale e non privilegiato. Tentare di farlo da JavaScript genererà un'eccezione di sicurezza.

Scarica lo strumento