mirror of
https://github.com/django/django.git
synced 2024-12-30 21:16:26 +00:00
e1e81aa1c4
In Python 3.9.5+ urllib.parse() automatically removes ASCII newlines
and tabs from URLs [1, 2]. Unfortunately it created an issue in
the URLValidator. URLValidator uses urllib.urlsplit() and
urllib.urlunsplit() for creating a URL variant with Punycode which no
longer contains newlines and tabs in Python 3.9.5+. As a consequence,
the regular expression matched the URL (without unsafe characters) and
the source value (with unsafe characters) was considered valid.
[1] https://bugs.python.org/issue43882 and
[2] 76cd81d603
30 lines
1.2 KiB
Plaintext
30 lines
1.2 KiB
Plaintext
==========================
|
|
Django 3.2.2 release notes
|
|
==========================
|
|
|
|
*May 6, 2021*
|
|
|
|
Django 3.2.2 fixes a security issue and a bug in 3.2.1.
|
|
|
|
CVE-2021-32052: Header injection possibility since ``URLValidator`` accepted newlines in input on Python 3.9.5+
|
|
===============================================================================================================
|
|
|
|
On Python 3.9.5+, :class:`~django.core.validators.URLValidator` didn't prohibit
|
|
newlines and tabs. If you used values with newlines in HTTP response, you could
|
|
suffer from header injection attacks. Django itself wasn't vulnerable because
|
|
:class:`~django.http.HttpResponse` prohibits newlines in HTTP headers.
|
|
|
|
Moreover, the ``URLField`` form field which uses ``URLValidator`` silently
|
|
removes newlines and tabs on Python 3.9.5+, so the possibility of newlines
|
|
entering your data only existed if you are using this validator outside of the
|
|
form fields.
|
|
|
|
This issue was introduced by the :bpo:`43882` fix.
|
|
|
|
Bugfixes
|
|
========
|
|
|
|
* Prevented, following a regression in Django 3.2.1, :djadmin:`makemigrations`
|
|
from generating infinite migrations for a model with ``Meta.ordering``
|
|
contained ``OrderBy`` expressions (:ticket:`32714`).
|