Skip to content

[3.10.22.1] Bundle pip 26.0.1.post3 instead of 26.2.2 (certifi 2026.10.23, urllib3 1.26.20.post4) - #110

Merged
icanhasmath merged 2 commits into
3.10.22.xfrom
3.10.22.1-pip-26.0.1.post2
Oct 28, 2026
Merged

icanhasmath merged 2 commits into
3.10.22.xfrom
3.10.22.1-pip-26.0.1.post2

Conversation

@icanhasmath

@icanhasmath icanhasmath commented Oct 28, 2026 •

Copy link
Copy Markdown

Follow-up to #87 for 3.10.22.1. ensurepip now bundles ActiveState/pip 26.0.1.post3 instead of pip 26.2.2, so it's the same pip as 3.9.25.1 (#109). Tracking: Linear PROD-1555.

Why

pip 26.2.2 vendors certifi 2026.10.19, which still trusts emSign Root CA - C1 and emSign ECC Root CA - C3 (raised in the review of #91). No upstream pip release vendors certifi 2026.10.23 yet; upstream pip's main branch has it, unreleased. pip 26.0.1.post3 vendors certifi 2026.10.23, which leaves emSign Root CA - G1 as the only emSign root (follow-up to GHSA-6q48-6c7w-9gw2). It also carries the CVE-2026-3219, CVE-2026-6357, CVE-2026-8643 and CVE-2026-13346 fixes, and it supports Python 3.9 and later.

3.10.22.1 hasn't been released with 26.2.2. Compared with the last 3.10 release (3.10.22, pip 23.0.1), this is still an upgrade.

Change

  • Lib/ensurepip/_bundled/pip-26.0.1.post3-py3-none-any.whl replaces pip-26.2.2. It's the release asset, sha256 be55af8f…e1d0.
  • _PIP_VERSION is set to "26.0.1.post3".
  • The NEWS entry and the What's New ensurepip note are updated to match.
  • setuptools stays at 84.2.1.

Testing (Linux x86_64, our 3.10.22 build with this branch's ensurepip)

  • test_ensurepip passes.
  • Fresh venv: in a --without-pip venv, python -m ensurepip --upgrade installs pip 26.0.1.post3 and setuptools 84.2.1.
  • Vendored certifi: it reports 2026.10.23, and emSign Root CA - G1 is its only emSign root.
  • Network: pip download six==1.16.0 from PyPI works.

Note: on 3.10, this pip prints "A new release of pip is available: 26.0.1.post3 -> 26.2.2", because PyPI's 26.2.2 supports 3.10. Following that prompt would bring back certifi 2026.10.19. It goes away once upstream releases a pip with the newer certifi. 3.9 doesn't show it, since pip 26.2 needs Python 3.10.

Update (b3b0c51): following this PR's review, it now bundles 26.0.1.post3 (ActiveState/pip#15). That release vendors ActiveState urllib3 1.26.20.post4, fixing CVE-2025-50181, CVE-2025-66418, CVE-2025-66471, CVE-2026-21441, CVE-2026-44431, CVE-2026-97687 and CVE-2026-97689, and backports the requests fix for CVE-2026-25645. What's New now lists these. It also notes the pip upgrade prompt toward 26.2.2, which would bring back certifi 2026.10.19. Re-tested on 3.10: test_ensurepip passes, ensurepip installs pip 26.0.1.post3 and setuptools 84.2.1, there's no RequestsDependencyWarning, and pip download works.

pip 26.2.2's vendored certifi (2026.10.19) removed only emSign ECC Root
CA - G3 and still trusts emSign Root CA - C1 and emSign ECC Root CA - C3.
No upstream pip release vendors certifi 2026.10.23 yet.  3.10 therefore
takes the same ActiveState security release that 3.9.25.1 bundles,
pip 26.0.1.post2, which supports Python >= 3.9:
https://github.com/ActiveState/pip/releases/tag/26.0.1.post2

It vendors certifi 2026.10.23, leaving emSign Root CA - G1 as the only
emSign root (follow-up to GHSA-6q48-6c7w-9gw2), and carries the
CVE-2026-3219, CVE-2026-6357, CVE-2026-8643 and CVE-2026-13346 fixes.
3.10.22.1 has not been released with 26.2.2, so compared with the last
3.10 release this is still an upgrade from pip 23.0.1.  The NEWS entry and
the What's New note are updated to match.

Wheel sha256 b3fe7b5facd4aab5c11a14cf6a689b71045525c2b8dd35d6a6b45b2e83c0e7c5,
matching the release notes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@ezequielp-activestate ezequielp-activestate left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No blockers. The bundled wheel is byte-identical to the ActiveState pip 26.0.1.post2 release asset (sha256 b3fe7b5f…), the 26.2.2 wheel is removed, and _PIP_VERSION matches. In a Python 3.10 venv, python -m ensurepip from this tree installs pip 26.0.1.post2 and setuptools 84.2.1, and pip's vendored certifi is 2026.10.23.

🟡 This trades one gap for another, and the PR description only shows one side. Going from 26.2.2 back to 26.0.1.post2 also moves pip's other vendored libraries back:

vendored 26.2.2 (before) 26.0.1.post2 (this PR)
certifi 2026.10.19 2026.10.23
urllib3 2.7.0 1.26.20
requests 2.34.2 2.32.5

The fork's 26.0.1.x branch hasn't patched its vendored urllib3 1.26.20. response.py has no max_decode_links (CVE-2025-66418) and no bounded decompression (CVE-2025-66471), both fixed in urllib3 2.7.0. pip's exposure to these is low: package downloads are streamed with decode_content=False, so only decoded index responses are affected, and those come from the index pip is talking to. Still, this PR swaps pip back to a vendored urllib3 and requests with known, unfixed advisories, which the description should say.

The certifi side is real: Modules/_ssl/distrusted_spki.h blocks the compromised eMudhra intermediates (EM … G3B/G3C), not the emSign C1 and ECC C3 roots, so 2026.10.23 adds coverage the denylist doesn't. Two options:

  • mention the vendored urllib3/requests step back in What's New and the NEWS entry, next to the certifi change; or
  • in the next pip 26.0.1.postN, vendor ActiveState urllib3 1.26.20.post4, which carries the 1.26-line fixes for these, on both the 3.9 and 3.10 lines.

The "new release available: 26.0.1.post2 -> 26.2.2" prompt noted in the description would bring back certifi 2026.10.19. That's worth a line in the release notes too.

ensurepip now bundles ActiveState pip 26.0.1.post3 instead of
26.0.1.post2:
https://github.com/ActiveState/pip/releases/tag/26.0.1.post3

It is 26.0.1.post2 (certifi 2026.10.23) plus ActiveState urllib3
1.26.20.post4 as its vendored urllib3, fixing CVE-2025-50181,
CVE-2025-66418, CVE-2025-66471, CVE-2026-21441, CVE-2026-44431,
CVE-2026-97687 and CVE-2026-97689 (raised in the review of #110: the
vendored urllib3 1.26.20 in 26.0.1.post2 had them open), and the
requests 2.33.0 fix for CVE-2026-25645.  The NEWS entry and What's New
are updated to match; What's New also notes that pip's upgrade prompt points at 26.2.2, which brings back certifi 2026.10.19.

Wheel sha256 be55af8fd6e6afe2728f7539eae1ebe00e64264922f740aedfea619847a6e1d0,
matching the release notes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@icanhasmath

Copy link
Copy Markdown
Author

Your urllib3/requests point is addressed. This PR now bundles pip 26.0.1.post3 (b3b0c51). It vendors ActiveState urllib3 1.26.20.post4 and backports the requests fix for CVE-2026-25645 (ActiveState/pip#15, now released). What's New lists the fixes and notes the upgrade prompt toward 26.2.2. 3.9 gets the same pip in a separate PR. Since the bundled wheel changed after your approval, could you take a quick look?

@icanhasmath icanhasmath changed the title [3.10.22.1] Bundle pip 26.0.1.post2 instead of 26.2.2 (certifi 2026.10.23) [3.10.22.1] Bundle pip 26.0.1.post3 instead of 26.2.2 (certifi 2026.10.23, urllib3 1.26.20.post4) Oct 28, 2026

@ezequielp-activestate ezequielp-activestate left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-review of b3b0c51: still approved. The bundled pip-26.0.1.post3-py3-none-any.whl is byte-identical to the ActiveState pip 26.0.1.post3 release asset (sha256 be55af8f…), and the previous wheel is removed. That release was built from the 26.0.1.post3 tag, whose tree is the reviewed head of ActiveState/pip#15: the wheel's pip/ matches the tag's src/pip apart from the six _vendor/*.pyi stubs, which wheels leave out. In a Python 3.10 venv, python -m ensurepip from this tree installs pip 26.0.1.post3 and setuptools 84.2.1. pip's vendored certifi is 2026.10.23, and its vendored urllib3 is the patched fork (max_decode_links present). This resolves my earlier note: What's New and the NEWS entry now name the vendored urllib3 and its CVEs, and say that the PyPI upgrade prompt to 26.2.2 brings back certifi 2026.10.19.

@icanhasmath
icanhasmath merged commit 15a181e into 3.10.22.x Oct 28, 2026
18 of 20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants