Skip to main content

Pillow EUVDEUVD-2026-104655

| CVE-2026-112893 HIGH
Use of Uninitialized Variable (CWE-457)
2026-10-19 GitHub_M GHSA-j4m9-6w36-pw47
8.2
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Submit malformed font to text-drawing endpoint
  2. Exploit
    Trigger FT_Load_Glyph failure with active stroker
  3. Execution
    Cleanup frees invalid glyph pointer
  4. Impact
    Memory corruption or process crash (DoS)

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Variable initialization checks
Exploitation Conditions

Exploitation requires an application that calls Pillow's FreeType text rendering (ImageFont/ImageDraw) with a nonzero stroke_width AND loads an attacker-controlled font from untrusted bytes; the attacker must supply a malformed font that forces the FT_Load_Glyph failure path with an active stroker. Limiting factors: the vulnerable code path is only reached when stroking is enabled (stroke_width > 0) - applications that render text without stroking, or that only use trusted/bundled fonts, are not exposed. This corresponds to the AT:P (Attack Requirements: Present) bit in the CVSS 4.0 vector. Affected Pillow versions are 10.0.0 up to (not including) 13.0.0; no authentication or user interaction is required on the application side per PR:N/UI:N.

Impact

This is a memory-safety flaw (CWE-457, use of uninitialized/stale variable) in Pillow's FreeType text rendering path, triggered when FT_Load_Glyph fails and cleanup calls FT_Done_Glyph on an invalid FT_Glyph pointer. The provided CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N) scores 8.2 with VA:H but VC:N/VI:N - i.e. the vendor rates impact as availability-only (crash/DoS), not confidentiality or integrity, despite the description's mention that it 'can corrupt memory.' This is a notable signal to weigh: although freeing an invalid pointer is theoretically exploitable for code execution, the CVSS vector claims no integrity/confidentiality impact, so treat RCE as unconfirmed and DoS as the realistic outcome. The AT:P (Attack Requirements: Present) bit is critical - exploitation is NOT universal: the target application must actually draw text with a nonzero stroke width using attacker-controlled (untrusted) font bytes. No EPSS score, CISA KEV listing, or POC was provided in the input, so there is no evidence of active exploitation or public exploit code. Net: this is a genuine but conditional defect - high CVSS driven by network reach and no-auth, but the AT:P precondition and availability-only impact place it below the tier of a wormable, default-config RCE. Prioritize for applications that render user-supplied fonts with stroking (e.g. image/text-generation services); deprioritize where fonts are trusted or stroking is unused.

Exploit ScenarioDerived

An application (e.g. a web service generating images or captchas) uses Pillow to draw text with a nonzero stroke width and loads a font from untrusted input. An attacker uploads a malformed/corrupt font file that forces FT_Load_Glyph to fail, driving the cleanup path to call FT_Done_Glyph on an uninitialized or stale glyph pointer, crashing the worker or potentially corrupting heap memory. No public exploit code was identified in the provided data.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 19, 2026

Pillow versions 10.0.0 through 12.x can free an invalid glyph pointer during FreeType text rendering when an active stroker is used, allowing malformed font bytes supplied by an attacker to corrupt memory or crash the process. Exploitation requires the application to render text with a nonzero stroke width and load an attacker-controlled font from untrusted bytes; no authentication or user interaction is required on the application side, but the attack requirements are present because the stroking path must be enabled. There is no CISA KEV confirmation and no public exploit identified at time of analysis; the issue is fixed in Pillow 13.0.0.

RemediationAI

Vendor-released patch: upgrade to Pillow 13.0.0, which contains the fix from commit a7416de7f3a43128179d2cf68df3240ea8dafe13; see the advisory at https://github.com/python-pillow/Pillow/security/advisories/GHSA-j4m9-6w36-pw47 and the release at https://github.com/python-pillow/Pillow/releases/tag/13.0.0. If upgrading cannot be done immediately, disable text stroking by ensuring stroke_width is zero wherever untrusted fonts may be rendered, or restrict font loading to trusted, prevalidated font files; the trade-off is that disabling stroking changes text appearance and restricting fonts may break legitimate use cases that require user-supplied fonts. Applications that must accept untrusted fonts should validate or reject malformed font data before passing it to Pillow rendering with stroking enabled.

Affected VersionsENISA

Pillow 10.0.0, < 13.0.0

Affected Packages

pypi pillow fix: 13.0.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Pillow's FreeType binding in src/_imagingft.c renders glyphs through functions such as FT_Load_Glyph and, when stroking is requested, uses an FT_Stroker. In the vulnerable code, an FT_Glyph variable was not initialized before the glyph-loading logic. If FT_Load_Glyph fails for a malformed font, cleanup could call FT_Done_Glyph on an uninitialized or stale FT_Glyph pointer. This is CWE-457 (use of uninitialized variable) and can lead to memory corruption or a process crash. The upstream fix in commit a7416de7f3a43128179d2cf68df3240ea8dafe13 initializes the glyph to NULL and later guards the stroker cleanup with a glyph != NULL check, preventing cleanup from operating on an invalid pointer. The CPE cpe:2.3:a:python-pillow:pillow:*:*:*:*:*:*:*:* covers Pillow releases from 10.0.0 up to, but not including, 13.0.0.

Know when Pillow gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 8.2 HIGH
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
vuln.today AI 5.9 MEDIUM

Network-reachable untrusted font input (AV:N, PR:N, UI:N), but the nonzero-stroke-width rendering precondition raises AC:H; impact is crash/DoS only, so C:N/I:N/A:H.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Oct 19, 2026 - 23:18 EUVD
CVE Published
Oct 19, 2026 - 21:53 cve.org
HIGH 8.2

DescriptionCVE.org

Pillow is a Python imaging library. From 10.0.0 until 13.0.0, Pillow can free an invalid glyph pointer during FreeType rendering with an active stroker. If FT_Load_Glyph fails, cleanup may call FT_Done_Glyph on an uninitialized or stale glyph variable. An attacker can supply a malformed font as untrusted bytes to an application that draws text with a nonzero stroke width, forcing the glyph-load failure path. This can corrupt memory or crash the process. This issue is fixed in version 13.0.0.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 122 pypi packages depend on pillow (116 direct, 7 indirect)

Ecosystem-wide dependent count for version 10.0.0.

Technical POC Analysis

The flaw is an invalid/double free of a FreeType glyph object, rooted in an uninitialized pointer.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

Pillow versions 10.0.0 through 12.x can corrupt memory or crash applications when they render attacker-supplied fonts with a nonzero stroke width, affecting services that process untrusted images or fonts. The issue is high severity, no public exploit identified at time of analysis, and the attack path is constrained to applications that enable stroker-based text rendering and accept untrusted font bytes. Leadership should care because Pillow is a common embedded dependency, so vulnerable copies may be spread across application code, containers, and image-processing pipelines.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 80% exploitable
Prevalence
High
Pillow is among the most-installed Python imaging libraries in production
Threat Intel
1
1 source
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

Priority Score

41
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +41
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in Pillow

View all
CVE-2022-30595 CRITICAL POC
9.8 May 25

libImaging/TgaRleDecode.c in Pillow 9.1.0 has a heap buffer overflow in the processing of invalid TGA image files. Rated

CVE-2026-59204 HIGH POC
8.7 Jul 14

Denial of service in Python Pillow (versions 8.2.0 through 12.2.0) allows remote attackers to exhaust memory during JPEG

CVE-2026-54058 HIGH POC
8.3 Jul 14

Out-of-bounds memory disclosure in Python Pillow before 12.3.0 lets an attacker who supplies a crafted McIdas AREA image

CVE-2026-59197 HIGH POC
8.2 Jul 14

Heap out-of-bounds write in Python Pillow prior to 12.3.0 lets an attacker who controls the rank-filter size parameter c

CVE-2026-59200 HIGH POC
7.5 Jul 14

Uncontrolled memory consumption in Python Pillow (PIL) versions 5.1.0 through 12.2.x allows a remote attacker to cause d

CVE-2021-23437 HIGH POC
7.5 Sep 03

The package pillow 5.2.0 and before 8.3.2 are vulnerable to Regular Expression Denial of Service (ReDoS) via the getrgb

CVE-2025-48379 HIGH POC
7.1 Jul 01

Pillow is a Python imaging library. In versions 11.2.0 to before 11.3.0, there is a heap buffer overflow when writing a

CVE-2016-4009 CRITICAL
9.8 Apr 13

Integer overflow in the ImagingResampleHorizontal function in libImaging/Resample.c in Pillow before 3.1.1 allows remote

CVE-2014-3007 CRITICAL
10.0 Apr 27

Python Image Library (PIL) 1.1.7 and earlier and Pillow 2.3 might allow remote attackers to execute arbitrary commands v

CVE-2026-96639 CRITICAL
9.8 Oct 21

Pillow versions 11.0.0 through 12.x (fixed in 13.0.0) can reuse a stale native ImagingCore buffer when a multi-frame ima

CVE-2021-34552 CRITICAL
9.8 Jul 13

Pillow through 8.2.0 and PIL (aka Python Imaging Library) through 1.1.7 allow an attacker to pass controlled parameters

CVE-2021-25289 CRITICAL
9.8 Mar 19

An issue was discovered in Pillow before 8.1.1. Rated critical severity (CVSS 9.8), this vulnerability is remotely explo

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy