mirror of
https://github.com/django/django.git
synced 2025-10-27 15:46:10 +00:00
[1.10.x] Fixed CVE-2016-9014 -- Validated Host header when DEBUG=True.
This is a security fix.
This commit is contained in:
@@ -90,14 +90,19 @@ If the ``Host`` header (or ``X-Forwarded-Host`` if
|
||||
list, the :meth:`django.http.HttpRequest.get_host()` method will raise
|
||||
:exc:`~django.core.exceptions.SuspiciousOperation`.
|
||||
|
||||
When :setting:`DEBUG` is ``True`` or when running tests, host validation is
|
||||
disabled; any host will be accepted. Thus it's usually only necessary to set it
|
||||
in production.
|
||||
When :setting:`DEBUG` is ``True`` and ``ALLOWED_HOSTS`` is empty, the host
|
||||
is validated against ``['localhost', '127.0.0.1', '[::1]']``.
|
||||
|
||||
This validation only applies via :meth:`~django.http.HttpRequest.get_host()`;
|
||||
if your code accesses the ``Host`` header directly from ``request.META`` you
|
||||
are bypassing this security protection.
|
||||
|
||||
.. versionchanged:: 1.10.3
|
||||
|
||||
In older versions, ``ALLOWED_HOSTS`` wasn't checked if ``DEBUG=True``.
|
||||
This was also changed in Django 1.9.11 and 1.8.16 to prevent a
|
||||
DNS rebinding attack.
|
||||
|
||||
.. setting:: APPEND_SLASH
|
||||
|
||||
``APPEND_SLASH``
|
||||
|
||||
@@ -20,6 +20,28 @@ the ``manage.py test --keepdb`` option or if the user has an active session
|
||||
|
||||
A randomly generated password is now used for each test run.
|
||||
|
||||
DNS rebinding vulnerability when ``DEBUG=True``
|
||||
===============================================
|
||||
|
||||
Older versions of Django don't validate the ``Host`` header against
|
||||
``settings.ALLOWED_HOSTS`` when ``settings.DEBUG=True``. This makes them
|
||||
vulnerable to a `DNS rebinding attack
|
||||
<http://benmmurphy.github.io/blog/2016/07/11/rails-webconsole-dns-rebinding/>`_.
|
||||
|
||||
While Django doesn't ship a module that allows remote code execution, this is
|
||||
at least a cross-site scripting vector, which could be quite serious if
|
||||
developers load a copy of the production database in development or connect to
|
||||
some production services for which there's no development instance, for
|
||||
example. If a project uses a package like the ``django-debug-toolbar``, then
|
||||
the attacker could execute arbitrary SQL, which could be especially bad if the
|
||||
developers connect to the database with a superuser account.
|
||||
|
||||
``settings.ALLOWED_HOSTS`` is now validated regardless of ``DEBUG``. For
|
||||
convenience, if ``ALLOWED_HOSTS`` is empty and ``DEBUG=True``, the following
|
||||
variations of localhost are allowed ``['localhost', '127.0.0.1', '::1']``. If
|
||||
your local settings file has your production ``ALLOWED_HOSTS`` value, you must
|
||||
now omit it to get those fallback values.
|
||||
|
||||
Bugfixes
|
||||
========
|
||||
|
||||
|
||||
@@ -19,3 +19,25 @@ the ``manage.py test --keepdb`` option or if the user has an active session
|
||||
(such as an attacker's connection).
|
||||
|
||||
A randomly generated password is now used for each test run.
|
||||
|
||||
DNS rebinding vulnerability when ``DEBUG=True``
|
||||
===============================================
|
||||
|
||||
Older versions of Django don't validate the ``Host`` header against
|
||||
``settings.ALLOWED_HOSTS`` when ``settings.DEBUG=True``. This makes them
|
||||
vulnerable to a `DNS rebinding attack
|
||||
<http://benmmurphy.github.io/blog/2016/07/11/rails-webconsole-dns-rebinding/>`_.
|
||||
|
||||
While Django doesn't ship a module that allows remote code execution, this is
|
||||
at least a cross-site scripting vector, which could be quite serious if
|
||||
developers load a copy of the production database in development or connect to
|
||||
some production services for which there's no development instance, for
|
||||
example. If a project uses a package like the ``django-debug-toolbar``, then
|
||||
the attacker could execute arbitrary SQL, which could be especially bad if the
|
||||
developers connect to the database with a superuser account.
|
||||
|
||||
``settings.ALLOWED_HOSTS`` is now validated regardless of ``DEBUG``. For
|
||||
convenience, if ``ALLOWED_HOSTS`` is empty and ``DEBUG=True``, the following
|
||||
variations of localhost are allowed ``['localhost', '127.0.0.1', '::1']``. If
|
||||
your local settings file has your production ``ALLOWED_HOSTS`` value, you must
|
||||
now omit it to get those fallback values.
|
||||
|
||||
@@ -19,3 +19,25 @@ the ``manage.py test --keepdb`` option or if the user has an active session
|
||||
(such as an attacker's connection).
|
||||
|
||||
A randomly generated password is now used for each test run.
|
||||
|
||||
DNS rebinding vulnerability when ``DEBUG=True``
|
||||
===============================================
|
||||
|
||||
Older versions of Django don't validate the ``Host`` header against
|
||||
``settings.ALLOWED_HOSTS`` when ``settings.DEBUG=True``. This makes them
|
||||
vulnerable to a `DNS rebinding attack
|
||||
<http://benmmurphy.github.io/blog/2016/07/11/rails-webconsole-dns-rebinding/>`_.
|
||||
|
||||
While Django doesn't ship a module that allows remote code execution, this is
|
||||
at least a cross-site scripting vector, which could be quite serious if
|
||||
developers load a copy of the production database in development or connect to
|
||||
some production services for which there's no development instance, for
|
||||
example. If a project uses a package like the ``django-debug-toolbar``, then
|
||||
the attacker could execute arbitrary SQL, which could be especially bad if the
|
||||
developers connect to the database with a superuser account.
|
||||
|
||||
``settings.ALLOWED_HOSTS`` is now validated regardless of ``DEBUG``. For
|
||||
convenience, if ``ALLOWED_HOSTS`` is empty and ``DEBUG=True``, the following
|
||||
variations of localhost are allowed ``['localhost', '127.0.0.1', '::1']``. If
|
||||
your local settings file has your production ``ALLOWED_HOSTS`` value, you must
|
||||
now omit it to get those fallback values.
|
||||
|
||||
Reference in New Issue
Block a user