КОНЬЯКОВ.ру

Аудит, Разработка, ИБ, Поддержка и SEO сайтов

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

386523 15 сентября разработчики свободного фреймворка Django в срочном порядке выпустили обновленные версии Django 1.4.8, Django 1.5.4 и Django 1.6 beta 4, чтобы закрыть уязвимость, которую публично разгласили посторонние лица утром того же дня. Все патчи доступны через PyPI (https://pypi.python.org/pypi/Django) и со страницы загрузки (https://www.djangoproject.com/download/).

В новых версиях Django закрывается баг (https://www.djangoproject.com/weblog/2013/sep/15/security/) во фреймворке аутентификации django.contrib.auth, позволяющий осуществлять атаку типа «отказ в обслуживании» (DoS).

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

К сожалению, эту сложность можно использовать во вред. Django не ограничивает длину текстовых паролей, и пароли исключительно большого размера сильно нагрузят сервер, выполняющий ресурсоемкие вычисления PBKDF2. Например, пароль длиной в 1 мегабайт нагрузит сервер на 1 минуту, так что один-единственный злоумышленник способен повалить большой сервер крупной компании, просто загружая произвольные пароли на произвольные учетные записи. Уязвимости присвоен классификационный номер CVE-2013-1443.

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

В обычных условиях процесс закрытия багов в Django занимает неделю, говорят разработчики. Но это для нормальных ситуаций, когда специалисты по безопасности сообщают об уязвимостях в приватном порядке и можно спокойно работать над заплаткой. Здесь же ситуация была другая: о баге сообщили публично в списке рассылки django-developers (https://groups.google.com/forum/#%21forum/django-developers). Но и закрыть дыру было просто: длину пароля просто ограничили 4096 символами.

Предыдущая

Python: Алгоритм Кнута–Морриса-Пратта (алгоритм поиска подстроки в строке)

Следующая

Создаем правильно главную страницу сайта

1 Comment

  1. Роман Зайцев

    Очень интересная и оригинальная идея!

© 2007–2017, konyakov.ru