Tetrak
GitHub ↗
Security · Pillow

An EPS file's name is passed to Ghostscript as an option

Argument injection in the Ghostscript call, potentially leading to remote code execution.

Advisory
CVE-2026-112900 (also GHSA-w889-685w-c8fh)
Library
Pillow, pillow on PyPI
Published
Severity
9.2 out of 10, as published
Affected
>= 2.6.0, < 13.0.0
Fixed in
13.0.0
Reaches you
by opening a file

What triggers it

Opening an EPS (PostScript) file, recognised by content whatever its name, when Ghostscript is installed; the file's own name is read as a Ghostscript option.

What sillybos does

Refused by default

sillybos refuses the triggering file under its default policy, through the formats check.

PostScript is not one of the four formats and is refused by name from the first bytes, so no PostScript file reaches Pillow's EPS reader through the check.

Proved by this test in the sillybos suite, which builds the triggering file from bytes and checks that it is refused:

How to protect yourself

In general. Upgrade to Pillow 13.0.0. Do not install Ghostscript on a machine that opens files from outside unless it is needed.

Specifically. Image.open(path, formats=["JPEG", "PNG", "TIFF"]) keeps the EPS reader from ever running; sillybos refuses the file before that.

The general advice applies to every row here.

Sources