Python emblem above software packages and a broken seal.
Security / The story

The emSign cleanup reaches Python: updating your browser is not enough

Python developers need to check pip, uv, certifi and container images because different tools carry different certificate stores.

GeekRadarStory date Published 3 min read

Updating your browser does not finish the eMudhra certificate cleanup. Python's security team is now directing developers to update package-management tools and certificate bundles, including copies inside existing virtual environments. The practical risk sits in the software that fetches your dependencies, not just the browser window in which you read the warning.

The Python advisory follows the compromise of certificate-authority keys behind emSign intermediates. It recommends certifi 2026.10.19, pip 26.2.2, uv 0.13.4 and sigstore 4.5.1 or newer, plus rebuilt container images with current system certificates. These are separate packages: updating one does not establish that the others are current.

The trust store your browser does not control

A TLS certificate helps a client establish that it is talking to the intended server. That decision ultimately depends on authorities the client trusts. If an authority's signing key is compromised, an attacker can create credentials that an affected client may accept. Encryption can still operate while the identity check is wrong.

The certifi security notice explains that its emergency release removes emSign roots associated with revoked, compromised intermediates. Its first patched version is 2026.10.18; Python's subsequent guidance recommends 2026.10.19 to retain compatibility with unaffected roots. That distinction matters if you already acted on the initial notice.

This does not mean every encrypted connection has been intercepted. A compromised certificate authority enables impersonation in an appropriate attack scenario; it is not evidence that a particular package download was altered. The response is to remove the affected trust and update the clients that rely on it.

Our Firefox emergency-update report covered the browser response. Python applications can carry their own certificate lists, so that protection does not automatically follow a developer into a terminal or build container.

pip and uv need different checks

CPython developer Christian Heimes adds a consequential detail in the advisory discussion: pip loads its bundled certifi certificates alongside system trust. Updating the operating system alone therefore does not reliably remove the compromised trust from an older pip installation. The guidance is to upgrade pip itself, including in existing environments.

Astral's uv advisory describes a different default bundle and identifies 0.13.4 as the patched release. Users explicitly configured for system or custom certificates must verify that those stores also distrust the affected roots or intermediates. A custom configuration is not inherently safer; it transfers responsibility for keeping the list current.

For a development team, this makes an inventory more useful than a single successful update command. The tool on a laptop, the copy in a project environment and the copy inside a CI image may be different installations. Check the versions actually used by the job, then rebuild and redeploy affected images. Merely changing the recipe for the next image leaves already running copies untouched.

A warning is not a reason to disable verification

Trust-store changes can also expose legitimate services that need to repair their certificate chains. Turning off certificate verification to restore a download would remove the identity check the update is intended to protect. Investigate the chain and follow the affected project's current advisory instead.

The broader lesson for software development is unusually concrete: a machine has more than one place where trust can go stale. The cleanup is complete only when the software performing the connection has stopped trusting the compromised authority.