<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Fri, 02 Oct 2026 05:41:42 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-49836</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-49836</link>
      <description>&lt;p&gt;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.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;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.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-49836</guid>
    </item>
    <item>
      <title>GHSA-2rmg-vrx8-9j2f — psd-tools vulnerable to arbitrary file write via smart-object filename</title>
      <link>https://db.gcve.eu/vuln/ghsa-2rmg-vrx8-9j2f</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: psd-tools&lt;/p&gt;
&lt;p&gt;# psd-tools: arbitrary file write/read via smart-object path traversal&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;In `psd-tools` (all releases exposing the `SmartObject` API through **v1.17.0**), `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.&lt;/p&gt;
&lt;p&gt;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**.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;### Write path — `SmartObject.save()` (primary)&lt;/p&gt;
&lt;p&gt;`src/psd_tools/api/smart_object.py:170-179` (tag `v1.17.0`):&lt;/p&gt;
&lt;p&gt;```python
def save(self, filename: str | None = None) -&amp;gt; None:
    if filename is None:
        filename = self.filename          # untrusted, straight from the file
    with open(filename, &amp;#34;wb&amp;#34;) as f:
        f.write(self.data)                # attacker-controlled bytes
```&lt;/p&gt;
&lt;p&gt;`self.filename` comes from the file with no validation — the `filename` property (`:62-67`) returns `self._data.filename`, set by the linked-layer parser at `src/psd_tools/psd/linked_layer.py:100` (`read_unicode_string(fp)`). There is no `basename`, no absolute path rejection, and…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: psd-tools&lt;/p&gt;
&lt;p&gt;# psd-tools: arbitrary file write/read via smart-object path traversal&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;In `psd-tools` (all releases exposing the `SmartObject` API through **v1.17.0**), `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.&lt;/p&gt;
&lt;p&gt;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**.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;### Write path — `SmartObject.save()` (primary)&lt;/p&gt;
&lt;p&gt;`src/psd_tools/api/smart_object.py:170-179` (tag `v1.17.0`):&lt;/p&gt;
&lt;p&gt;```python
def save(self, filename: str | None = None) -&amp;gt; None:
    if filename is None:
        filename = self.filename          # untrusted, straight from the file
    with open(filename, &amp;#34;wb&amp;#34;) as f:
        f.write(self.data)                # attacker-controlled bytes
```&lt;/p&gt;
&lt;p&gt;`self.filename` comes from the file with no validation — the `filename` property (`:62-67`) returns `self._data.filename`, set by the linked-layer parser at `src/psd_tools/psd/linked_layer.py:100` (`read_unicode_string(fp)`). There is no `basename`, no absolute path rejection, and…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-2rmg-vrx8-9j2f</guid>
    </item>
    <item>
      <title>PYSEC-2026-2969 — psd-tools vulnerable to arbitrary file write via smart-object filename</title>
      <link>https://db.gcve.eu/vuln/pysec-2026-2969</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: psd-tools&lt;/p&gt;
&lt;p&gt;# psd-tools: arbitrary file write/read via smart-object path traversal&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;In `psd-tools` (all releases exposing the `SmartObject` API through **v1.17.0**), `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.&lt;/p&gt;
&lt;p&gt;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**.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;### Write path — `SmartObject.save()` (primary)&lt;/p&gt;
&lt;p&gt;`src/psd_tools/api/smart_object.py:170-179` (tag `v1.17.0`):&lt;/p&gt;
&lt;p&gt;```python
def save(self, filename: str | None = None) -&amp;gt; None:
    if filename is None:
        filename = self.filename          # untrusted, straight from the file
    with open(filename, &amp;#34;wb&amp;#34;) as f:
        f.write(self.data)                # attacker-controlled bytes
```&lt;/p&gt;
&lt;p&gt;`self.filename` comes from the file with no validation — the `filename` property (`:62-67`) returns `self._data.filename`, set by the linked-layer parser at `src/psd_tools/psd/linked_layer.py:100` (`read_unicode_string(fp)`). There is no `basename`, no absolute path rejection, and…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: psd-tools&lt;/p&gt;
&lt;p&gt;# psd-tools: arbitrary file write/read via smart-object path traversal&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;In `psd-tools` (all releases exposing the `SmartObject` API through **v1.17.0**), `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.&lt;/p&gt;
&lt;p&gt;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**.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;### Write path — `SmartObject.save()` (primary)&lt;/p&gt;
&lt;p&gt;`src/psd_tools/api/smart_object.py:170-179` (tag `v1.17.0`):&lt;/p&gt;
&lt;p&gt;```python
def save(self, filename: str | None = None) -&amp;gt; None:
    if filename is None:
        filename = self.filename          # untrusted, straight from the file
    with open(filename, &amp;#34;wb&amp;#34;) as f:
        f.write(self.data)                # attacker-controlled bytes
```&lt;/p&gt;
&lt;p&gt;`self.filename` comes from the file with no validation — the `filename` property (`:62-67`) returns `self._data.filename`, set by the linked-layer parser at `src/psd_tools/psd/linked_layer.py:100` (`read_unicode_string(fp)`). There is no `basename`, no absolute path rejection, and…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/pysec-2026-2969</guid>
    </item>
    <item>
      <title>UBUNTU-CVE-2026-49836</title>
      <link>https://db.gcve.eu/vuln/ubuntu-cve-2026-49836</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Ubuntu:24.04:LTS: psd-tools, Ubuntu:26.04:LTS: psd-tools&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Ubuntu:24.04:LTS: psd-tools, Ubuntu:26.04:LTS: psd-tools&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ubuntu-cve-2026-49836</guid>
    </item>
  </channel>
</rss>
