Python 3.9.20
Release Date: Sept. 6, 2024
This is a security release of Python 3.9
Note: The release you're looking at is Python 3.9.20, a security bugfix release for the legacy 3.9 series. Python 3.12 is now the latest feature release series of Python 3. Get the latest release of 3.12.x here.
Security content in this release
- gh-123678 and gh-116741: Upgrade bundled libexpat to 2.6.3 to fix CVE-2024-28757, CVE-2024-45490, CVE-2024-45491 and CVE-2024-45492.
- gh-118486:
os.mkdir()
on Windows now accepts mode of0o700
to restrict the new directory to the current user. This fixes CVE-2024-4030 affectingtempfile.mkdtemp()
in scenarios where the base temporary directory is more permissive than the default. - gh-123067: Fix quadratic complexity in parsing
"
-quoted cookie values with backslashes byhttp.cookies
. Fixes CVE-2024-7592. - gh-113171: Fixed various false positives and false negatives in IPv4Address.is_private, IPv4Address.is_global, IPv6Address.is_private, IPv6Address.is_global. Fixes CVE-2024-4032.
- gh-67693: Fix
urllib.parse.urlunparse()
andurllib.parse.urlunsplit()
for URIs with path starting with multiple slashes and no authority. Fixes CVE-2015-2104. - gh-121957: Fixed missing audit events around interactive use of Python, now also properly firing for
python -i
, as well as forpython -m asyncio
. The event in question iscpython.run_stdin
. - gh-122133: Authenticate the socket connection for the
socket.socketpair()
fallback on platforms whereAF_UNIX
is not available like Windows. - gh-121285: Remove backtracking from tarfile header parsing for
hdrcharset
, PAX, and GNU sparse headers. That’s CVE-2024-6232. - gh-114572:
ssl.SSLContext.cert_store_stats()
andssl.SSLContext.get_ca_certs()
now correctly lock access to the certificate store, when thessl.SSLContext
is shared across multiple threads. - gh-102988:
email.utils.getaddresses()
andemail.utils.parseaddr()
now return('', '')
2-tuples in more situations where invalid email addresses are encountered instead of potentially inaccurate values. Add optional strict parameter to these two functions: usestrict=False
to get the old behavior, accept malformed inputs.getattr(email.utils, 'supports_strict_parsing', False)
can be use to check if the strict paramater is available. This improves the CVE-2023-27043 fix. - gh-123270: Sanitize names in
zipfile.Path
to avoid infinite loops (gh-122905) without breaking contents using legitimate characters. That’s CVE-2024-8088. - gh-121650:
email
headers with embedded newlines are now quoted on output. Thegenerator
will now refuse to serialize (write) headers that are unsafely folded or delimited; seeverify_generated_headers
. That’s CVE-2024-6923. - gh-119690: Fixes data type confusion in audit events raised by
_winapi.CreateFile
and_winapi.CreateNamedPipe
. - gh-116773: Fix instances of
<_overlapped.Overlapped object at 0xXXX> still has pending operation at deallocation, the process may crash
. - gh-112275: A deadlock involving
pystate.c
’sHEAD_LOCK
inposixmodule.c
at fork is now fixed.
No installers
According to the release calendar specified in PEP 596, Python 3.9 is now in the "security fixes only" stage of its life cycle: the 3.9 branch only accepts security fixes and releases of those are made irregularly in source-only form until October 2025. Python 3.9 isn't receiving regular bug fixes anymore, and binary installers are no longer provided for it. Python 3.9.13 was the last full bugfix release of Python 3.9 with binary installers.
Files
Version | Operating System | Description | MD5 Sum | File Size | GPG | Sigstore | |
---|---|---|---|---|---|---|---|
Gzipped source tarball | Source release | 896c19e5815ba990a3d1261502ea9f83 | 24.9 MB | SIG | .sigstore | ||
XZ compressed source tarball | Source release | bdcda0fdb99e7e17018f6886fae5e1fd | 18.7 MB | SIG | .sigstore |