Vulnerabilities

Security fix · CVE-2026-112390

Pillow is a Python imaging library.

Published Oct 19, 2026 · catalog updated Oct 26, 2026 · Pillow is a Python

Last checked Oct 31, 2026. A connected source was read within the last 7 days.

Check if you run it

No confirmed exploitation is on record for CVE-2026-112390. EPSS is 0.59%. Act only if a listed version of Pillow is a Python is installed.

Gaps on this record

  • The stored product name is a package slug. The name on this page is taken from the title (Pillow is a Python).
  • No vendor fix or required action is stored. Compare the linked advisory before you change production.
Severity
High8.2
Known exploitation
Not in CISA/VulnCheck KEV
EPSS
0.59%
Remediation
Version ranges on file
Affected products
PyPI pillow · pip Pillow · pypi pillow

A crafted 5.6 KB image file makes Pillow loop forever at 100% CPU when an application asks how many frames the image has. This only affects installations that have the optional package. Any application that opens an untrusted image and then reads can have one worker tied up indefinitely. That includes the common "is this image animated?" check and re-saving with to TIFF, PDF or WebP. The call never returns, raises no exception, and does not grow memory, so only an external watchdog stops it. The file is a Microsoft Image Composer (MIC) container, which Pillow recognises by its magic bytes with no extension needed. Inside it is a TIFF stream with three chained image directories. subclasses and overrides and so that a "frame" means one stream in the container. It still inherits ( ), which walks the embedded TIFF's directory chain with until is set. Two things stop that walk from making progress: - ( ) returns the constant stream index. - calls , which resets to . As a result, the loop re-parses the second directory forever whenever the embedded stream has three or more directories. , , , , and iteration do not hang on this file. The regression was introduced in 0b33a87b0d15 (April 2020, first released in 7.2.0), which removed 's own property. The attached reproducer builds the file in code and checks two controls, which return 3 and 1 frames as expected; the malicious file is still running when it is killed after 20 seconds. ## Details (registered for whenever is installed) subclasses and redefines a "frame" as one OLE stream, overriding and accordingly. It does not override the property, so the inherited TIFF implementation runs, and that implementation relies on advancing as IFDs are loaded. returns the OLE stream index, which never changes inside , so the loop re-parses the same IFD forever. A 5632-byte OLE2 compound file whose stream is a 351-byte TIFF with three chained 1×1 IFDs is enough. on it succeeds (format , detected by the OLE magic, no extension needed);

Are you affected?

Enter the version you run. The result uses only the ranges stored on this record.

The check returns affected, not affected, or incomplete. It does not guess a version that is missing from the record.

  • PyPI pillow7.2.0 → 13.0.0
  • pip Pillow>= 7.2.0, < 13.0.0
  • pypi pillowversion unspecified

How to fix CVE-2026-112390

What to do

Three questions, each answered from this record only. Confirm the vendor advisory before you patch.

Should you patch?

No confirmed exploitation is on record for CVE-2026-112390. EPSS is 0.59%. Act only if a listed version of Pillow is a Python is installed.

Which versions are affected?

Compare what you have installed with Pillow >= 7.2.0, < 13.0.0. Compare the installed version with the linked vendor advisory before you change production.

What should an analyst verify?

CWE-835: Infinite Loop. EPSS 0.59%. There is no CISA KEV listing. No Exploit-DB or Metasploit reference is linked. Use the source links for the original advisory.

Technology hubs

Code

The project this record applies to. Exploit listings stay in References.

Timeline

Detection, updates, and resolution for this record.

  1. Oct 19, 2026 · NIST NVD

    Detected

    Pillow is a Python imaging library. From 7.2.0 until 13.0.0, Pillow can enter an infinite loop while determining the frame count of a MIC image. MicImageFile inherits TIFF frame traversal, but MicImageFile.tell reports the OLE stream index and its seek() resets TIFF frame state, so an embedded TIFF with at least three IFDs never advances. When an application with olefile installed reads n_frames o

  2. Oct 20, 2026 · NIST NVD

    Updated

    Pillow is a Python imaging library. From 7.2.0 until 13.0.0, Pillow can enter an infinite loop while determining the frame count of a MIC image. MicImageFile inherits TIFF frame traversal, but MicImageFile.tell reports the OLE stream index and its seek() resets TIFF frame state, so an embedded TIFF with at least three IFDs never advances. When an application with olefile installed reads n_frames o

  3. Oct 20, 2026 · NIST NVD

    Updated

    Pillow is a Python imaging library. From 7.2.0 until 13.0.0, Pillow can enter an infinite loop while determining the frame count of a MIC image. MicImageFile inherits TIFF frame traversal, but MicImageFile.tell reports the OLE stream index and its seek() resets TIFF frame state, so an embedded TIFF with at least three IFDs never advances. When an application with olefile installed reads n_frames o

  4. Oct 21, 2026 · GitHub Advisory Database

    Updated

    A crafted 5.6 KB image file makes Pillow loop forever at 100% CPU when an application asks how many frames the image has. This only affects installations that have the optional package. Any application that opens an untrusted image and then reads can have one worker tied up indefinitely. That includes the common "is this image animated?" check and re-saving with to TIFF, PDF or WebP. The call neve

  5. Oct 26, 2026 · PyPA Advisory Database

    Fix available

    pillow fixed in 13.0.0

  6. Oct 26, 2026 · PyPA Advisory Database

    Fix available

    pillow fixed in 13.0.0

  7. Oct 26, 2026 · PyPA Advisory Database

    Updated

    A crafted 5.6 KB image file makes Pillow loop forever at 100% CPU when an application asks how many frames the image has. This only affects installations that have the optional package. Any application that opens an untrusted image and then reads can have one worker tied up indefinitely. That includes the common "is this image animated?" check and re-saving with to TIFF, PDF or WebP. The call neve

Sources

  • CVE.orgVulnerability recordCVE-2026-112390

    Official CVE identifier

    cve.org
  • FIRST EPSSExploitation probabilityCVE-2026-112390

    30-day exploitation probability 0.59%

    first.org
  • GitHub Advisory DatabasePackage advisoryGHSA-22hg-r758-rrw9

    Pillow: Infinite loop in MIC n_frames when the embedded TIFF

    github.com
  • GitLab Advisory DatabasePackage advisoryCVE-2026-112390

    ============================================================================ Infinite loop in MIC n_frames when the embedded TIFF has 3+ IFDs Location: src/PIL/MicImagePlugin.py:86 in MicImageFile.tell() Commit: a707c6b21c313880d0771e54965d142dd42358b6 ============================================================================ A crafted 5.6 KB image file makes Pillow loop forever at 100% CPU when

    advisories.gitlab.com
  • NIST NVDVulnerability recordCVE-2026-112390

    Pillow is a Python imaging library. From 7.2.0 until 13.0.0, Pillow can enter an infinite loop while determining the frame count of a MIC image. MicImageFile inherits TIFF frame traversal, but MicImageFile.tell reports the OLE stream index and its seek() resets TIFF frame state,

    nvd.nist.gov
  • PyPA Advisory DatabasePackage advisoryGHSA-22hg-r758-rrw9

    Pillow: Infinite loop in MIC n_frames when the embedded TIFF

    osv.dev

References

Freshness

Last verified in this catalog Oct 31, 2026. Significant claims (KEV, EPSS, CVSS, affected ranges) come from the source rows above — open the original publisher for the authoritative advisory.

  • FIRST EPSSOct 31, 2026
  • PyPA Advisory DatabaseOct 26, 2026
  • GitLab Advisory DatabaseOct 23, 2026
  • GitHub Advisory DatabaseOct 22, 2026
  • CVE.orgOct 21, 2026
  • NIST NVDOct 21, 2026