Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: [email protected]
Control: affects -1 + src:fonttools
User: [email protected]
Usertags: pu

[ Reason ]
Remote code ececution bug CVE-2025-66034, see #1121605.

[ Impact ]
Arbitrary files can be written w with malicious user input.

[ Tests ]
The codepath still works with a regular designspace file.
I have not tested the vulnerability by manipulating one.

[ Risks ]
The new code uses os.path.basename() to open the file path.

[ Checklist ]
  [x] *all* changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in stable
  [x] the issue is verified as fixed in unstable

[ Changes ]
Add upstream patch untouched to deal with the CVE-2025-66034.
diff -Nru fonttools-4.57.0/debian/changelog fonttools-4.57.0/debian/changelog
--- fonttools-4.57.0/debian/changelog   2025-04-05 21:52:02.000000000 +0200
+++ fonttools-4.57.0/debian/changelog   2026-02-02 18:00:19.000000000 +0100
@@ -1,3 +1,10 @@
+fonttools (4.57.0-1+deb13u1) trixie; urgency=medium
+
+  * Team upload.
+  * Apply the upstream fix for CVE-2025-66034. Closes: #1121605
+
+ -- Bastian Germann <[email protected]>  Mon, 02 Feb 2026 18:00:20 +0100
+
 fonttools (4.57.0-1) unstable; urgency=medium
 
   * Team upload.
diff -Nru fonttools-4.57.0/debian/patches/0005-CVE-2025-66034.patch 
fonttools-4.57.0/debian/patches/0005-CVE-2025-66034.patch
--- fonttools-4.57.0/debian/patches/0005-CVE-2025-66034.patch   1970-01-01 
01:00:00.000000000 +0100
+++ fonttools-4.57.0/debian/patches/0005-CVE-2025-66034.patch   2026-02-02 
17:43:47.000000000 +0100
@@ -0,0 +1,64 @@
+Origin: upstream, a696d5ba93270d5954f98e7cab5ddca8a02c1e32
+From: Cosimo Lupo <[email protected]>
+Date: Fri, 21 Nov 2025 17:07:53 +0000
+Subject: varLib: only use the basename(vf.filename)
+
+Fontmake already does that since the beginning:
+https://github.com/googlefonts/fontmake/blob/35e9e5dbdf2130a04c54688bb1bdbcfdb4b5fc67/Lib/fontmake/font_project.py#L438
+
+it's safer to disallow path traversal as it may lead to abritrary file write 
vulnerability, see 
https://github.com/fonttools/fonttools/security/advisories/GHSA-768j-98cg-p3fv
+---
+ Doc/source/designspaceLib/xml.rst        | 5 +++++
+ Lib/fontTools/designspaceLib/__init__.py | 5 +++++
+ Lib/fontTools/varLib/__init__.py         | 6 +++++-
+ 3 files changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/Doc/source/designspaceLib/xml.rst 
b/Doc/source/designspaceLib/xml.rst
+index f5645b8ca4..6896f49e25 100644
+--- a/Doc/source/designspaceLib/xml.rst
++++ b/Doc/source/designspaceLib/xml.rst
+@@ -752,6 +752,11 @@ The ``<variable-fonts>`` element contains one or more 
``<variable-font>`` elemen
+   `.ttf`) and the build tools can replace that extension with another (e.g.
+   `.otf` or `.woff2`) as needed.
+ 
++  .. note::
++     This is intended to be a simple filename (basename or stem) only, not
++     an absolute or relative path. Build tools will only use the basename
++     component and ignore any directory separators for security reasons.
++
+ .. rubric:: Example
+ 
+ .. code:: xml
+diff --git a/Lib/fontTools/designspaceLib/__init__.py 
b/Lib/fontTools/designspaceLib/__init__.py
+index 661f3405da..0996e7b69e 100644
+--- a/Lib/fontTools/designspaceLib/__init__.py
++++ b/Lib/fontTools/designspaceLib/__init__.py
+@@ -1323,6 +1323,11 @@ def __init__(self, *, name, filename=None, 
axisSubsets=None, lib=None):
+         in the document**. The file may or may not exist.
+ 
+         If not specified, the :attr:`name` will be used as a basename for the 
file.
++
++        .. note::
++            This is intended to be a simple filename (basename or stem) only.
++            Build tools will only use the basename component and ignore any
++            directory separators for security reasons.
+         """
+         self.axisSubsets: List[
+             Union[RangeAxisSubsetDescriptor, ValueAxisSubsetDescriptor]
+diff --git a/Lib/fontTools/varLib/__init__.py 
b/Lib/fontTools/varLib/__init__.py
+index fd0875567c..c19bd15158 100644
+--- a/Lib/fontTools/varLib/__init__.py
++++ b/Lib/fontTools/varLib/__init__.py
+@@ -1562,7 +1562,11 @@ def main(args=None):
+         vf_name_to_output_path[vfs_to_build[0].name] = options.outfile
+     else:
+         for vf in vfs_to_build:
+-            filename = vf.filename if vf.filename is not None else vf.name + 
".{ext}"
++            if vf.filename is not None:
++                # Only use basename to prevent path traversal attacks
++                filename = os.path.basename(vf.filename)
++            else:
++                filename = vf.name + ".{ext}"
+             vf_name_to_output_path[vf.name] = os.path.join(output_dir, 
filename)
+ 
+     finder = MasterFinder(options.master_finder)
diff -Nru fonttools-4.57.0/debian/patches/series 
fonttools-4.57.0/debian/patches/series
--- fonttools-4.57.0/debian/patches/series      2025-04-05 21:50:48.000000000 
+0200
+++ fonttools-4.57.0/debian/patches/series      2026-02-02 17:45:05.000000000 
+0100
@@ -2,3 +2,4 @@
 0002-keep-doctest-compatible-with-Unicode-15.1.patch
 Skip-test-on-i386-that-fails-because-of-excess-precision.patch
 0004-Disable-new-tests-related-to-unicode-16.0.patch
+0005-CVE-2025-66034.patch

Reply via email to