CODERED VTA

Critical Pillow Imaging Flaws Patched Across Red Hat Enterprise Linux 8 Systems

High
Analytics dashboard on screen
Photo by Luke Chesser on Unsplash

Red Hat has issued errata RHSA-2026:93077, a security update for the python-pillow package on Red Hat Enterprise Linux 8, which the vendor has rated as having a Critical security impact. The update addresses three separate flaws in Pillow, the widely deployed Python imaging library used for reading, converting and writing image files in web applications, document pipelines, reporting tools and data-processing jobs. The issues are tracked as CVE-2026-112393, a heap buffer overflow in _tiffWriteProc that occurs when saving a TIFF image to a BytesIO object; CVE-2026-112398, a heap buffer overflow in FlashPix (FPX) JPEG decoding that Red Hat states leads to code execution; and CVE-2026-112900, an argument injection weakness in Pillow's call out to Ghostscript that can potentially lead to remote code execution. The advisory was published and last updated on 30 October 2026. Affected builds span Red Hat Enterprise Linux 8 for x86_64, IBM z Systems (s390x), Power little endian (ppc64le) and ARM 64 (aarch64), the matching CodeReady Linux Builder repositories, and the 8.10 Extended Life Cycle channels for all four architectures.

Red Hat has not published step-by-step exploitation details beyond the vulnerability descriptions themselves, so the mechanics below are limited to what the errata and its linked Bugzilla entries state. Two of the three issues are memory-safety defects in Pillow's native image handling code. CVE-2026-112393 sits in the TIFF write path, where the _tiffWriteProc routine mishandles buffer boundaries when output is directed to an in-memory BytesIO stream rather than a file on disk — a very common pattern in web services that generate or convert images without touching the filesystem. CVE-2026-112398 sits on the decode side, in Pillow's handling of JPEG data embedded within FlashPix (FPX) files, and Red Hat explicitly describes the outcome as code execution rather than a simple crash. The third issue, CVE-2026-112900, is different in character: it is an argument injection flaw in the way Pillow builds the command line it hands to Ghostscript, meaning attacker-influenced input can introduce unintended arguments into that external call and potentially achieve remote code execution. In each case the natural exposure is an application that accepts, converts or renders image content supplied by someone other than the operator.

The strategic concern is reach rather than novelty. Pillow is a near-default dependency for any Python stack that touches images, so a single vulnerable system package on RHEL 8 can sit underneath avatar uploads, thumbnail generators, OCR and document-conversion workers, PDF and EPS preview services, and batch analytics jobs — much of which processes files originating outside the trust boundary. Memory corruption of the kind described in CVE-2026-112393 and CVE-2026-112398 threatens the integrity and availability of the processing host and, where it reaches code execution, the confidentiality of anything that worker can read, including database credentials and queued customer documents. The Ghostscript argument injection is particularly relevant to environments that render PostScript or EPS content, because it leverages a second, separately privileged binary. Exposure is broadened by the inclusion of the Extended Life Cycle 8.10 channels, which signals that long-lived production estates and container base images built on RHEL 8 are in scope. On current exploitation status, the evidence is modest: FIRST EPSS places the probability of exploitation in the next 30 days at 1.0% for CVE-2026-112393, 0.7% for CVE-2026-112398 and 1.3% for CVE-2026-112900, and there is no indication in the advisory of exploitation in the wild. Fixed packages at version 5.1.1-36.el8_10 are available from Red Hat for every affected architecture, and the vendor's Insights patch analysis can enumerate which systems in an estate the errata applies to.

Attack Surface

Server OS, Web Application, Supply Chain (Third-party vendors)

Tactics

Execution, Initial Access, Impact

Techniques

  • T1190 – Exploit Public-Facing Application
  • T1203 – Exploitation for Client Execution
  • T1059.006 – Command and Scripting Interpreter: Python
  • T1499.004 – Endpoint Denial of Service: Application or System Exploitation

SuperPRO's Threat Countermeasures Procedures

  1. Apply RHSA-2026:93077 and bring python3-pillow, python3-pillow-tk, python3-pillow-devel and python3-pillow-doc to version 5.1.1-36.el8_10 on all Red Hat Enterprise Linux 8 hosts using 'dnf update python3-pillow', including the 8.10 Extended Life Cycle and CodeReady Linux Builder channels for x86_64, s390x, ppc64le and aarch64.
  2. Use Red Hat Insights patch analysis against errata RHSA-2026:93077 to enumerate affected systems, and cross-check manually with 'rpm -q python3-pillow' — any build earlier than 5.1.1-36.el8_10 remains vulnerable to CVE-2026-112393, CVE-2026-112398 and CVE-2026-112900.
  3. Validate downloaded packages against the published digests before deployment, for example python3-pillow-5.1.1-36.el8_10.x86_64.rpm SHA-256 650c9cf44c1f20022f412548719bd8888534bc7006a95359fa9308e2d6cb57bd and the shared SRPM python-pillow-5.1.1-36.el8_10.src.rpm SHA-256 64b3764632ffd258628289f6455fc0868942e628cd232cffb044c40784489452.
  4. Rebuild and redeploy any RHEL 8 or UBI 8 based container images that install python3-pillow, since the RPM update on the host does not change layers already baked into running images; scan registries for image layers carrying python3-pillow 5.1.1-35 or earlier.
  5. Separately inventory pip-installed Pillow inside virtualenvs, Poetry and Conda environments on RHEL 8 hosts — 'pip list | grep -i pillow' — because those copies are not replaced by the dnf errata and are affected by the same three CVEs.
  6. For CVE-2026-112900, remove or restrict the Ghostscript 'gs' binary on application servers that do not need EPS or PostScript rendering, and stop passing untrusted, user-controlled filenames and paths into Image.open() for EPS content where Pillow shells out to Ghostscript.
  7. Reject FlashPix (.fpx) and TIFF uploads at the application or gateway layer where those formats are not a business requirement, and alert on segfaults or core dumps from Python worker processes that import PIL by monitoring coredumpctl and ABRT, as these are the observable signs of the heap overflows in _tiffWriteProc and FPX JPEG decoding.

Source

Code Red Cyber / VTA – coderedcyber.ai