VYPR
High severityNVD Advisory· Published Nov 10, 2025· Updated Jan 8, 2026

pdfminer.six vulnerable to Arbitrary Code Execution via Crafted PDF Input

CVE-2025-64512

Description

Pdfminer.six is a community maintained fork of the original PDFMiner, a tool for extracting information from PDF documents. Prior to version 20251107, pdfminer.six will execute arbitrary code from a malicious pickle file if provided with a malicious PDF file. The CMapDB._load_data() function in pdfminer.six uses pickle.loads() to deserialize pickle files. These pickle files are supposed to be part of the pdfminer.six distribution stored in the cmap/ directory, but a malicious PDF can specify an alternative directory and filename as long as the filename ends in .pickle.gz. A malicious, zipped pickle file can then contain code which will automatically execute when the PDF is processed. Version 20251107 fixes the issue.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
pdfminer.sixPyPI
< 2025110720251107

Affected products

1

Patches

1
b808ee05dd7f

Fix: arbitary code execution when loading pickle font files

https://github.com/pdfminer/pdfminer.sixScott TolleyNov 7, 2025via ghsa
1 file changed · +8 2
  • pdfminer/cmapdb.py+8 2 modified
    @@ -240,8 +240,14 @@ def _load_data(cls, name: str) -> Any:
             )
             for directory in cmap_paths:
                 path = os.path.join(directory, filename)
    -            if os.path.exists(path):
    -                gzfile = gzip.open(path)
    +            # Resolve paths to prevent directory traversal
    +            resolved_path = os.path.realpath(path)
    +            resolved_directory = os.path.realpath(directory)
    +            # Check if resolved path is within the intended directory
    +            if not resolved_path.startswith(resolved_directory + os.sep):
    +                continue
    +            if os.path.exists(resolved_path):
    +                gzfile = gzip.open(resolved_path)
                     try:
                         return type(str(name), (), pickle.loads(gzfile.read()))
                     finally:
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

7

News mentions

0

No linked articles in our index yet.