> A comment on it from Christian Helms adds:
> > Just to stress one point: users must update pip to >= 26.2.2.
> >
> > pip always loads the CA certificates from its vendored certifi in
> > addition to the system trust store, and there is no supported way to
> > disable this. REQUESTS_CA_BUNDLE / --cert only add CAs; truststore is
> > used “in addition to certifi” by design. As a result, any pip < 26.2.2
> > will keep trusting the compromised intermediate CAs regardless of the
> > system trust store, so distrusting them at the OS level is not enough.

The discuss.python.org conversation on that issue has long since moved
on, so asking here:

The macOS remediation advice on the official vuln page at
https://emudhra.we-have-a-problem.com/#macos-curl lists remediation
instructions which it is claimed address this, with instructions to
set a PIP_CERT environment variable in a sitecustomize.py file.

> The built-in pip3, and the pip in virtual environments created from the 
> built-in python3, use their own outdated copy of the roots instead. To make 
> them use the fixed system file, run:
>
> F="$(/usr/bin/python3 -c 'import sysconfig; 
> print(sysconfig.get_path("stdlib"))')/sitecustomize.py" &&
echo 'import os; os.environ.setdefault("PIP_CERT",
"/etc/ssl/cert.pem")' | sudo tee -a "$F" > /dev/null &&
sudo chmod 644 "$F"

I'm finding it a bit tricky to figure out a reproducible test case
which would exercise this, so I haven't done more testing myself,
but—does this actually work?  Or is upgrading `pip` to >= 26.2.2 the
only solution?  (Or, now that `pip` > 26.2.2 is out, is upgrading the
better solution, and I should go file a PR against the site to update
its guidance.)

(Incidentally, the latest macOS updates do _NOT_ include an updated
`/etc/ssl/cert.pem`, and do clobber any manual changes you or your IT
department may have made to `/etc/ssl/cert.pem`, so any manual
mitigations you have applied to remove the AAA Certificate Services
and emSign ECC Root CA - G3 certs _DO_ need to be reapplied.)

Best,
- Kevin

On Thu, Oct 22, 2026 at 4:43 PM Alan Coopersmith
<[email protected]> wrote:
>
> https://discuss.python.org/t/information-for-python-users-regarding-emudhra-emsign-ca-certificate-security-incident/109576
> has this statement from Seth Michael Larson:
> > A security incident affecting eMudhra intermediate certificates has
> > required removing the emSign root CA certificate from CA bundles such
> > as “certifi”. It’s important to immediately upgrade the software
> > packages below to at least the versions specified and rebuild
> > container images with layer caching disabled to fetch the latest
> > system certificates. Failure to do so could result in
> > monster-in-the-middle (MITM) attacks against TLS clients, including
> > python.org and pypi.org .
> >
> >     certifi 2026.10.19 (1)
> >     pip 26.2.2
> >     uv 0.13.4
> >     sigstore 4.5.1
> >     conda 26.9.4
> >     pixi 0.82.1
> >
> > (1): Advisory mentions 2026.10.18, but 2026.10.19 is recommended for
> > compatibility with unaffected emSign root certificates.
> >
> > For all existing virtual environments on your system, please upgrade
> > pip and uv to the latest versions. You can update pip securely by
> > running the following command and then use this secure pip
> > installation to upgrade certifi and uv:
> >
> > python -m pip install "pip @ 
> > https://files.pythonhosted.org/packages/3f/06/3e4420302363fbb71be3c7f35ce042f54bfca330e3e66b3a2e3c4cca579f/pip-26.2.2-py3-none-any.whl#sha256=fd7f4dfa8190e014013b9f08f3e973f4e4c26ffd179a204895533a7254813a70";
> >
> > Note that the certifi CA bundle is included in the macOS installation
> > of Python from python.org. To upgrade certificates for this
> > installation and pip itself, run the command below like so:
> >
> > /Library/Frameworks/Python.framework/Versions/3.15/bin/python3.15 -m pip 
> > install "pip @ 
> > https://files.pythonhosted.org/packages/3f/06/3e4420302363fbb71be3c7f35ce042f54bfca330e3e66b3a2e3c4cca579f/pip-26.2.2-py3-none-any.whl#sha256=fd7f4dfa8190e014013b9f08f3e973f4e4c26ffd179a204895533a7254813a70";
> > /Library/Frameworks/Python.framework/Versions/3.15/bin/python3.15 -m pip 
> > install --upgrade certifi
> > /Library/Frameworks/PythonT.framework/Versions/3.15/bin/python3.15t -m pip 
> > install "pip @ 
> > https://files.pythonhosted.org/packages/3f/06/3e4420302363fbb71be3c7f35ce042f54bfca330e3e66b3a2e3c4cca579f/pip-26.2.2-py3-none-any.whl#sha256=fd7f4dfa8190e014013b9f08f3e973f4e4c26ffd179a204895533a7254813a70";
> >
> > This topic will be updated as more information is made available.
>
> A comment on it from Christian Helms adds:
> > Just to stress one point: users must update pip to >= 26.2.2.
> >
> > pip always loads the CA certificates from its vendored certifi in
> > addition to the system trust store, and there is no supported way to
> > disable this. REQUESTS_CA_BUNDLE / --cert only add CAs; truststore is
> > used “in addition to certifi” by design. As a result, any pip < 26.2.2
> > will keep trusting the compromised intermediate CAs regardless of the
> > system trust store, so distrusting them at the OS level is not enough.
> >
> > uv users can block the bad certs in their system trust store and
> > UV_SYSTEM_CERTS=true. That does not work with pip. Updating pip is the
> > only reliable fix. See Switch to using truststore only by default
> > (currently mixed certifi + truststore) · Issue #14374 · pypa/pip ·
> > GitHub
> >
> > PS: The ‘security incident’ is a bad private key. An elliptic key with
> > private key value d=4 is not secure… All 8 eMudhra CAs had private
> > keys with d < 256.
>
>


-- 
Kevin Riggle - Principal, Complex Systems Group LLC
he/him • Brooklyn, NY, USA • Eastern Time
https://complexsystems.group • https://calendly.com/kevinriggle/coffee

Reply via email to