Support Python 3.9 - #1229
Merged
Merged
Conversation
isc-dchui
requested review from
isc-cborbonm,
isc-egabhart,
isc-eneil,
isc-jili,
isc-jlechtne,
isc-kiyer,
isc-pbarton and
isc-tleavitt
as code owners
August 25, 2026 13:58
isc-kiyer
approved these changes
Aug 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
On paper this re-introduces 4 CVEs from those two Python packages, but in practice neither IPM nor ORAS directly use the affected code, so the attack surface has not actually been increased.
Downgraded wheels: CVE analysis and risk assessment
Two wheels were downgraded to support Python 3.9:
urllib3requestsCVEs reintroduced
urllib3 2.6.3
GHSA-qccp-gfcp-xxvc — Sensitive headers (
Authorization,Cookie) forwarded across origins in cross-origin redirects. RequiresProxyManager.connection_from_url().urlopen(..., assert_same_host=False)— the low-level API. ORAS usesrequests(high-level), which strips these headers on redirect by default. Not reachable.GHSA-mf9v-mfxr-j63j — Decompression bomb via streaming API (
HTTPResponse.read(amt=N)ordrain_conn()on partial reads). ORAS reads responses fully viarequests, never touching the urllib3 streaming API directly. Not reachable.requests 2.32.3
GHSA-9hjg-9r4m-mvj7 —
.netrccredentials leaked when following cross-origin redirects. Not reachable. IPM passes credentials to ORAS via explicitauth=parameters;requestsonly falls back to.netrcwhen no explicit auth is provided. IPM has no.netrcintegration and no code path that omits credentials on an authenticated request.GHSA-gc5v-m9x4-r6x2 — Insecure temp file reuse in
extract_zipped_paths(). This utility is not called by ORAS or IPM. Not reachable.Summary
All four CVEs are not reachable through IPM's code paths. The urllib3 CVEs require direct use of the streaming or low-level proxy API, which ORAS never exercises. The requests CVEs require
.netrc-based auth (IPM always passes credentials explicitly) or theextract_zipped_paths()utility (not called by ORAS or IPM).Testing
Tested that this snapshot version installs on both a container running Python 3.9 and a local Windows IRIS 2024.1 instance running Python 3.9, with the integration tests running on the former. Tests also pass on a container running Python 3.12
Checklist
mainbranch rebased or merged.zpm test -only) and integration tests (zpm verify -only) pass.