Python announced expedited security releases for 3.15, 3.14, 3.13, 3.12 and 3.11 on October 26, 2026. They block compromised eMudhra intermediate CA keys in the ssl module. All five also fix a tarfile.tar_filter bypass, the counterpart of the earlier CVE-2026-7774 in data_filter. The Python team recommends upgrading every affected version, 3.11 and 3.12 included.
Why did Python release patches for five branches at once?
The trigger was a set of compromised eMudhra intermediate CA keys, and the fix went into every supported branch at the same time as Python 3.15.2, 3.14.10, 3.13.18, 3.12.16 and 3.11.18. The Python Insider post announcing them is dated October 26, 2026, and was written by Hugo van Kemenade. The 3.12.16 download page lists its release date as Oct. 25, 2026.
The ssl module now blocks those keys as a last resort against their use. The Python security announcement of October 24, 2026 describes the mechanism as a denylist of known compromised certificates added to the ssl module. Certificates on that list are rejected no matter how an SSLContext policy is configured. The stated goal is user safety even where certificate revocation is not configured.
The change also helps package installs. According to the release post, normal pip usage, including upgrading pip itself, is now safe from attacks based on the compromised keys, even if pip has not been updated yet. The protection lives in the interpreter, so the version that counts is the Python running pip.
Which vulnerabilities do the new Python releases fix?
All five releases carry three shared fixes: the eMudhra distrust (CVE-2026-115557), a tarfile fix (CVE-2026-114583) and a change that rejects cookies with a negative version in http.cookiejar.
The tarfile issue was announced on October 22, 2026 as a MEDIUM severity vulnerability affecting CPython. Crafted link entries, including symlinks with empty or directory-like names, could redirect later archive members outside the intended extraction directory. A malicious archive could then make tarfile.extractall() with the tar filter write files outside the destination directory, within the permissions of the extracting process. The announcement calls it the tar_filter counterpart of CVE-2026-7774, which covered tarfile.data_filter.
The older branches also get fixes that the newer branches already had.
| Release | Branch status | Packaging | Fixes beyond the three shared ones |
|---|---|---|---|
| 3.15.2 | bugfix | Binary installers | Shared fixes only |
| 3.14.10 | bugfix | Binary installers | Shared fixes only |
| 3.13.18 | security | Source only | Expat 2.9.0 (CVE-2026-77214, CVE-2026-102633), mimetypes on Windows (CVE-2024-3220), header refolding edge case, tempfile.TemporaryDirectory cleanup race |
| 3.12.16 | security | Source only | Same as 3.13.18 |
| 3.11.18 | security | Source only | Expat 2.9.0, mimetypes on Windows, header refolding edge case |
The extra fixes for 3.13, 3.12 and 3.11 were already in 3.15.1 and 3.14.9. The tempfile fix was already in 3.15.0 and 3.14.9.
Do Python 3.11 and 3.12 images need a rebuild this week?
Yes, going by the release team’s own guidance. The team highly recommends upgrading to all users of affected versions. Both 3.11 and 3.12 got the full set of shared fixes plus the backports in the table.
The catch is packaging. Python 3.13.18, 3.12.16 and 3.11.18 are source-only security releases, while 3.15.2 and 3.14.10 ship binary installers. The 3.12.16 page says 3.12 is in the security fixes only stage, with irregular source-only releases until October 2028. It also says 3.12.10 was the last full bugfix release with binary installers. The developer guide puts 3.11 in the same security stage, with an end of life scheduled for 2027-10.
For a platform team, that splits the fleet in two. Images that compile CPython from the source tarball get the fix by bumping the version and rebuilding. Images that take Python from an operating system package have to wait for that distribution to ship its own fix.
The Debian security tracker shows why the second group needs its own check. For the tarfile CVE it lists python3.11 in bookworm as vulnerable, the bookworm security suite included. It lists python3.13 in trixie as vulnerable too, with a no-dsa note that marks it a minor issue. In sid, python3.14 3.14.10-1 and python3.15 3.15.2-1 are listed as fixed. The same page lists pypy3 and jython as vulnerable, so alternative interpreters belong in the inventory too.
The developer guide shows Python 3.10 reaching end of life on 2026-10-01. That puts it outside the supported branches.
How should a team weigh the risk of each fix?
The eMudhra fix reaches the furthest, because it covers anything that uses the ssl module, from service-to-service clients to pip installs during a build. An image built on an unpatched interpreter keeps validating certificates without this denylist.
The tarfile fix matters most where code extracts archives it did not create and uses the tar filter. Examples are user uploads, downloaded artifacts and plugin bundles. The cookie fix touches HTTP clients built on http.cookiejar. The bundled Expat moves to 2.9.0 on 3.13, 3.12 and 3.11, a fix that 3.15.1 and 3.14.9 already had. The mimetypes change applies to Windows only. Of all these, only the tarfile issue has a published severity in the announcements, and that severity is MEDIUM.
What to check this week
Give this until the end of Friday, October 30, 2026.
By Thursday, list every base image and runtime with its exact Python patch version. Include CI runners and build images that run pip. Anything below 3.15.2, 3.14.10, 3.13.18, 3.12.16 or 3.11.18 is a candidate for rebuild.
Next, sort each image by where its Python comes from. Source builds can move to the new tarballs now. Images built on distribution packages need that vendor’s tracker. Debian’s tracker, for example, lists bookworm python3.11 as vulnerable to the tarfile CVE.
In parallel, search the codebase for tarfile.extractall() calls that use the tar filter on archives from outside the system. Those code paths carry the most direct exposure until the rebuild ships.
By Friday, rebuild and redeploy the source-built images, then confirm the interpreter version reported inside a running container. Any image left on a distribution package gets an owner and a date tied to that vendor’s fix. Any service still on 3.10 needs a migration plan, because 3.10 is outside the supported branches.
Sources
- blog.python.org/2026/10/python-3152-31410-31318-31216-31118, retrieved 2026-10-28.
- python.org/downloads/release/python-31216, retrieved 2026-10-28.
- openwall.com/lists/oss-security/2026/10/24/5, retrieved 2026-10-28.
- openwall.com/lists/oss-security/2026/10/22/33, retrieved 2026-10-28.
- security-tracker.debian.org/tracker/CVE-2026-114583, retrieved 2026-10-28.
- devguide.python.org/versions, retrieved 2026-10-28.