Skip to main content

fontTools CVE-2025-66034

CRITICAL
XML Injection (aka Blind XPath Injection) (CWE-91)
2025-11-29 security-advisories@github.com
Critical
Disputed · 9.8 NVD
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Deliver malicious .designspace file
  2. Delivery
    Victim runs fontTools.varLib build
  3. Exploit
    Path traversal via unsanitized filename
  4. Execution
    Write payload to web-accessible path
  5. Persist
    Execute injected code
  6. Impact
    RCE / 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 fonttools varLib CLI, python3 -m fontTools.varLib, or any code calling fontTools.varLib.main() - on a vulnerable version (>=4.33.0, <4.60.2). The concrete injectable element is the <variable-font> filename attribute, which was passed unsanitized to os.path.join()/vf.save(), allowing path-traversal writes; content is injected via labelname XML elements. Limiting factors: exploitation is gated on a victim or automated pipeline running the varLib build against untrusted input (so it is not opportunistic network exploitation against a default service), and achieving RCE further requires the written file to land in a web-accessible or otherwise executable location. Not applicable to users who never run varLib or never process untrusted .designspace files.

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 fonttools varLib or python3 -m fontTools.varLib) that must be fed an attacker-supplied malicious .designspace file - so in most real deployments it requires a victim to process an untrusted file (effectively local vector with user interaction), not an internet-facing listener. The AV:N/UI:N rating is only defensible where a service automatically ingests and builds user-uploaded .designspace files. EPSS is very low at 0.10% (27th percentile), the CVE is NOT on CISA KEV, and there is no evidence of active exploitation; exploitation status is 'publicly available exploit code exists' (POC in the GHSA, plus a documented PoC). Net: this is a legitimate critical-impact RCE-class flaw (arbitrary file write + XML/content injection chaining to code execution), but its real-world priority is below what the 9.8 implies - exploitation depends on someone running the font-build tool against attacker-controlled input, and widespread opportunistic exploitation is unlikely. Treat as high-priority for anyone with automated font-build pipelines or services that accept uploaded .designspace files; medium elsewhere. Patch is confirmed available (4.60.2) and downstream-shipped by Red Hat and SUSE.

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 fonttools varLib (or calls fontTools.varLib.main()) on it, causing the tool to write attacker-controlled content to an arbitrary filesystem location such as a web-accessible directory; when that file is served/executed, remote code execution results. A working proof-of-concept is published in the GitHub Security Advisory (GHSA-768j-98cg-p3fv).

Act Now Prioritize within 24-48h. Why: CRITICAL severity + public POC available.
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv2 – 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)
v1 Mar 28, 2026 - 19:24 CVSS 6.3

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

pypi fonttools fix: 4.60.2

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)
NVD PRIMARY 9.8 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 7.8 HIGH

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.

3.1 AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
4.0 AV:L/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
SUSE 6.3 MEDIUM
AV:L/AC:H/PR:N/UI:R/S:C/C:N/I:H/A:L
Red Hat 6.3 MEDIUM

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

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

6
Analysis Updated
Oct 18, 2026 - 18:28 vuln.today
v2 - CVSS changed
Severity Changed
Oct 18, 2026 - 18:22 NVD
MEDIUM CRITICAL
CVSS changed
Oct 18, 2026 - 18:22 NVD
6.3 (MEDIUM) 9.8 (CRITICAL)
Patch released
Mar 28, 2026 - 19:24 nvd
Patch available
PoC Detected
Dec 03, 2025 - 21:50 vuln.today
Public exploit code
CVE Published
Nov 29, 2025 - 01:16 nvd
MEDIUM 6.3

DescriptionNVD

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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.1%
Top 73% exploitable
Prevalence
Medium
very popular Python font library, but vulnerable varLib build path is specialized tooling
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High
NVD CVE.org EPSS Vendor GitHub VulDB

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.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC Yes
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity + public POC available
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Out-of-Cycle
Exploitation· derived
Poc
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

Priority Score

69
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +49
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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

cpe:2.3:a:fonttools:fonttools:*:*:*:*:*:python:*:*

Vendor 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

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy