fontTools
CVE-2025-66034
CRITICAL
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessDeliver malicious .designspace file
-
DeliveryVictim runs fontTools.varLib build
-
ExploitPath traversal via unsanitized filename
-
ExecutionWrite payload to web-accessible path
-
PersistExecute injected code
-
ImpactRCE / escalate to overwrite system files
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization XPath query parameterization
|
| Exploitation Conditions | Requires that the target process an attacker-supplied malicious .designspace file through the fontTools.varLib main() code path - specifically the |
| Impact | Signals conflict sharply here. The published CVSS of 9.8 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N) models this as remote, unauthenticated, zero-interaction network exploitation, but the vulnerability is in a build-time CLI/library code path (fontTools.varLib.main(), invoked via |
| Exploit ScenarioDerived | An attacker crafts a malicious .designspace file whose <variable-font> filename attribute contains path-traversal sequences and whose labelname/XML content embeds executable payload (e.g. PHP). A developer or an automated build/upload service runs |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv2 – Oct 18, 2026
Arbitrary file write leading to remote code execution in the fontTools Python library (versions 4.33.0 through 4.60.1) is reachable through the fonttools varLib CLI, python3 -m fontTools.varLib, or any code that calls fontTools.varLib.main() on an attacker-supplied .designspace file. The <variable-font> filename attribute is passed unsanitized into the output path calculation, letting path-traversal sequences escape the intended output directory, while labelname XML injection lets the attacker control the content that is written; landing that file in a web-accessible or executable location turns the write into code execution, and overwriting files such as /etc/passwd produces denial of service. Publicly available exploit code exists (a full proof-of-concept ships with the GitHub advisory), but there is no CISA KEV confirmation of active exploitation, EPSS is low at roughly 0.10% (27th percentile), and the assessed vector is local with user interaction (CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H), because the victim or an automated build pipeline must actually run varLib against the malicious design file.
Earlier versions of this analysis (1)
fontTools is a library for manipulating fonts, written in Python. Rated medium severity (CVSS 6.3), this vulnerability is no authentication required. Public exploit code available.
RemediationAI
Upgrade to fontTools 4.60.2 or later (pip install --upgrade 'fonttools>=4.60.2'), or apply the equivalent distribution update from Red Hat (RHSA-2026:2106 / RHSA-2026:2695 / RHSA-2026:3713) or SUSE (SUSE-SU-2026:0199 / SUSE-SU-2026:20184), since distro packages pin their own builds; the upstream fix is commit a696d5ba93270d5954f98e7cab5ddca8a02c1e32 and details are in GHSA-768j-98cg-p3fv. Until patched, the practical control is input trust: never run fonttools varLib or python3 -m fontTools.varLib against .designspace files from untrusted or third-party sources, and for untrusted font-submission workflows run the build inside a container or sandbox with a read-only root filesystem, a writable mount limited to the intended output directory, and no network access - with the trade-off that legitimate builds writing to subdirectories or absolute paths will fail, and the sandbox does not prevent corruption of the mounted output directory. Avoid running varLib as root or as an account with write access to system paths, since overwriting files such as /etc/passwd is a demonstrated impact, and treat any generated output as untrusted content (do not serve it from a web-executable directory until validated). Note also that the low EPSS score (0.10%) reflects the requirement for a victim to process a crafted design file, not an absence of exploit code - a working proof-of-concept is published.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
fontTools is the reference Python library for reading and writing OpenType/TrueType fonts, and varLib is the variable-font builder that consumes a .designspace document describing sources, axes, and variable-font outputs. Designspace documents are XML, and the vulnerability is rooted in CWE-91 (XML Injection): the designspaceLib parser accepts arbitrary strings in the <variable-font filename="..."> attribute and in labelname elements without validating or escaping them. In Lib/fontTools/varLib/__init__.py, main() previously did filename = vf.filename followed by output_path = os.path.join(output_dir, filename) and vf.save(output_path), so a value containing ../ segments (or an absolute path) resolves outside the chosen output directory - an arbitrary write with attacker-selected path, extension, and, via injected labelname content, file body. The upstream fix commit a696d5ba93270d5954f98e7cab5ddca8a02c1e32 applies os.path.basename(vf.filename) before joining, and documents in Doc/source/designspaceLib/xml.rst and the designspaceLib API docstring that the attribute is a basename/stem only and that directory separators are ignored for security reasons. The code path matters: this is a build-time tool, not a network service, which is why the assessed vector is AV:L/UI:R rather than NVD's AV:N - the attacker must get a malicious design file in front of someone (or some CI job) that invokes varLib.
Know when Fonttools gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
Sources disagree (Medium–Critical)AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Exploitation requires a victim to run the varLib build on an attacker-supplied .designspace file, so AV:L and UI:R rather than NVD's AV:N/UI:N; arbitrary file write to RCE gives full C/I/A impact.
AV:L/AC:H/PR:N/UI:R/S:C/C:N/I:H/A:L
vuln.today treats the vendor’s rating as authoritative. A higher third-party CVSS (e.g. CISA-ADP) is shown for transparency but does not drive the headline severity.
CVSS VectorNVD
Lifecycle Timeline
6DescriptionNVD
fontTools is a library for manipulating fonts, written in Python. In versions from 4.33.0 to before 4.60.2, the fonttools varLib (or python3 -m fontTools.varLib) script has an arbitrary file write vulnerability that leads to remote code execution when a malicious .designspace file is processed. The vulnerability affects the main() code path of fontTools.varLib, used by the fonttools varLib CLI and any code that invokes fontTools.varLib.main(). This issue has been patched in version 4.60.2.
Executive ViewAI
A critical arbitrary file-write flaw in the fontTools Python library (versions 4.33.0 through 4.60.1) can escalate to code execution whenever the bundled varLib command-line tool is pointed at an attacker-supplied .designspace file, giving an adversary the ability to place or overwrite files anywhere the running process has permission. The exposure is concentrated in engineering, design-tooling, and CI/CD environments that automatically process third-party font assets, where a build agent or developer workstation could be turned into an execution foothold or destabilized by overwriting system files. Leadership should care because publicly available exploit code exists and the library is deeply embedded as a transitive dependency, so most affected teams will not see it in a standard application inventory.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Affected Products (CPE)NVD
Same weakness CWE-91 – XML Injection (aka Blind XPath Injection)
View allVendor StatusVendor
SUSE
Severity: Medium| Product | Status |
|---|---|
| Container suse/sl-micro/6.1/baremetal-os-container:2.2.1-7.2 Image SL-Micro-Azure Image SL-Micro-BYOS-Azure Image SL-Micro-BYOS-EC2 Image SL-Micro-BYOS-GCE Image SL-Micro-EC2 Image SUSE-Multi-Linux-Manager-Proxy-BYOS-Azure Image SUSE-Multi-Linux-Manager-Proxy-BYOS-EC2 Image SUSE-Multi-Linux-Manager-Proxy-BYOS-GCE Image SUSE-Multi-Linux-Manager-Server-Azure-llc Image SUSE-Multi-Linux-Manager-Server-Azure-ltd Image SUSE-Multi-Linux-Manager-Server-BYOS-Azure Image SUSE-Multi-Linux-Manager-Server-BYOS-EC2 Image SUSE-Multi-Linux-Manager-Server-BYOS-GCE Image SUSE-Multi-Linux-Manager-Server-EC2-llc Image SUSE-Multi-Linux-Manager-Server-EC2-ltd | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP7 | Fixed |
| SUSE Linux Enterprise Server 16.0 SUSE Linux Enterprise Server for SAP applications 16.0 | Fixed |
| openSUSE Leap 15.6 | Fixed |
| openSUSE Leap 16.0 | Fixed |
| openSUSE Tumbleweed | Fixed |
| SUSE Linux Enterprise Server 16.0 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP7 | Fixed |
| SUSE Linux Enterprise Server 16.0 | Fixed |
| SUSE Linux Enterprise Server 16.1 | Fixed |
| SUSE Linux Enterprise Server for SAP applications 16.0 | Fixed |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Fixed |
| openSUSE Leap 15.6 | Fixed |
| SUSE Linux Enterprise Module for Package Hub 15 SP6 | Fixed |
NVD
CVE.org
EPSS
GitHub
VulDB
Exploit-DB