<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://db.gcve.eu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-22T18:26:06.877449+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@gcve.eu</email>
  </author>
  <link href="https://db.gcve.eu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://db.gcve.eu/vuln/fkie_cve-2026-96642</id>
    <title>fkie_cve-2026-96642</title>
    <updated>2026-10-22T18:26:06.879149+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>Pillow is a Python imaging library. Prior to 13.0.0, the TarIO initializer in src/PIL/TarIO.py accepts a negative octal member size and computes a backward seek that returns to the same 512-byte header. When the requested member name does not match, the parser repeatedly reads that header, consumes a full CPU core, and never returns. TarIO is reached only when an application directly uses PIL.TarIO.TarIO rather than the default Image.open() path. This issue is fixed in version 13.0.0.</p>
      </div>
    </content>
    <link href="https://db.gcve.eu/vuln/fkie_cve-2026-96642"/>
  </entry>
  <entry>
    <id>https://db.gcve.eu/vuln/ghsa-3j72-p6qg-6xp7</id>
    <title>GHSA-3j72-p6qg-6xp7 — Pillow: TarIO negative size field causes infinite CPU-spin loop</title>
    <updated>2026-10-22T18:26:06.879232+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: Pillow</p>
<p>### Summary
`TarIO.__init__` does not check that a tar header's size field is positive. A crafted header with a negative size makes it seek backward onto itself. This causes an infinite loop that uses 100% CPU and never returns.</p>
<p>### Details
`TarIO.__init__` reads 512-byte tar headers one at a time, looking for a member with a given name. For each header it reads the size field and skips ahead to the next header:</p>
<p>```python
size = int(s[124:135], 8)
...
self.fh.seek((size + 511) &amp; (~511), io.SEEK_CUR)
```
There is no check that size is zero or more. A tar header can set this field to a negative octal value. For size = -512, the seek offset comes out to exactly -512, which cancels the 512 bytes the loop had just read. The file position goes right back to where this loop step started.</p>
<p>The loop only stops on end of file or when a header name starts with a null byte. Neither happens, since the same header keeps showing up again. The loop never ends on its own.</p>
<p>### Steps to reproduce</p>
<p>This uses Tests/images/hopper.tar, a normal file already in the Pillow test suite. It only changes the size field of the first header.</p>
<p>```python
from PIL import TarIO</p>
<p>with open("Tests/images/hopper.tar", "rb") as f:
    data = bytearray(f.read())</p>
<p># Set the size field (bytes 124 to 135) to a negative octal value.
# Octal 1000 is 512, so this is size = -512.
data[124:135] = b"  -00001000"</p>
<p>with open("poisoned.tar", "wb") as f:
    f.write(data)</p>
<p># "does-not-exist" does not match the header name,…</p></div>
    </content>
    <link href="https://db.gcve.eu/vuln/ghsa-3j72-p6qg-6xp7"/>
  </entry>
</feed>
