GHSA-6q48-6c7w-9gw2 PYSEC-2026-4320
certifi bundles emSign root CAs with compromised intermediate CA keys
- Severity
- 9.1 / 10
- Critical · CVSS 4.0
- Exploit chance (EPSS)
- —
- No score published
- Known exploited
- No
- Not in CISA's catalog
- Weakness
- CWE-295 Improper Certificate Validation
- Fix
2026.10.18- Upgrade certifi to this version or later
Description
Certifi versions before 2026.10.18 include the emSign ECC Root CA - G3 root certificate in their bundled CA store. Eight eMudhra intermediate CA certificates that chain to this root have compromised private keys and the CA has revoked them.
An attacker with one of the compromised keys can issue valid-looking certificates for any hostname. If the attacker is also on-path, they can intercept or modify TLS traffic from clients that trust the certifi bundle. Examples include requests, urllib3 and pip, and the Python.org macOS installer.
Certifi 2026.10.18 removed all emSign roots from the bundle. Certifi 2026.10.19 restored the emSign roots that are not affected. Upgrade to 2026.10.19 or later, and rebuild container images that vendor certifi.
Affected versions
PyPI
| Package | Vulnerable | Fixed in |
|---|---|---|
| certifi | >= 2019.03.09, < 2026.10.18 |
2026.10.18 |
| certifi | >= 2019.03.09, < 2026.10.18 |
2026.10.18 |
How to fix
Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.
certifi PyPI → 2026.10.18
- pip
pip install --upgrade "certifi>=2026.10.18"- poetry
poetry add "certifi>=2026.10.18"- uv
uv add "certifi>=2026.10.18"
Severity breakdown
CVSS 4.0 9.1
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
- Attack vector
- Network
- Attack complexity
- High
- Attack requirements
- Present
- Privileges required
- None
- User interaction
- None
- Confidentiality (vulnerable system)
- High
- Integrity (vulnerable system)
- High
- Availability (vulnerable system)
- None
- Confidentiality (subsequent systems)
- None
- Integrity (subsequent systems)
- None
- Availability (subsequent systems)
- None
Weakness
CWE-295: Improper Certificate Validation
The product does not validate, or incorrectly validates, a certificate.
How to prevent it
- Architecture and Design, Implementation: Certificates should be carefully managed and checked to assure that data are encrypted with the intended owner's public key.
- Implementation: If certificate pinning is being used, ensure that all relevant properties of the certificate are fully validated before the certificate is pinned, including the hostname.
References
Advisories
Packages
Other links
Timeline
- Published
- Last updated by the source
Related advisories
| Advisory | Severity | Why it's related |
|---|---|---|
| GHSA-248v-346w-9cwc Certifi removes GLOBALTRUST root certificate | High | Also affects certifi |
| GHSA-xqr8-7jwr-rhp7 Removal of e-Tugra root certificate | Critical | Also affects certifi |
| GHSA-43fp-rhv2-5gv8 Certifi removing TrustCor root certificate | High | Also affects certifi |
| GHSA-4487-j8r4-4g2f Forge: verifyCertificateChain() removes trusted CA certificates with the same subject from the CA store | Low | Same weakness, CWE-295 |
| GHSA-5x38-2vff-x55p Forge: X.509 basicConstraints bypass in verifyCertificateChain() via deprecated extension OIDs 2.5.29.10 and 2.5.29.13 | High | Same weakness, CWE-295 |
| EEF-CVE-2026-115693 Custom cacerts or cacertfile do not restrict trust to the pinned CA in hackney | Not rated yet | Same weakness, CWE-295 |
| GHSA-2m5v-pch6-74hx undici vulnerable to TLS certificate validation bypass via dropped tls options in Agent | Critical | Same weakness, CWE-295 |
| GHSA-vrv5-2jg9-4mmr Microsoft Security Advisory CVE-2026-96222 - .NET Spoofing Vulnerability | High | Same weakness, CWE-295 |
MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.
Check your repos with MergeHarbor