
Key points
- certifi versions before 2026.10.19 include a compromised emSign root.
- uv versions before 0.13.4 trust the same revoked root certificate.
- Attackers can issue fake certificates for any hostname using this flaw.
The Python package certifi is vulnerable in versions from 2019.03.09 up to 2026.10.18. The Python tool uv is vulnerable in versions before 0.13.4. Both products bundle a root certificate from emSign that has been revoked due to compromised keys. Patches exist for both: certifi 2026.10.19 and uv 0.13.4. Users of these tools must upgrade to prevent potential man-in-the-middle attacks on their secure connections.
In plain English
These software components help applications verify that websites are who they say they are. They do this by trusting a list of official certificate authorities. The emSign root certificate was included in this trusted list for both certifi and uv. However, the private keys for eight intermediate certificates chaining to this root have been compromised. An attacker with those stolen keys can create fake security certificates for any website, which these tools will incorrectly accept as valid.
The background
The issue stems from eight intermediate certificates issued by eMudhra that chain to the emSign ECC Root CA - G3. The private keys for these intermediates were compromised. The certificate authority revoked them, but the root itself remained in the bundles distributed by certifi and uv. This allowed the root to continue being trusted by the tools, enabling an attacker with the compromised intermediate keys to issue certificates that the tools accept, facilitating man-in-the-middle attacks if the attacker is on-path.
What changes now
Certifi version 2026.10.18 removed all emSign roots from its bundle. Version 2026.10.19 restored only the emSign roots that are not affected by the compromise. Users should upgrade to 2026.10.19 or later. For uv, version 0.13.4 removes the vulnerable root from its vendored bundle, aligning with webpki-root-certs 1.0.10. Users of uv must upgrade to 0.13.4 or later. Container images that vendor these packages must also be rebuilt with the updated versions to ensure the fix is applied.
Who needs to act first
Teams usually prioritize systems that handle sensitive data or external connections. Check whether your servers or applications rely on the affected Python packages. Identify which versions are currently running before making changes. Test the updated packages in a non-production environment to ensure compatibility with your existing code. Back up your current configurations and container images before rolling out the updates. This approach minimizes the risk of service disruption while ensuring your systems are protected against the vulnerability as soon as possible.
Background: Certificate authorities
Certificate authorities act as trusted third parties that verify website identities. They issue digital certificates that prove a site is who it claims to be. Without this verification, your browser cannot establish a secure, encrypted connection, leaving your data exposed to interception.
Read the full guide: Certificate Authorities Explained: How Digital Trust Works
What to do and how to stay safe: certifi
- Verify which versions of certifi and uv are installed on your systems using your package manager or container registry.
- Upgrade certifi to version 2026.10.19 or later and uv to version 0.13.4 or later to remove the compromised root certificate.
- Rebuild any container images or virtual machines that bundle these packages to ensure they contain the patched versions.
- Monitor your application logs for any unusual TLS errors or connection failures after upgrading, as the certificate bundle has changed.
Step-by-step guide: Out-of-Band Patches: Meaning, Risks, and Deployment Reality
General security guidance from the Patch Herald newsroom. It is not confirmed advice from the organisations named in this story.
Frequently asked questions
Can an attacker actually exploit this vulnerability?
An attacker with one of the compromised keys can issue valid-looking certificates for any hostname and intercept TLS traffic if they are on-path, according to GitHub advisories.
Does this affect all versions of certifi?
Certifi versions from 2019.03.09 up to 2026.10.18 are vulnerable, while versions 2026.10.19 and later are patched, according to the advisory.
What about uv versions?
uv versions before 0.13.4 are vulnerable, while version 0.13.4 and later remove the compromised root from their vendored bundle, according to GitHub.



