<?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-23T00:10:39.744872+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-96643</id>
    <title>fkie_cve-2026-96643</title>
    <updated>2026-10-23T00:10:39.749722+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>Pillow is a Python imaging library. From 11.0.0 until 13.0.0, Exif.load() in src/PIL/Image.py repeatedly slices the remaining EXIF data while it begins with the six-byte Exif header. src/PIL/PngImagePlugin.py accepts an uncapped PNG eXIf chunk, so a file filled with repeated headers causes a new shrinking copy on every iteration and quadratic CPU work. The condition is reachable through Image.getexif(), Image._getexif(), and ImageOps.exif_transpose(), including common photo-upload rotation workflows. This issue is fixed in version 13.0.0.</p>
      </div>
    </content>
    <link href="https://db.gcve.eu/vuln/fkie_cve-2026-96643"/>
  </entry>
  <entry>
    <id>https://db.gcve.eu/vuln/ghsa-g4qv-2jxx-769h</id>
    <title>GHSA-g4qv-2jxx-769h — Pillow: PNG eXIf chunk makes EXIF parsing run in quadratic time</title>
    <updated>2026-10-23T00:10:39.749795+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: Pillow</p>
<p>### Summary
  A PNG file with a large eXIf chunk full of repeated 6-byte markers makes Pillow's EXIF parser take seconds of CPU instead of milliseconds. The cost grows with the square of the chunk size, so a normal small-photo-sized file is enough to cause real delay.</p>
<p>### Details
  `Exif.load()` in `src/PIL/Image.py` strips a marker from the start of the EXIF data like this:</p>
<p>```python
  while data and data.startswith(b"Exif\x00\x00"):
      data = data[6:]
  ```</p>
<p>Each pass makes a new copy of the remaining data. A real camera writes this marker once, so this is not normally a problem.</p>
<p>`chunk_eXIf()` in `src/PIL/PngImagePlugin.py` puts the raw PNG eXIf chunk straight into `info["exif"]` with no size limit and no check of its content. PNG text chunks (tEXt, zTXt, iTXt) are capped with `MAX_TEXT_CHUNK` and `MAX_TEXT_MEMORY`. The eXIf chunk has no such cap.</p>
<p>If the eXIf chunk is filled with repeated `Exif\x00\x00` markers instead of real EXIF data, the strip loop runs once per marker, copying a large buffer each time. This is a classic quadratic time bug.</p>
<p>### Steps to reproduce
  This builds a small PNG in memory and times `Image.open().getexif()` on it. No external file needed.</p>
<p>```python
  import time
  from io import BytesIO
  from PIL import Image, PngImagePlugin</p>
<p>def chunk(cid, *data):
      fp = BytesIO()
      PngImagePlugin.putchunk(fp, cid, *data)
      return fp.getvalue()</p>
<p>MAGIC = PngImagePlugin._MAGIC
  IHDR = chunk(b"IHDR", PngImagePlugin.o32(1…</p></div>
    </content>
    <link href="https://db.gcve.eu/vuln/ghsa-g4qv-2jxx-769h"/>
  </entry>
</feed>
