Releases10
Frequency5 months 2 weeks
Last Release
security holding package

CVE History

CVEAffectedPublishedCVSS v3CVSS v2
>= 5.2, < 5.2.15, >= 6.0, < 6.0.63.1 LOW

An issue was discovered in Django 5.2 before 5.2.15 and 6.0 before 6.0.6. `django.middleware.cache.UpdateCacheMiddleware` in Django does not match `Cache-Control` response directives case-insensitively, which allows remote attackers to read responses that were incorrectly cached because their `Cache-Control` directives used uppercase or mixed-case values. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Ahmed Badawe for reporting this issue.

>= 5.2, < 5.2.15, >= 6.0, < 6.0.63.1 LOW

An issue was discovered in Django 6.0 before 6.0.6 and 5.2 before 5.2.15. `django.core.mail.backends.smtp.EmailBackend` in Django fails to prevent reuse of a partially-initialized connection after a failed `STARTTLS` handshake when `fail_silently=True`, which allows on-path network attackers to read email content via cleartext interception. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Kasper Dupont for reporting this issue.

>= 5.2, < 5.2.15, >= 6.0, < 6.0.63.1 LOW

An issue was discovered in Django 6.0 before 6.0.6 and 5.2 before 5.2.15. `django.http.HttpRequest.get_signed_cookie` in Django uses a non-injective salt derivation (concatenating the cookie name and salt argument), which allows a remote attacker to use a cookie in a context different from the one where it was signed, via distinct `(name, salt)` pairs that produce the same concatenation. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Peng Zhou for reporting this issue.

>= 5.2, < 5.2.15, >= 6.0, < 6.0.63.1 LOW

An issue was discovered in Django 5.2 before 5.2.15 and 6.0 before 6.0.6. `django.utils.cache.has_vary_header()` in Django does not strip leading or trailing whitespace from `Vary` response header values before comparison, which allows remote attackers to read cached responses via requests to URLs whose responses contain whitespace-padded Vary header values. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Navid Rezazadeh for reporting this issue.

>= 5.2, < 5.2.15, >= 6.0, < 6.0.63.1 LOW

An issue was discovered in Django 5.2 before 5.2.15 and 6.0 before 6.0.6. `django.middleware.cache.UpdateCacheMiddleware` in Django does not add `Authorization` to the `Vary` response header for requests bearing that header without `Cache-Control: public`, which allows remote attackers to read private cached responses via unauthenticated requests to the same URL. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Shai Berger for reporting this issue.

>= 5.2, < 5.2.14, >= 6.0, < 6.0.54.3 MEDIUM

An issue was discovered in 6.0 before 6.0.5 and 5.2 before 5.2.14. `django.middleware.cache.UpdateCacheMiddleware` erroneously caches requests where the `Vary` header contained an asterisk (`'*'`). This can lead to private data being stored and served. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Ahmad Sadeddin for reporting this issue.

>= 5.2, < 5.2.14, >= 6.0, < 6.0.55.3 MEDIUM

An issue was discovered in 6.0 before 6.0.5 and 5.2 before 5.2.14. ASGI requests with a missing or understated `Content-Length` header can bypass the `FILE_UPLOAD_MAX_MEMORY_SIZE` limit, potentially loading large files into memory and causing service degradation. As a reminder, Django expects a limit to be configured at the web server level rather than solely relying on `FILE_UPLOAD_MAX_MEMORY_SIZE`. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Kyle Agronick for reporting this issue.

>= 5.2, < 5.2.14, >= 6.0, < 6.0.56.5 MEDIUM

An issue was discovered in 6.0 before 6.0.5 and 5.2 before 5.2.14. Response headers do not vary on cookies if a session is not modified, but `SESSION_SAVE_EVERY_REQUEST` is `True`. A remote attacker can steal a user's session after that user visits a cached public page. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Cantina for reporting this issue.

>= 4.2, < 4.2.30, >= 5.2, < 5.2.13, >= 6.0, < 6.0.42.7 LOW

An issue was discovered in 6.0 before 6.0.4, 5.2 before 5.2.13, and 4.2 before 4.2.30. Admin changelist forms using `ModelAdmin.list_editable` incorrectly allowed new instances to be created via forged `POST` data. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Cantina for reporting this issue.

>= 4.2, < 4.2.30, >= 5.2, < 5.2.13, >= 6.0, < 6.0.49.8 CRITICAL

An issue was discovered in 6.0 before 6.0.4, 5.2 before 5.2.13, and 4.2 before 4.2.30. Add permissions on inline model instances were not validated on submission of forged `POST` data in `GenericInlineModelAdmin`. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank N05ec@LZU-DSLab for reporting this issue.

>= 4.2, < 4.2.30, >= 5.2, < 5.2.13, >= 6.0, < 6.0.47.5 HIGH

An issue was discovered in 6.0 before 6.0.4, 5.2 before 5.2.13, and 4.2 before 4.2.30. `ASGIRequest` allows a remote attacker to spoof headers by exploiting an ambiguous mapping of two header variants (with hyphens or with underscores) to a single version with underscores. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Tarek Nakkouch for reporting this issue.

>= 4.2, < 4.2.30, >= 5.2, < 5.2.13, >= 6.0, < 6.0.46.5 MEDIUM

An issue was discovered in 6.0 before 6.0.4, 5.2 before 5.2.13, and 4.2 before 4.2.30. `MultiPartParser` allows remote attackers to degrade performance by submitting multipart uploads with `Content-Transfer-Encoding: base64` including excessive whitespace. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Seokchan Yoon for reporting this issue.

>= 4.2, < 4.2.30, >= 5.2, < 5.2.13, >= 6.0, < 6.0.47.5 HIGH

An issue was discovered in 6.0 before 6.0.4, 5.2 before 5.2.13, and 4.2 before 4.2.30. ASGI requests with a missing or understated `Content-Length` header could bypass the `DATA_UPLOAD_MAX_MEMORY_SIZE` limit when reading `HttpRequest.body`, allowing remote attackers to load an unbounded request body into memory. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Superior for reporting this issue.

>= 4.2.0, < 4.2.29, >= 5.2, < 5.2.12, >= 6.0, < 6.0.33.7 LOW

An issue was discovered in 6.0 before 6.0.3, 5.2 before 5.2.12, and 4.2 before 4.2.29. Race condition in file-system storage and file-based cache backends in Django allows an attacker to cause file system objects to be created with incorrect permissions via concurrent requests, where one thread's temporary `umask` change affects other threads in multi-threaded environments. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Tarek Nakkouch for reporting this issue.

>= 4.2.0, < 4.2.29, >= 5.2, < 5.2.12, >= 6.0, < 6.0.37.5 HIGH

An issue was discovered in 6.0 before 6.0.3, 5.2 before 5.2.12, and 4.2 before 4.2.29. `URLField.to_python()` in Django calls `urllib.parse.urlsplit()`, which performs NFKC normalization on Windows that is disproportionately slow for certain Unicode characters, allowing a remote attacker to cause denial of service via large URL inputs containing these characters. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Seokchan Yoon for reporting this issue.

>= 4.2, < 4.2.28, >= 5.2, < 5.2.11, >= 6.0, < 6.0.25.4 MEDIUM

An issue was discovered in 6.0 before 6.0.2, 5.2 before 5.2.11, and 4.2 before 4.2.28. `.QuerySet.order_by()` is subject to SQL injection in column aliases containing periods when the same alias is, using a suitably crafted dictionary, with dictionary expansion, used in `FilteredRelation`. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Solomon Kebede for reporting this issue.

>= 4.2, < 4.2.28, >= 5.2, < 5.2.11, >= 6.0, < 6.0.25.4 MEDIUM

An issue was discovered in 6.0 before 6.0.2, 5.2 before 5.2.11, and 4.2 before 4.2.28. `FilteredRelation` is subject to SQL injection in column aliases via control characters, using a suitably crafted dictionary, with dictionary expansion, as the `**kwargs` passed to `QuerySet` methods `annotate()`, `aggregate()`, `extra()`, `values()`, `values_list()`, and `alias()`. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Solomon Kebede for reporting this issue.

>= 4.2, < 4.2.28, >= 5.2, < 5.2.11, >= 6.0, < 6.0.27.5 HIGH

An issue was discovered in 6.0 before 6.0.2, 5.2 before 5.2.11, and 4.2 before 4.2.28. `django.utils.text.Truncator.chars()` and `Truncator.words()` methods (with `html=True`) and the `truncatechars_html` and `truncatewords_html` template filters allow a remote attacker to cause a potential denial-of-service via crafted inputs containing a large number of unmatched HTML end tags. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Seokchan Yoon for reporting this issue.

>= 4.2, < 4.2.28, >= 5.2, < 5.2.11, >= 6.0, < 6.0.25.4 MEDIUM

An issue was discovered in 6.0 before 6.0.2, 5.2 before 5.2.11, and 4.2 before 4.2.28. Raster lookups on ``RasterField`` (only implemented on PostGIS) allows remote attackers to inject SQL via the band index parameter. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Tarek Nakkouch for reporting this issue.

>= 4.2, < 4.2.28, >= 5.2, < 5.2.11, >= 6.0, < 6.0.27.5 HIGH

An issue was discovered in 6.0 before 6.0.2, 5.2 before 5.2.11, and 4.2 before 4.2.28. `ASGIRequest` allows a remote attacker to cause a potential denial-of-service via a crafted request with multiple duplicate headers. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Jiyong Yang for reporting this issue.

>= 4.2, < 4.2.28, >= 5.2, < 5.2.11, >= 6.0, < 6.0.25.3 MEDIUM

An issue was discovered in 6.0 before 6.0.2, 5.2 before 5.2.11, and 4.2 before 4.2.28. The `django.contrib.auth.handlers.modwsgi.check_password()` function for authentication via `mod_wsgi` allows remote attackers to enumerate users via a timing attack. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Stackered for reporting this issue.

>= 4.2, < 4.2.27, >= 5.1, < 5.1.15, >= 5.2, < 5.2.97.5 HIGH

An issue was discovered in 5.2 before 5.2.9, 5.1 before 5.1.15, and 4.2 before 4.2.27. Algorithmic complexity in `django.core.serializers.xml_serializer.getInnerText()` allows a remote attacker to cause a potential denial-of-service attack triggering CPU and memory exhaustion via specially crafted XML input processed by the XML `Deserializer`. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Seokchan Yoon for reporting this issue.

>= 4.2, < 4.2.27, >= 5.1, < 5.1.15, >= 5.2, < 5.2.94.3 MEDIUM

An issue was discovered in 5.2 before 5.2.9, 5.1 before 5.1.15, and 4.2 before 4.2.27. `FilteredRelation` is subject to SQL injection in column aliases, using a suitably crafted dictionary, with dictionary expansion, as the `**kwargs` passed to `QuerySet.annotate()` or `QuerySet.alias()` on PostgreSQL. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Stackered for reporting this issue.

>= 4.2, < 4.2.26, >= 5.1, < 5.1.14, >= 5.2, < 5.2.89.1 CRITICAL

An issue was discovered in 5.1 before 5.1.14, 4.2 before 4.2.26, and 5.2 before 5.2.8. The methods `QuerySet.filter()`, `QuerySet.exclude()`, and `QuerySet.get()`, and the class `Q()`, are subject to SQL injection when using a suitably crafted dictionary, with dictionary expansion, as the `_connector` argument. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank cyberstan for reporting this issue.

>= 4.2, < 4.2.26, >= 5.1, < 5.1.14, >= 5.2, < 5.2.87.5 HIGH

An issue was discovered in 5.1 before 5.1.14, 4.2 before 4.2.26, and 5.2 before 5.2.8. NFKC normalization in Python is slow on Windows. As a consequence, `django.http.HttpResponseRedirect`, `django.http.HttpResponsePermanentRedirect`, and the shortcut `django.shortcuts.redirect` were subject to a potential denial-of-service attack via certain inputs with a very large number of Unicode characters. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank Seokchan Yoon for reporting this issue.

>= 4.2.0, < 4.2.25, >= 5.1, < 5.1.13, >= 5.2, < 5.2.73.1 LOW

An issue was discovered in Django 4.2 before 4.2.25, 5.1 before 5.1.13, and 5.2 before 5.2.7. The django.utils.archive.extract() function, used by the "startapp --template" and "startproject --template" commands, allows partial directory traversal via an archive with file paths sharing a common prefix with the target directory.

>= 4.2, < 4.2.25, >= 5.1, < 5.1.13, >= 5.2, < 5.2.77.1 HIGH

An issue was discovered in Django 4.2 before 4.2.25, 5.1 before 5.1.13, and 5.2 before 5.2.7. QuerySet.annotate(), QuerySet.alias(), QuerySet.aggregate(), and QuerySet.extra() are subject to SQL injection in column aliases, when using a suitably crafted dictionary, with dictionary expansion, as the **kwargs passed to these methods (on MySQL and MariaDB).

>= 4.2, < 4.2.24, >= 5.1, < 5.1.12, >= 5.2, < 5.2.67.1 HIGH

An issue was discovered in Django 4.2 before 4.2.24, 5.1 before 5.1.12, and 5.2 before 5.2.6. FilteredRelation is subject to SQL injection in column aliases, using a suitably crafted dictionary, with dictionary expansion, as the **kwargs passed QuerySet.annotate() or QuerySet.alias().

>= 4.2, < 4.2.23, >= 5.1, < 5.1.11, >= 5.2, < 5.2.34 MEDIUM

An issue was discovered in Django 5.2 before 5.2.3, 5.1 before 5.1.11, and 4.2 before 4.2.23. Internal HTTP response logging does not escape request.path, which allows remote attackers to potentially manipulate log output via crafted URLs. This may lead to log injection or forgery when logs are viewed in terminals or processed by external systems.

>= 4.2.0, < 4.2.21, >= 5.1, < 5.1.9, = 5.25.3 MEDIUM

An issue was discovered in Django 4.2 before 4.2.21, 5.1 before 5.1.9, and 5.2 before 5.2.1. The django.utils.html.strip_tags() function is vulnerable to a potential denial-of-service (slow performance) when processing inputs containing large sequences of incomplete HTML tags. The template filter striptags is also vulnerable, because it is built on top of strip_tags().

>= 5.0, < 5.0.14, >= 5.1, < 5.1.85.8 MEDIUM

An issue was discovered in Django 5.1 before 5.1.8 and 5.0 before 5.0.14. The NFKC normalization is slow on Windows. As a consequence, django.contrib.auth.views.LoginView, django.contrib.auth.views.LogoutView, and django.views.i18n.set_language are subject to a potential denial-of-service attack via certain inputs with a very large number of Unicode characters.

>= 4.2, < 4.2.20, >= 5.0, < 5.0.13, >= 5.1, < 5.1.75 MEDIUM

An issue was discovered in Django 5.1 before 5.1.7, 5.0 before 5.0.13, and 4.2 before 4.2.20. The django.utils.text.wrap() method and wordwrap template filter are subject to a potential denial-of-service attack when used with very long strings.

>= 4.2, < 4.2.18, >= 5.0, < 5.0.11, >= 5.1, < 5.1.55.8 MEDIUM

An issue was discovered in Django 5.1 before 5.1.5, 5.0 before 5.0.11, and 4.2 before 4.2.18. Lack of upper-bound limit enforcement in strings passed when performing IPv6 validation could lead to a potential denial-of-service attack. The undocumented and private functions clean_ipv6_address and is_valid_ipv6_address are vulnerable, as is the django.forms.GenericIPAddressField form field. (The django.db.models.GenericIPAddressField model field is not affected.)

>= 4.2, < 4.2.17, >= 5.0, < 5.0.10, >= 5.1, < 5.1.49.8 CRITICAL

An issue was discovered in Django 5.1 before 5.1.4, 5.0 before 5.0.10, and 4.2 before 4.2.17. Direct usage of the django.db.models.fields.json.HasKey lookup, when an Oracle database is used, is subject to SQL injection if untrusted data is used as an lhs value. (Applications that use the jsonfield.has_key lookup via __ are unaffected.)

>= 4.2, < 4.2.17, >= 5.0, < 5.0.10, >= 5.1, < 5.1.47.5 HIGH

An issue was discovered in Django 5.1 before 5.1.4, 5.0 before 5.0.10, and 4.2 before 4.2.17. The strip_tags() method and striptags template filter are subject to a potential denial-of-service attack via certain inputs containing large sequences of nested incomplete HTML entities.

>= 5.0, < 5.0.9, >= 4.2.0, < 4.2.16, = 5.15.3 MEDIUM

An issue was discovered in Django v5.1.1, v5.0.9, and v4.2.16. The django.contrib.auth.forms.PasswordResetForm class, when used in a view implementing password reset flows, allows remote attackers to enumerate user e-mail addresses by sending password reset requests and observing the outcome (only when e-mail sending is consistently failing).

>= 5.0, < 5.0.9, >= 4.2.0, < 4.2.16, = 5.17.5 HIGH

An issue was discovered in Django 5.1 before 5.1.1, 5.0 before 5.0.9, and 4.2 before 4.2.16. The urlize() and urlizetrunc() template filters are subject to a potential denial-of-service attack via very large inputs with a specific sequence of characters.

>= 4.2, < 4.2.15, >= 5.0, < 5.0.87.5 HIGH

An issue was discovered in Django 5.0 before 5.0.8 and 4.2 before 4.2.15. The floatformat template filter is subject to significant memory consumption when given a string representation of a number in scientific notation with a large exponent.

>= 4.2, < 4.2.15, >= 5.0, < 5.0.87.3 HIGH

An issue was discovered in Django 5.0 before 5.0.8 and 4.2 before 4.2.15. QuerySet.values() and values_list() methods on models with a JSONField are subject to SQL injection in column aliases via a crafted JSON object key as a passed *arg.

>= 4.2, < 4.2.15, >= 5.0, < 5.0.87.5 HIGH

An issue was discovered in Django 5.0 before 5.0.8 and 4.2 before 4.2.15. The urlize and urlizetrunc template filters, and the AdminURLFieldWidget widget, are subject to a potential denial-of-service attack via certain inputs with a very large number of Unicode characters.

>= 4.2, < 4.2.15, >= 5.0, < 5.0.87.5 HIGH

An issue was discovered in Django 5.0 before 5.0.8 and 4.2 before 4.2.15. The urlize() and urlizetrunc() template filters are subject to a potential denial-of-service attack via very large inputs with a specific sequence of characters.

>= 4.2, < 4.2.14, >= 5.0, < 5.0.77.5 HIGH

An issue was discovered in Django 4.2 before 4.2.14 and 5.0 before 5.0.7. urlize and urlizetrunc were subject to a potential denial of service attack via certain inputs with a very large number of brackets.

>= 4.2, < 4.2.14, >= 5.0, < 5.0.74.3 MEDIUM

An issue was discovered in Django 5.0 before 5.0.7 and 4.2 before 4.2.14. Derived classes of the django.core.files.storage.Storage base class, when they override generate_filename() without replicating the file-path validations from the parent class, potentially allow directory traversal via certain inputs during a save() call. (Built-in Storage sub-classes are unaffected.)

>= 4.2, < 4.2.14, >= 5.0, < 5.0.75.3 MEDIUM

An issue was discovered in Django 5.0 before 5.0.7 and 4.2 before 4.2.14. The django.contrib.auth.backends.ModelBackend.authenticate() method allows remote attackers to enumerate users via a timing attack involving login requests for users with an unusable password.

>= 4.2, < 4.2.14, >= 5.0, < 5.0.77.5 HIGH

An issue was discovered in Django 5.0 before 5.0.7 and 4.2 before 4.2.14. get_supported_language_variant() was subject to a potential denial-of-service attack when used with very long strings containing specific characters.

>= 3.2, < 3.2.25, >= 4.2, < 4.2.11, >= 5.0, < 5.0.35.3 MEDIUM

In Django 3.2 before 3.2.25, 4.2 before 4.2.11, and 5.0 before 5.0.3, the django.utils.text.Truncator.words() method (with html=True) and the truncatewords_html template filter are subject to a potential regular expression denial-of-service attack via a crafted string. NOTE: this issue exists because of an incomplete fix for CVE-2019-14232 and CVE-2023-43665.

>= 5.0, < 5.0.2, >= 3.2, < 3.2.24, >= 4.2, < 4.2.107.5 HIGH

An issue was discovered in Django 3.2 before 3.2.24, 4.2 before 4.2.10, and Django 5.0 before 5.0.2. The intcomma template filter was subject to a potential denial-of-service attack when used with very long strings.

>= 4.2, < 4.2.6, >= 4.1, < 4.1.12, >= 3.2, < 3.2.227.5 HIGH

In Django 3.2 before 3.2.22, 4.1 before 4.1.12, and 4.2 before 4.2.6, the django.utils.text.Truncator chars() and words() methods (when used with html=True) are subject to a potential DoS (denial of service) attack via certain inputs with very long, potentially malformed HTML text. The chars() and words() methods are used to implement the truncatechars_html and truncatewords_html template filters, which are thus also vulnerable. NOTE: this issue exists because of an incomplete fix for CVE-2019-14232.

>= 4.2, < 4.2.5, >= 4.1, < 4.1.11, >= 3.2, < 3.2.217.5 HIGH

In Django 3.2 before 3.2.21, 4.1 before 4.1.11, and 4.2 before 4.2.5, django.utils.encoding.uri_to_iri() is subject to a potential DoS (denial of service) attack via certain inputs with a very large number of Unicode characters.

>= 4.2., < 4.2.7, >= 4.1, < 4.1.13, >= 3.2, < 3.2.237.5 HIGH

An issue was discovered in Django 3.2 before 3.2.23, 4.1 before 4.1.13, and 4.2 before 4.2.7. The NFKC normalization is slow on Windows. As a consequence, django.contrib.auth.forms.UsernameField is subject to a potential DoS (denial of service) attack via certain inputs with a very large number of Unicode characters.

>= 4.2, < 4.2.3, >= 4.0, < 4.1.10, >= 3.2, < 3.2.207.5 HIGH

In Django 3.2 before 3.2.20, 4 before 4.1.10, and 4.2 before 4.2.3, EmailValidator and URLValidator are subject to a potential ReDoS (regular expression denial of service) attack via a very large number of domain name labels of emails and URLs.

= 4.2, >= 4.0, < 4.1.9, >= 3.2, < 3.2.199.8 CRITICAL

In Django 3.2 before 3.2.19, 4.x before 4.1.9, and 4.2 before 4.2.1, it was possible to bypass validation when using one form field to upload multiple files. This multiple upload has never been supported by forms.FileField or forms.ImageField (only the last uploaded file was validated). However, Django's "Uploading multiple files" documentation suggested otherwise.

>= 3.2, < 3.2.18, >= 4.0, < 4.0.10, >= 4.1, < 4.1.77.5 HIGH

An issue was discovered in the Multipart Request Parser in Django 3.2 before 3.2.18, 4.0 before 4.0.10, and 4.1 before 4.1.7. Passing certain inputs (e.g., an excessive number of parts) to multipart forms could result in too many open files or memory exhaustion, and provided a potential vector for a denial-of-service attack.

>= 4.1, < 4.1.6, >= 4.0, < 4.0.9, >= 3.2, < 3.2.177.5 HIGH

In Django 3.2 before 3.2.17, 4.0 before 4.0.9, and 4.1 before 4.1.6, the parsed values of Accept-Language headers are cached in order to avoid repetitive parsing. This leads to a potential denial-of-service vector via excessive memory usage if the raw value of Accept-Language headers is very large.

>= 3.2, < 3.2.16, >= 4.1, < 4.1.2, >= 4.0, < 4.0.87.5 HIGH

In Django 3.2 before 3.2.16, 4.0 before 4.0.8, and 4.1 before 4.1.2, internationalized URLs were subject to a potential denial of service attack via the locale parameter, which is treated as a regular expression.

>= 4.0, < 4.0.7, >= 3.2, < 3.2.158.8 HIGH

An issue was discovered in the HTTP FileResponse class in Django 3.2 before 3.2.15 and 4.0 before 4.0.7. An application is vulnerable to a reflected file download (RFD) attack that sets the Content-Disposition header of a FileResponse when the filename is derived from user-supplied input.

>= 4.0, < 4.0.6, >= 3.2, < 3.2.149.8 CRITICAL7.5 HIGH

An issue was discovered in Django 3.2 before 3.2.14 and 4.0 before 4.0.6. The Trunc() and Extract() database functions are subject to SQL injection if untrusted data is used as a kind/lookup_name value. Applications that constrain the lookup name and kind choice to a known safe list are unaffected.

>= 4.0, < 4.0.4, >= 3.2, < 3.2.13, >= 2.2, < 2.2.289.8 CRITICAL7.5 HIGH

A SQL injection issue was discovered in QuerySet.explain() in Django 2.2 before 2.2.28, 3.2 before 3.2.13, and 4.0 before 4.0.4. This occurs by passing a crafted dictionary (with dictionary expansion) as the **options argument, and placing the injection payload in an option name.

>= 4.0, < 4.0.4, >= 3.2, < 3.2.13, >= 2.2, < 2.2.289.8 CRITICAL7.5 HIGH

An issue was discovered in Django 2.2 before 2.2.28, 3.2 before 3.2.13, and 4.0 before 4.0.4. QuerySet.annotate(), aggregate(), and extra() methods are subject to SQL injection in column aliases via a crafted dictionary (with dictionary expansion) as the passed **kwargs.

>= 3.2, < 3.2.12, >= 4.0, < 4.0.2, >= 2.2, < 2.2.276.1 MEDIUM4.3 MEDIUM

The {% debug %} template tag in Django 2.2 before 2.2.27, 3.2 before 3.2.12, and 4.0 before 4.0.2 does not properly encode the current context. This may lead to XSS.

>= 3.2, < 3.2.12, >= 4.0, < 4.0.2, >= 2.2, < 2.2.277.5 HIGH5 MEDIUM

An issue was discovered in MultiPartParser in Django 2.2 before 2.2.27, 3.2 before 3.2.12, and 4.0 before 4.0.2. Passing certain inputs to multipart forms could result in an infinite loop when parsing files.

>= 2.2, < 2.2.26, >= 3.2, < 3.2.11, >= 4.0, < 4.0.15.3 MEDIUM5 MEDIUM

Storage.save in Django 2.2 before 2.2.26, 3.2 before 3.2.11, and 4.0 before 4.0.1 allows directory traversal if crafted filenames are directly passed to it.

>= 2.2, < 2.2.26, >= 3.2, < 3.2.11, >= 4.0, < 4.0.17.5 HIGH5 MEDIUM

An issue was discovered in Django 2.2 before 2.2.26, 3.2 before 3.2.11, and 4.0 before 4.0.1. Due to leveraging the Django Template Language's variable resolution logic, the dictsort template filter was potentially vulnerable to information disclosure, or an unintended method call, if passed a suitably crafted key.

>= 2.2, < 2.2.26, >= 3.2, < 3.2.11, >= 4.0, < 4.0.17.5 HIGH5 MEDIUM

An issue was discovered in Django 2.2 before 2.2.26, 3.2 before 3.2.11, and 4.0 before 4.0.1. UserAttributeSimilarityValidator incurred significant overhead in evaluating a submitted password that was artificially large in relation to the comparison values. In a situation where access to user registration was unrestricted, this provided a potential vector for a denial-of-service attack.

>= 2.2, < 2.2.25, >= 3.1, < 3.1.14, >= 3.2, < 3.2.107.3 HIGH7.5 HIGH

In Django 2.2 before 2.2.25, 3.1 before 3.1.14, and 3.2 before 3.2.10, HTTP requests for URLs with trailing newlines could bypass upstream access control based on URL paths.

>= 3.2, < 3.2.5, >= 3.1, < 3.1.139.8 CRITICAL7.5 HIGH

Django 3.1.x before 3.1.13 and 3.2.x before 3.2.5 allows QuerySet.order_by SQL injection if order_by is untrusted input from a client of a web application.

>= 3.2, < 3.2.4, >= 3.0, < 3.1.12, >= 2.2, < 2.2.247.5 HIGH5 MEDIUM

In Django 2.2 before 2.2.24, 3.x before 3.1.12, and 3.2 before 3.2.4, URLValidator, validate_ipv4_address, and validate_ipv46_address do not prohibit leading zero characters in octal literals. This may allow a bypass of access control that is based on IP addresses. (validate_ipv4_address and validate_ipv46_address are unaffected with Python 3.9.5+..) .

>= 3.2.0, < 3.2.4, >= 3.0.0, < 3.1.12, < 2.2.244.9 MEDIUM4 MEDIUM

Django before 2.2.24, 3.x before 3.1.12, and 3.2.x before 3.2.4 has a potential directory traversal via django.contrib.admindocs. Staff members could use the TemplateDetailView view to check the existence of arbitrary files. Additionally, if (and only if) the default admindocs templates have been customized by application developers to also show file contents, then not only the existence but also the file contents would have been exposed. In other words, there is directory traversal outside of the template root directories.

>= 2.2, < 2.2.22, >= 3.1, < 3.1.10, >= 3.2, < 3.2.26.1 MEDIUM4.3 MEDIUM

In Django 2.2 before 2.2.22, 3.1 before 3.1.10, and 3.2 before 3.2.2 (with Python 3.9.5+), URLValidator does not prohibit newlines and tabs (unless the URLField form field is used). If an application uses values with newlines in an HTTP response, header injection can occur. Django itself is unaffected because HttpResponse prohibits newlines in HTTP headers.

>= 3.2, < 3.2.1, >= 3.1, < 3.1.9, >= 2.2, < 2.2.217.5 HIGH5 MEDIUM

In Django 2.2 before 2.2.21, 3.1 before 3.1.9, and 3.2 before 3.2.1, MultiPartParser, UploadedFile, and FieldFile allowed directory traversal via uploaded files with suitably crafted file names.

>= 3.1, < 3.1.8, >= 3.0, < 3.0.14, >= 2.2, < 2.2.205.3 MEDIUM5 MEDIUM

In Django 2.2 before 2.2.20, 3.0 before 3.0.14, and 3.1 before 3.1.8, MultiPartParser allowed directory traversal via uploaded files with suitably crafted file names. Built-in upload handlers were not affected by this vulnerability.

>= 3.1, < 3.1.7, >= 3.0, < 3.0.13, >= 2.2, < 2.2.195.9 MEDIUM4 MEDIUM

The package python/cpython from 0 and before 3.6.13, from 3.7.0 and before 3.7.10, from 3.8.0 and before 3.8.8, from 3.9.0 and before 3.9.2 are vulnerable to Web Cache Poisoning via urllib.parse.parse_qsl and urllib.parse.parse_qs by using a vector called parameter cloaking. When the attacker can separate query parameters using a semicolon (;), they can cause a difference in the interpretation of the request between the proxy (running with default configuration) and the server. This can result in malicious requests being cached as completely safe ones, as the proxy would usually not see the semicolon as a separator, and therefore would not include it in a cache key of an unkeyed parameter.

>= 3.1, < 3.1.6, >= 3.0, < 3.0.12, >= 2.2, < 2.2.185.3 MEDIUM5 MEDIUM

In Django 2.2 before 2.2.18, 3.0 before 3.0.12, and 3.1 before 3.1.6, the django.utils.archive.extract method (used by "startapp --template" and "startproject --template") allows directory traversal via an archive with absolute paths or relative paths with dot segments.

>= 3.1, < 3.1.1, >= 3.0, < 3.0.10, >= 2.2, < 2.2.167.5 HIGH5 MEDIUM

An issue was discovered in Django 2.2 before 2.2.16, 3.0 before 3.0.10, and 3.1 before 3.1.1 (when Python 3.7+ is used). FILE_UPLOAD_DIRECTORY_PERMISSIONS mode was not applied to intermediate-level directories created in the process of uploading files. It was also not applied to intermediate-level collected static directories when using the collectstatic management command.

>= 3.1, < 3.1.1, >= 3.0, < 3.0.10, >= 2.2, < 2.2.167.5 HIGH5 MEDIUM

An issue was discovered in Django 2.2 before 2.2.16, 3.0 before 3.0.10, and 3.1 before 3.1.1 (when Python 3.7+ is used). The intermediate-level directories of the filesystem cache had the system's standard umask rather than 0o077.

>= 3.0, < 3.0.7, >= 2.2, < 2.2.136.1 MEDIUM4.3 MEDIUM

An issue was discovered in Django 2.2 before 2.2.13 and 3.0 before 3.0.7. Query parameters generated by the Django admin ForeignKeyRawIdWidget were not properly URL encoded, leading to a possibility of an XSS attack.

>= 3.0, < 3.0.7, >= 2.2, < 2.2.135.9 MEDIUM4.3 MEDIUM

An issue was discovered in Django 2.2 before 2.2.13 and 3.0 before 3.0.7. In cases where a memcached backend does not perform key validation, passing malformed cache keys could result in a key collision, and potential data leakage.

>= 3.0, < 3.0.4, >= 2.2, < 2.2.11, >= 1.11, < 1.11.298.8 HIGH6.5 MEDIUM

Django 1.11 before 1.11.29, 2.2 before 2.2.11, and 3.0 before 3.0.4 allows SQL Injection if untrusted data is used as a tolerance parameter in GIS functions and aggregates on Oracle. By passing a suitably crafted tolerance to GIS functions and aggregates on Oracle, it was possible to break escaping and inject malicious SQL.

>= 3.0, < 3.0.3, >= 2.2, < 2.2.10, >= 1.11, < 1.11.289.8 CRITICAL7.5 HIGH

Django 1.11 before 1.11.28, 2.2 before 2.2.10, and 3.0 before 3.0.3 allows SQL Injection if untrusted data is used as a StringAgg delimiter (e.g., in Django applications that offer downloads of data as a series of rows with a user-specified column delimiter). By passing a suitably crafted delimiter to a contrib.postgres.aggregates.StringAgg instance, it was possible to break escaping and inject malicious SQL.

>= 2.2, < 2.2.9, = 3.0, < 1.11.279.8 CRITICAL5 MEDIUM

Django before 1.11.27, 2.x before 2.2.9, and 3.x before 3.0.1 allows account takeover. A suitably crafted email address (that is equal to an existing user's email address after case transformation of Unicode characters) would allow an attacker to be sent a password reset token for the matched user account. (One mitigation in the new releases is to send password reset tokens only to the registered user email address.)

>= 2.1, < 2.1.15, >= 2.2, < 2.2.86.5 MEDIUM4 MEDIUM

Django 2.1 before 2.1.15 and 2.2 before 2.2.8 allows unintended model editing. A Django model admin displaying inline related models, where the user has view-only permissions to a parent model but edit permissions to the inline model, would be presented with an editing UI, allowing POST requests, for updating the inline model. Directly editing the view-only parent model was not possible, but the parent model's save() method was called, triggering potential side effects, and causing pre and post-save signal handlers to be invoked. (To resolve this, the Django admin is adjusted to require edit permissions on the parent model in order for inline models to be editable.)

>= 2.2, < 2.2.4, >= 2.1, < 2.1.11, >= 1.11, < 1.11.237.5 HIGH

An issue was discovered in Django 1.11.x before 1.11.23, 2.1.x before 2.1.11, and 2.2.x before 2.2.4. Due to an error in shallow key transformation, key and index lookups for django.contrib.postgres.fields.JSONField, and key lookups for django.contrib.postgres.fields.HStoreField, were subject to SQL injection. This could, for example, be exploited via crafted use of "OR 1=1" in a key or index name to return all records, using a suitably crafted dictionary, with dictionary expansion, as the **kwargs passed to the QuerySet.filter() function.

>= 2.2, < 2.2.4, >= 2.1, < 2.1.11, >= 1.11, < 1.11.235 MEDIUM

An issue was discovered in Django 1.11.x before 1.11.23, 2.1.x before 2.1.11, and 2.2.x before 2.2.4. If passed certain inputs, django.utils.encoding.uri_to_iri could lead to significant memory usage due to a recursion when repercent-encoding invalid UTF-8 octet sequences.

>= 2.2, < 2.2.4, >= 2.1, < 2.1.11, >= 1.11, < 1.11.235 MEDIUM

An issue was discovered in Django 1.11.x before 1.11.23, 2.1.x before 2.1.11, and 2.2.x before 2.2.4. Due to the behaviour of the underlying HTMLParser, django.utils.html.strip_tags would be extremely slow to evaluate certain inputs containing large sequences of nested incomplete HTML entities.

>= 2.2, < 2.2.4, >= 2.1, < 2.1.11, >= 1.11, < 1.11.237.5 HIGH5 MEDIUM

An issue was discovered in Django 1.11.x before 1.11.23, 2.1.x before 2.1.11, and 2.2.x before 2.2.4. If django.utils.text.Truncator's chars() and words() methods were passed the html=True argument, they were extremely slow to evaluate certain inputs due to a catastrophic backtracking vulnerability in a regular expression. The chars() and words() methods are used to implement the truncatechars_html and truncatewords_html template filters, which were thus vulnerable.

>= 1.11, < 1.11.22, >= 2.1, < 2.1.10, >= 2.2, < 2.2.35 MEDIUM

An issue was discovered in Django 1.11 before 1.11.22, 2.1 before 2.1.10, and 2.2 before 2.2.3. An HTTP request is not redirected to HTTPS when the SECURE_PROXY_SSL_HEADER and SECURE_SSL_REDIRECT settings are used, and the proxy connects to Django via HTTPS. In other words, django.http.HttpRequest.scheme has incorrect behavior when a client uses HTTP.

>= 2.2, < 2.2.2, >= 2.1, < 2.1.9, >= 1.11, < 1.11.214.3 MEDIUM

An issue was discovered in Django 1.11 before 1.11.21, 2.1 before 2.1.9, and 2.2 before 2.2.2. The clickable Current URL value displayed by the AdminURLFieldWidget displays the provided value without validating it as a safe URL. Thus, an unvalidated value stored in the database, or a value provided as a URL query parameter payload, could result in an clickable JavaScript link.

>= 1.11.0, < 1.11.19, >= 2.0.0, < 2.0.11, >= 2.1.0, < 2.1.65 MEDIUM

Django 1.11.x before 1.11.19, 2.0.x before 2.0.11, and 2.1.x before 2.1.6 allows Uncontrolled Memory Consumption via a malicious attacker-supplied value to the django.utils.numberformat.format() function.

>= 1.11, < 1.11.18, >= 2.0, < 2.0.10, >= 2.1, < 2.1.54.3 MEDIUM

In Django 1.11.x before 1.11.18, 2.0.x before 2.0.10, and 2.1.x before 2.1.5, an Improper Neutralization of Special Elements in Output Used by a Downstream Component issue exists in django.views.defaults.page_not_found(), leading to content spoofing (in a 404 error page) if a user fails to recognize that a crafted URL has malicious content.

>= 2.1, < 2.1.24 MEDIUM

An issue was discovered in Django 2.1 before 2.1.2, in which unprivileged users can read the password hashes of arbitrary accounts. The read-only password widget used by the Django Admin to display an obfuscated password hash was bypassed if a user has only the "view" permission (new in Django 2.1), resulting in display of the entire password hash to those users. This may result in a vulnerability for sites with legacy user accounts using insecure hashes.

>= 2.0, < 2.0.8, >= 1.11, < 1.11.155.8 MEDIUM

django.middleware.common.CommonMiddleware in Django 1.11.x before 1.11.15 and 2.0.x before 2.0.8 has an Open Redirect.

>= 1.8, < 1.8.19, >= 1.11, < 1.11.11, >= 2.0, < 2.0.35 MEDIUM

An issue was discovered in Django 2.0 before 2.0.3, 1.11 before 1.11.11, and 1.8 before 1.8.19. If django.utils.text.Truncator's chars() and words() methods were passed the html=True argument, they were extremely slow to evaluate certain inputs due to a catastrophic backtracking vulnerability in a regular expression. The chars() and words() methods are used to implement the truncatechars_html and truncatewords_html template filters, which were thus vulnerable.

>= 1.8, < 1.8.19, >= 1.11, < 1.11.11, >= 2.0, < 2.0.35 MEDIUM

An issue was discovered in Django 2.0 before 2.0.3, 1.11 before 1.11.11, and 1.8 before 1.8.19. The django.utils.html.urlize() function was extremely slow to evaluate certain inputs due to catastrophic backtracking vulnerabilities in two regular expressions (only one regular expression for Django 1.8.x). The urlize() function is used to implement the urlize and urlizetrunc template filters, which were thus vulnerable.

= 2.0, = 2.0.1, = 1.11.8, = 1.11.95 MEDIUM

django.contrib.auth.forms.AuthenticationForm in Django 2.0 before 2.0.2, and 1.11.8 and 1.11.9, allows remote attackers to obtain potentially sensitive information by leveraging data exposure from the confirm_login_allowed() method, as demonstrated by discovering whether a user account is inactive.

= 1.10.0, = 1.11.2, = 1.11.1, = 1.10.3, = 1.11.4, = 1.10.1, = 1.10.5, = 1.10.7, = 1.10.2, = 1.11.0, = 1.10.4, = 1.11.3, = 1.10.64.3 MEDIUM

In Django 1.10.x before 1.10.8 and 1.11.x before 1.11.5, HTML autoescaping was disabled in a portion of the template for the technical 500 debug page. Given the right circumstances, this allowed a cross-site scripting attack. This vulnerability shouldn't affect most production sites since you shouldn't run with "DEBUG = True" (which makes this page accessible) in your production settings.

= 1.10.0, = 1.9, = 1.8.0, = 1.8.15, = 1.8.2, = 1.9.6, = 1.10.3, = 1.8.14, = 1.8.3, = 1.8.11, = 1.9.5, = 1.10.1, = 1.10.2, = 1.8.4, = 1.8.12, = 1.8.1, = 1.8.9, = 1.8.16, = 1.9.12, = 1.8.7, = 1.9.11, = 1.10.5, = 1.9.9, = 1.8.10, = 1.9.4, = 1.9.1, = 1.8.5, = 1.8.13, = 1.9.7, = 1.10.4, = 1.9.2, = 1.9.8, = 1.8.8, = 1.8.17, = 1.9.3, = 1.8.6, = 1.9.10, = 1.10.65.8 MEDIUM

Django 1.10 before 1.10.7, 1.9 before 1.9.13, and 1.8 before 1.8.18 relies on user input in some cases to redirect the user to an "on success" URL. The security check for these redirects (namely ``django.utils.http.is_safe_url()``) considered some numeric URLs "safe" when they shouldn't be, aka an open redirect vulnerability. Also, if a developer relies on ``is_safe_url()`` to provide safe redirect targets and puts such a URL into a link, they could suffer from an XSS attack.

= 1.10.0, = 1.9, = 1.8.0, = 1.8.15, = 1.8.2, = 1.9.6, = 1.10.3, = 1.8.14, = 1.8.3, = 1.8.11, = 1.9.5, = 1.10.1, = 1.10.2, = 1.8.4, = 1.8.12, = 1.8.1, = 1.8.9, = 1.8.16, = 1.9.12, = 1.8.7, = 1.9.11, = 1.10.5, = 1.9.9, = 1.8.10, = 1.9.4, = 1.9.1, = 1.8.5, = 1.8.13, = 1.9.7, = 1.10.4, = 1.9.2, = 1.9.8, = 1.8.8, = 1.8.17, = 1.9.3, = 1.8.6, = 1.9.10, = 1.10.65.8 MEDIUM

A maliciously crafted URL to a Django (1.10 before 1.10.7, 1.9 before 1.9.13, and 1.8 before 1.8.18) site using the ``django.views.static.serve()`` view could redirect to any other domain, aka an open redirect vulnerability.

= 1.8.15, = 1.8.2, = 1.8.14, = 1.8.1, = 1.8.7, = 1.8.9, = 1.8.11, = 1.8.3, = 1.8.12, = 1.8.10, = 1.8.4, = 1.8.5, = 1.8.13, = 1.8, = 1.8.8, = 1.8.6, = 1.10, = 1.10.1, = 1.10.2, = 1.9.6, = 1.9.9, = 1.9.5, = 1.9.3, = 1.9.4, = 1.9.7, = 1.9.1, = 1.9, = 1.9.8, = 1.9.10, = 1.9.26.8 MEDIUM

Django before 1.8.x before 1.8.16, 1.9.x before 1.9.11, and 1.10.x before 1.10.3, when settings.DEBUG is True, allow remote attackers to conduct DNS rebinding attacks by leveraging failure to validate the HTTP Host header against settings.ALLOWED_HOSTS.

= 1.10, = 1.10.1, = 1.10.2, = 1.9.6, = 1.9.9, = 1.9.5, = 1.9.3, = 1.9.4, = 1.9.7, = 1.9.1, = 1.9, = 1.9.8, = 1.9.10, = 1.9.2, = 1.8.15, = 1.8.2, = 1.8.14, = 1.8.1, = 1.8.7, = 1.8.9, = 1.8.11, = 1.8.3, = 1.8.12, = 1.8.6, = 1.8.8, = 1.8, = 1.8.10, = 1.8.4, = 1.8.5, = 1.8.137.5 HIGH

Django 1.8.x before 1.8.16, 1.9.x before 1.9.11, and 1.10.x before 1.10.3 use a hardcoded password for a temporary database user created when running tests with an Oracle database, which makes it easier for remote attackers to obtain access to the database server by leveraging failure to manually specify a password in the database settings TEST dictionary.

= 1.9.6, = 1.9.9, <= 1.8.14, = 1.9.0, = 1.9.5, = 1.9.3, = 1.9.4, = 1.9.7, = 1.9.1, = 1.9.2, = 1.9.85 MEDIUM

The cookie parsing code in Django before 1.8.15 and 1.9.x before 1.9.10, when used on a site with Google Analytics, allows remote attackers to bypass an intended CSRF protection mechanism by setting arbitrary cookies.

= 1.10, = 1.9.6, = 1.9.0, = 1.9.5, <= 1.8.13, = 1.9.3, = 1.9.4, = 1.9.7, = 1.9.1, = 1.9, = 1.9.24.3 MEDIUM

Cross-site scripting (XSS) vulnerability in the dismissChangeRelatedObjectPopup function in contrib/admin/static/admin/js/admin/RelatedObjectLookups.js in Django before 1.8.14, 1.9.x before 1.9.8, and 1.10.x before 1.10rc1 allows remote attackers to inject arbitrary web script or HTML via vectors involving unsafe usage of Element.innerHTML.

= 1.8.9, = 1.9.1, = 1.9, = 1.9.22.6 LOW

The password hasher in contrib/auth/hashers.py in Django before 1.8.10 and 1.9.x before 1.9.3 allows remote attackers to enumerate users via a timing attack involving login requests.

= 1.8.9, = 1.9.1, = 1.9, = 1.9.24.3 MEDIUM

The utils.http.is_safe_url function in Django before 1.8.10 and 1.9.x before 1.9.3 allows remote attackers to redirect users to arbitrary web sites and conduct phishing attacks or possibly conduct cross-site scripting (XSS) attacks via a URL containing basic authentication, as demonstrated by http://mysite.example.com\@attacker.com.

= 1.9.1, = 1.96 MEDIUM

Django 1.9.x before 1.9.2, when ModelAdmin.save_as is set to True, allows remote authenticated users to bypass intended access restrictions and create ModelAdmin objects via the "Save as New" option when editing objects and leveraging the "change" permission.

= 1.8.2, = 1.9.0, = 1.8.1, = 1.8.3, = 1.8.4, = 1.8.0, <= 1.7.10, = 1.8.6, = 1.8.55 MEDIUM

The get_format function in utils/formats.py in Django before 1.7.x before 1.7.11, 1.8.x before 1.8.7, and 1.9.x before 1.9rc2 might allow remote attackers to obtain sensitive application secrets via a settings key in place of a date/time format setting, as demonstrated by SECRET_KEY.

= 1.4.12, = 1.7.5, = 1.7.9, = 1.7.3, = 1.4.9, = 1.8.2, = 1.7, = 1.8, = 1.8.0, = 1.7.6, = 1.7.7, = 1.4.13, = 1.4.5, = 1.4.6, = 1.7.4, = 1.4.10, = 1.4.11, = 1.4.4, = 1.7.2, = 1.4.2, = 1.4.20, = 1.8.1, = 1.8.3, = 1.7.8, = 1.4.14, = 1.4.21, = 1.4, = 1.4.1, = 1.7.1, = 1.4.17, = 1.4.19, = 1.4.7, = 1.4.85 MEDIUM

The (1) contrib.sessions.backends.base.SessionBase.flush and (2) cache_db.SessionStore.flush functions in Django 1.7.x before 1.7.10, 1.4.x before 1.4.22, and possibly other versions create empty sessions in certain circumstances, which allows remote attackers to cause a denial of service (session store consumption) via unspecified vectors.

= 1.4.12, = 1.7.5, = 1.7.9, = 1.7.3, = 1.4.9, = 1.8.2, = 1.7, = 1.8.0, = 1.8.1, = 1.7.7, = 1.7.8, = 1.4.13, = 1.4.5, = 1.4.6, = 1.8.3, = 1.7.2, = 1.4.10, = 1.4.2, = 1.4.20, = 1.8, = 1.7.4, = 1.7.6, = 1.4.11, = 1.4.4, = 1.4.14, = 1.7.1, = 1.4, = 1.4.17, = 1.4.19, = 1.4.7, = 1.4.8, = 1.4.1, = 1.4.215 MEDIUM

contrib.sessions.middleware.SessionMiddleware in Django 1.8.x before 1.8.4, 1.7.x before 1.7.10, 1.4.x before 1.4.22, and possibly other versions allows remote attackers to cause a denial of service (session store consumption or session record removal) via a large number of requests to contrib.auth.views.logout, which triggers the creation of an empty session record.

= 1.8.2, = 1.8.1, = 1.8.07.8 HIGH

validators.URLValidator in Django 1.8.x before 1.8.3 allows remote attackers to cause a denial of service (CPU consumption) via unspecified vectors.

= 1.7.5, = 1.5, = 1.5.7, = 1.5.1, = 1.7.9, = 1.7.3, = 1.6, = 1.6.7, = 1.8.2, = 1.5.3, = 1.6.5, = 1.7, = 1.5.4, = 1.5.5, = 1.6.6, = 1.7.7, = 1.5.10, = 1.6.8, = 1.7.2, = 1.8, = 1.5.12, = 1.7.4, = 1.8.1, <= 1.4.20, = 1.5.2, = 1.6.4, = 1.7.6, = 1.7.8, = 1.5.6, = 1.5.8, = 1.6.1, = 1.6.10, = 1.6.9, = 1.7.1, = 1.5.11, = 1.5.9, = 1.6.2, = 1.6.3, = 1.8.04.3 MEDIUM

Django before 1.4.21, 1.5.x through 1.6.x, 1.7.x before 1.7.9, and 1.8.x before 1.8.3 uses an incorrect regular expression, which allows remote attackers to inject arbitrary headers and conduct HTTP response splitting attacks via a newline character in an (1) email message to the EmailValidator, a (2) URL to the URLValidator, or unspecified vectors to the (3) validate_ipv4_address or (4) validate_slug validator.

= 1.7.5, = 1.5, = 1.5.7, = 1.5.1, = 1.7.9, = 1.7.3, = 1.6, = 1.6.7, = 1.8.2, = 1.7, = 1.7.4, = 1.6.6, = 1.5.5, = 1.7.7, = 1.6.5, = 1.5.4, = 1.5.3, = 1.4.20, = 1.8.1, = 1.5.12, = 1.7.2, = 1.6.8, = 1.5.10, = 1.5.6, = 1.7.6, = 1.6.4, = 1.5.2, = 1.7.8, = 1.6.3, = 1.6.2, = 1.5.9, = 1.5.11, = 1.8.0, = 1.7.1, = 1.6.9, = 1.6.10, = 1.6.1, = 1.5.87.8 HIGH

The session backends in Django before 1.4.21, 1.5.x through 1.6.x, 1.7.x before 1.7.9, and 1.8.x before 1.8.3 allows remote attackers to cause a denial of service (session store consumption) via multiple requests with unique session keys.

= 1.8.1, = 1.8.05 MEDIUM

The session.flush function in the cached_db backend in Django 1.8.x before 1.8.2 does not properly flush the session, which allows remote attackers to hijack user sessions via an empty string in the session key.

= 1.7.5, = 1.5, = 1.5.7, = 1.5.1, = 1.7.3, = 1.6, <= 1.4.19, = 1.6.7, = 1.7, = 1.5.10, = 1.6.10, = 1.6.8, = 1.7.2, = 1.6.6, = 1.8.0, = 1.5.5, = 1.6.5, = 1.7.6, = 1.5.3, = 1.5.4, = 1.5.12, = 1.6.3, = 1.7.4, = 1.5.2, = 1.5.11, = 1.6.1, = 1.6.9, = 1.7.1, = 1.5.8, = 1.5.9, = 1.5.6, = 1.6.4, = 1.6.24.3 MEDIUM

The utils.http.is_safe_url function in Django before 1.4.20, 1.5.x, 1.6.x before 1.6.11, 1.7.x before 1.7.7, and 1.8.x before 1.8c1 does not properly validate URLs, which allows remote attackers to conduct cross-site scripting (XSS) attacks via a control character in a URL, as demonstrated by a \x08javascript: URL.

= 1.7.5, = 1.7.3, = 1.6, = 1.6.7, = 1.7, = 1.6.5, = 1.6.10, = 1.6.2, = 1.6.1, = 1.7.4, = 1.6.4, = 1.6.3, = 1.7.1, = 1.7.2, = 1.6.6, = 1.6.9, = 1.6.8, = 1.7.6, = 1.8.05 MEDIUM

The utils.html.strip_tags function in Django 1.6.x before 1.6.11, 1.7.x before 1.7.7, and 1.8.x before 1.8c1, when using certain versions of Python, allows remote attackers to cause a denial of service (infinite loop) by increasing the length of the input string.

<= 1.7.5, = 1.84.3 MEDIUM

Cross-site scripting (XSS) vulnerability in the contents function in admin/helpers.py in Django before 1.7.6 and 1.8 before 1.8b2 allows remote attackers to inject arbitrary web script or HTML via a model attribute in ModelAdmin.readonly_fields, as demonstrated by a @property.

<= 1.4.17, = 1.6.7, = 1.6.5, = 1.6.8, = 1.6.6, = 1.7.2, = 1.6.3, = 1.6, = 1.6.4, = 1.6.1, = 1.6.9, = 1.6.2, = 1.7, = 1.7.15 MEDIUM

ModelMultipleChoiceField in Django 1.6.x before 1.6.10 and 1.7.x before 1.7.3, when show_hidden_initial is set to True, allows remote attackers to cause a denial of service by submitting duplicate values, which triggers a large number of SQL queries.

<= 1.4.17, = 1.6.7, = 1.6.5, = 1.6.8, = 1.6.6, = 1.7.2, = 1.6.3, = 1.6, = 1.6.4, = 1.6.1, = 1.6.9, = 1.6.2, = 1.7, = 1.7.15 MEDIUM

The django.views.static.serve view in Django before 1.4.18, 1.6.x before 1.6.10, and 1.7.x before 1.7.3 reads files an entire line at a time, which allows remote attackers to cause a denial of service (memory consumption) via a long line in a file.

<= 1.4.17, = 1.6.7, = 1.6.5, = 1.6.8, = 1.6.6, = 1.7.2, = 1.6.3, = 1.6, = 1.6.4, = 1.6.2, = 1.7, = 1.7.1, = 1.6.1, = 1.6.94.3 MEDIUM

The django.util.http.is_safe_url function in Django before 1.4.18, 1.6.x before 1.6.10, and 1.7.x before 1.7.3 does not properly handle leading whitespaces, which allows remote attackers to conduct cross-site scripting (XSS) attacks via a crafted URL, related to redirect URLs, as demonstrated by a "\njavascript:" URL.

<= 1.4.17, = 1.6.7, = 1.6.5, = 1.6.8, = 1.6.6, = 1.7.2, = 1.6.3, = 1.6, = 1.6.4, = 1.6.1, = 1.6.2, = 1.6.9, = 1.7, = 1.7.15 MEDIUM

Django before 1.4.18, 1.6.x before 1.6.10, and 1.7.x before 1.7.3 allows remote attackers to spoof WSGI headers by using an _ (underscore) character instead of a - (dash) character in an HTTP header, as demonstrated by an X-Auth_User header.