Description
psd-tools is a Python package for working with Adobe Photoshop PSD files. Prior to version 1.17.1, `SmartObject.save()` writes an embedded smart object to a path taken verbatim from the PSD file. Because that name is attacker-controlled and unsanitised, a tool that extracts embedded objects from an untrusted `.psd` can be made to write attacker-chosen bytes to an attacker-chosen path (absolute or `../`-traversing), outside its intended output directory. A secondary issue in `SmartObject.open()` for external-kind smart objects allows the attacker-controlled `fullPath` descriptor to be used as an arbitrary file read path, enabling exfiltration of the read content to the controlled write destination. Both issues are fixed in v1.17.1.
Published: 2026-09-10
Score: 4.6 Medium
EPSS: n/a
KEV: No
Impact: Arbitrary File Write
Action: Patch
AI Analysis

Impact

psd-tools is a Python library for handling Adobe Photoshop PSD files. In versions prior to 1.17.1 the SmartObject.save() routine writes an embedded smart object to a file path taken verbatim from the PSD file. Because that filename is attacker-controlled and unsanitised, an untrusted PSD can cause an arbitrary write to any location the attacker specifies, including absolute paths or paths containing traversal sequences such as '../'. A second flaw in SmartObject.open() for external‑kind smart objects allows the attacker-controlled fullPath descriptor to be treated as an arbitrary file read, enabling the content of any file accessible to the process to be exfiltrated to the controlled write destination. Both problems together allow an attacker to create or overwrite files at arbitrary locations on the host system, potentially leading to privilege escalation or persistence when the process runs with elevated privileges.

Affected Systems

The vulnerability affects the psd-tools library in all releases before v1.17.1. Any system that imports and uses psd-tools to process untrusted PSD files is at risk. Upgrading to release v1.17.1 or later mitigates the flaw.

Risk and Exploitability

The CVSS score of 4.6 indicates a moderate severity. The EPSS score is not available, and the vulnerability is not listed in the CISA KEV catalog, suggesting no widespread exploitation to date. However, the flaw can be exploited locally by any process that loads an attacker‑crafted PSD file — a common scenario in code that processes user‑generated content. The lack of a remote attack surface limits the immediate risk, but the ability to write arbitrary files can lead to privilege escalation or persistence if the process runs with elevated privileges.

Generated by OpenCVE AI on September 11, 2026 at 04:45 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade psd-tools to version v1.17.1 or newer to eliminate the unsanitised filename handling.
  • Implement an input validation layer that strictly rejects filenames containing path separators or directory traversal sequences; this directly mitigates the Path Traversal risk identified by CWE‑22.
  • Enforce an allow‑list of safe directory prefixes for any file read or write operations performed by SmartObject.open() and SmartObject.save(), limiting access to only intended directories to address the Absolute Path Traversal weakness described by CWE‑73.
  • Run code that parses or extracts embedded smart objects in a sandboxed environment with explicit write restrictions, preventing the exploitation of both CWE‑22 and CWE‑73 misuses.

Generated by OpenCVE AI on September 11, 2026 at 04:45 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-2rmg-vrx8-9j2f psd-tools vulnerable to arbitrary file write via smart-object filename
History

Fri, 11 Sep 2026 07:00:00 +0000

Type Values Removed Values Added
First Time appeared Psd-tools
Psd-tools psd-tools
Vendors & Products Psd-tools
Psd-tools psd-tools

Thu, 10 Sep 2026 22:00:00 +0000

Type Values Removed Values Added
Description psd-tools is a Python package for working with Adobe Photoshop PSD files. Prior to version 1.17.1, `SmartObject.save()` writes an embedded smart object to a path taken verbatim from the PSD file. Because that name is attacker-controlled and unsanitised, a tool that extracts embedded objects from an untrusted `.psd` can be made to write attacker-chosen bytes to an attacker-chosen path (absolute or `../`-traversing), outside its intended output directory. A secondary issue in `SmartObject.open()` for external-kind smart objects allows the attacker-controlled `fullPath` descriptor to be used as an arbitrary file read path, enabling exfiltration of the read content to the controlled write destination. Both issues are fixed in v1.17.1.
Title psd-tools: arbitrary file write via smart-object filename
Weaknesses CWE-22
CWE-73
References
Metrics cvssV4_0

{'score': 4.6, 'vector': 'CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N'}


Subscriptions

Psd-tools Psd-tools
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-09-10T21:47:57.822Z

Reserved: 2026-06-01T18:50:36.056Z

Link: CVE-2026-49836

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-10T22:16:57.300

Modified: 2026-09-10T22:16:57.300

Link: CVE-2026-49836

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-11T06:45:06Z

Weaknesses
  • CWE-22

    Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')

  • CWE-73

    External Control of File Name or Path