Длинными паролями можно «досить» серверы на Django

15 сентября разработчики фреймворка Django выпустили обновленные версии Django 1.4.8, Django 1.5.4 и Django 1.6 beta 4, чтобы закрыть уязвимость, о которой стало известно за день до этого. В новых версиях Django закрывается уязвимость во фреймворке аутентификации django.contrib.auth, позволяющий осуществлять атаку типа «отказ в обслуживании» (DoS), номер CVE-2013-1443.

Django хранит в базе данных парольные хэши, и они вычисляются каждый раз при попытке пользователя авторизоваться. По умолчанию Django использует стандарт формирования ключа PBKDF2, который осуществляет множество зацепленных вычислений, чтобы максимально усложнить перебор паролей. По этой причине скорость генерации ключа невысока, это вообще один из самых медленных алгоритмов.

Однако, Django не ограничивает длину текстовых паролей, и пароли исключительно большого размера сильно грузят сервер, выполняющий вычисления PBKDF2. Например, пароль длиной в 1 мегабайт нагрузит сервер на 1 минуту, так что один-единственный ддосер способен повалить большой сервер крупной компании, просто загружая произвольные пароли на произвольные учетные записи.

Django используется на таких крупных сайтах, как Instagram, Disqus, Mozilla, The Washington Times, Pinterest и многих других.