Python 3.15.1, 3.14.9 and 3.13.17 ship pip 26.2.2
Python 3.15.1, 3.14.9 and 3.13.17 arrived on October 21, 2026, bundling pip 26.2.2 and certifi 2026.10.19 to stop trusting the eMudhra CA.
3 min read

By the numbers
- Python release lines patched on October 21
- 3
- the pip version every installer now bundles
- 26.2.2
- the certifi version inside that pip
- 2026.10.19
The Python release team shipped Python 3.15.1, 3.14.9 and 3.13.17 on October 21, 2026, to stop pip from trusting eMudhra. That certificate authority's keys were exposed this week. The new installers fix fresh setups, but every existing virtual environment still needs its own upgrade.
What the three releases change
All three bundle pip 26.2.2, according to the Python Insider post by Hugo van Kemenade of the release team. That pip carries certifi 2026.10.19, the list of trusted certificate authorities that no longer includes eMudhra.
| Release | Type | What it bundles |
|---|---|---|
| 3.15.1 | Expedited security release | pip 26.2.2, certifi 2026.10.19 |
| 3.14.9 | Expedited security release | pip 26.2.2, certifi 2026.10.19 |
| 3.13.17 | Special security release | pip 26.2.2, certifi 2026.10.19 |
Python 3.13 normally gets no pip update in a security release, to avoid breaking older setups. Van Kemenade explains the exception: "since 3.13 only just entered security-only mode, doing a special release with installers seemed prudent."
The incident behind it is covered in eMudhra CA keys compromised: Go, Firefox, NSS ship fixes. In short, eight eMudhra intermediate keys were weak enough to guess. Anyone holding them could forge HTTPS certificates for any site.
Why a system update is not enough
Pip does not rely on your operating system alone to decide which sites to trust. Linux Compatible explains that pip always loads certifi next to the system trust store. There is no supported switch to turn certifi off. So an OS update that drops eMudhra leaves an old pip still trusting it.
That is why the Python post asks users to act inside each environment: "For all existing virtual environments on your system, please upgrade pip and uv to the latest versions." Uv is a Python package manager that can stand in for pip.
Linux Compatible adds a few details:
- uv has an escape hatch. Setting
UV_SYSTEM_CERTS=truemakes uv use the host's trust store. Pip has no equivalent. - Containers need rebuilding. Images that pin an old pip keep trusting eMudhra until they are rebuilt.
- A deeper fix is proposed, not shipped. Python core contributor Tiran filed a ticket asking the
sslmodule to block known-bad intermediate keys. "The 'security incident' is a bad private key," Tiran wrote.
What else is in Python 3.15.1
Python 3.15.1 is also the first bugfix release since 3.15.0 shipped on October 9. Linux Compatible counts roughly 330 bug fixes from 117 contributors. The Python changelog lists three security entries:
- The bundled pip in
ensurepipmoves to 26.2.2. - On Windows,
mimetypesstops readingmimetypes.knownfilesby default and uses only the registry. - The bundled libexpat XML parser moves to 2.9.0.
On macOS, Ctrl-C raises KeyboardInterrupt again in programs that create a Tk window. The macOS installers also carry a pre-release Tk that fixes "a possible hang on macOS 27.0" in tkinter apps such as IDLE. And multiprocessing now falls back to the "spawn" start method when no writable temporary folder exists.
What this means for developers
Treat this as an environment chore, not an interpreter upgrade.
- Upgrade pip in every virtual environment. The Python post gives a pinned command that installs pip 26.2.2 by URL with a checksum. Upgrade uv as well.
- Fix python.org installs on macOS. These carry their own certifi. Run
pip install --upgrade certifiwith each version's own Python, as the post shows for 3.15, 3.14 and 3.13. - Rebuild images and CI caches. A Docker image or cached virtual environment built last week still has the old certifi.
- Watch Windows MIME handling. If your code reads
mimetypes.knownfiles, test 3.15.1 before rolling it out.
If you skipped 3.15.0, the main changes are in Python 3.15.0 ships with lazy imports and frozendict.
Sources
- Python 3.15.1, 3.14.9 and 3.13.17 are out - Python Insider
- Python Releases Emergency Update to Block Broken eMudhra Certificate Authority - Linux Compatible
- Changelog - Python 3.15.0 documentation - Python documentation
Related articles

Python 3.10 hits end of life as five releases fix 8 CVEs
Python 3.10.22 is the last 3.10 release: the branch reached end of life on October 1, 2026, as 3.11 to 3.14 shipped fixes for up to eight CVEs.

SourceHut build log XSS let attackers take over accounts
A crafted build log could run script in a SourceHut user's browser. ansi2html 1.9.4 fixes the bug, CVE-2026-92973, which hit versions 1.7.0 to 1.9.3.

PHP 8.5.12 and 8.4.27 fix two critical RCE flaws
PHP shipped 8.5.12, 8.4.27, 8.3.36 and 8.2.35 on October 21 to fix two flaws rated 9.2. PHP says updating is the only complete fix.
The weekly digest
One email every Friday with the week's top stories from all six desks: AI, dev tools, coding, the tech industry, startups and what's next. Free, no spam.