Skip to content

← Actionable
Medium, CVSS 6.5amended

Pillow: Reachable undefined behavior in native integer operations, potentially leading to denial of service or logic integrity compromise

CVE-2026-96641GHSA-4rm8-3hmm-39fg

What to do

Vendor fix available. Upgrade each affected package to the fixed version on its release line (pillow 13.0.0; pillow 13.0.0), redeploy, then verify what is actually installed.

This page has no inventory attached, so it cannot say whether you are affected. A vendor fix is not proof that your deployment is fixed.

Affected packages

  • Bitnami pillow

    Affected
    < 13.0.0
    Fixed in
    13.0.0
  • PyPI pillow

    Affected
    < 13.0.0
    Fixed in
    13.0.0

Sources

Severity and exploitation
Exploitation
No confirmed exploitation recorded. Patch Next marks exploitation only from CISA KEV.
CVSS
6.5 · CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H
EPSS
  • CVE-2026-96641: 0.34% estimated exploitation activity in the next 30 days; percentile 28.05 (FIRST EPSS, 2026-11-03). This is a model estimate, not proof of exploitation or customer exposure.
Source description

As published by the source; long descriptions are shortened.

Summary Affected Object and Source Package: Pillow 12.3.0 Source: PyPI sdist pillow-12.3.0.tar.gz SHA-256: 3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce Sink: src/_imaging.c:2809:15, xsize += dx

Details The code in Pillow 12.3.0 is: ```c for (xsize = 0; *text; text++) { int dx = self->glyphs[*text].dx; if (dx > 0 && xsize > INT_MAX - dx) { PyErr_SetString(PyExc_OverflowError, "Width too large"); return -1; } xsize += dx; } ``` The PILfont glyph advance is parsed from a signed 16-bit field, so the valid range for `dx` is `[-32768, 32767]`. The existing check only proves: `dx > 0 => xsize xsize >= INT_MIN - dx` Taking `dx = -32768` and repeating it 65,537 times, the mathematical sum is `-2,147,516,416`, which is less than `INT_MIN = -2,147,483,648`. On the 65,537th addition, the operation `-2147483648 + -32768` is performed, resulting in C signed overflow undefined behavior.

PoC ```python """Minimal public-API reproducer for the Pillow 12.3.0…

Dates and revisions
Published by the source
Last modified by the source
Source last checked
  1. Revision 8 · amended ·

    Amended from osv record BIT-pillow-2026-96641

  2. Revision 7 · amended ·

    Amended from osv record PYSEC-2026-4340

  3. Revision 6 · amended ·

    Amended from osv record GHSA-4rm8-3hmm-39fg

  4. Revision 5 · amended ·

    Amended from osv record PYSEC-2026-4340

  5. Revision 4 · amended ·

    Amended from osv record GHSA-4rm8-3hmm-39fg

  6. Revision 3 · amended ·

    Amended from ghsa record GHSA-4rm8-3hmm-39fg

  7. Revision 2 · amended ·

    Amended from osv record GHSA-4rm8-3hmm-39fg

  8. Revision 1 · created ·

    Published from ghsa record GHSA-4rm8-3hmm-39fg

Agent brief

Preview the exact text before you copy it. Commands are read-only suggestions; review them before running anything.

# Patch Next advisory brief: CVE-2026-96641

Advisory: Pillow: Reachable undefined behavior in native integer operations, potentially leading to denial of service or logic integrity compromise
IDs: CVE-2026-96641, GHSA-4rm8-3hmm-39fg
Record: https://patchnext.com/advisories/cve-2026-96641 (revision 8, source checked 30 Oct 2026, 07:20 UTC)
Inventory: none attached. This brief comes from a public page and does not say whether any deployment is affected.
Severity: Medium (CVSS 6.5)
Exploitation: no confirmed exploitation recorded. Patch Next confirms exploitation only from CISA KEV.
Vendor response: Vendor fix available; fixed versions by package: pillow 13.0.0; pillow 13.0.0. A vendor fix does not mean a deployment is fixed.

## Affected components
- Bitnami pillow: affected < 13.0.0; fixed in 13.0.0
- PyPI pillow: affected < 13.0.0; fixed in 13.0.0

## Suggested inspection (read-only)
- Bitnami pillow: check the installed version with your package manager.
- `python -m pip show pillow`: prints the installed version. Run with the environment that serves production active.

## Supported action
Upgrade each affected component to a fixed version on its release line. For a transitive dependency, upgrade the parent package or add an override or constraint, then regenerate the lockfile. Redeploy every environment that ran an affected version.

## Required regression checks
- Run the test suite and a production build.
- Exercise the features that depend on pillow.
- Repeat the inspection and confirm that only fixed versions remain installed.

## Rollback considerations
- Keep the previous lockfile and deployment artifact. Rolling back reinstates the vulnerable version, so apply any documented mitigation while you fix forward.

## Unresolved questions
- Which deployments run an affected version?
- Exploitation status can change. Check again before lowering the priority.
- Mark the work resolved only after the fixed version is verified in production.

## Sources
- Verified: https://github.com/advisories/GHSA-4rm8-3hmm-39fg (GitHub-reviewed advisory GHSA-4rm8-3hmm-39fg lists affected ranges: PyPI pillow >=0 <13.0.0)
- Verified: https://osv.dev/vulnerability/GHSA-4rm8-3hmm-39fg (OSV record GHSA-4rm8-3hmm-39fg lists affected ranges: PyPI pillow >=0 <13.0.0 (fixed))
- Verified: https://osv.dev/vulnerability/PYSEC-2026-4340 (OSV record PYSEC-2026-4340 lists affected ranges: PyPI pillow >=0 <13.0.0 (fixed))
- Verified: https://osv.dev/vulnerability/BIT-pillow-2026-96641 (OSV record BIT-pillow-2026-96641 lists affected ranges: Bitnami pillow >=0 <13.0.0 (fixed))

Commands are suggestions: review each one before running it.

Loading voting…