Легко эксплуатируемая DoS-уязвимость в HTTP-сервере Apache

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

Проблема вызвана ошибкой в реализации поддержки загрузки части файла по указанному диапазону (например, после обрыва соединения можно запросить загрузку начиная с определенной позиции). Ошибка связана с тем, что при обработке запроса, содержащего большое число диапазонов (например, «Range:bytes=0-,5-1,5-2,5-3,…,5-1000»), расходуется слишком много памяти. Для осуществления удачной атаки достаточно отправить около 50 подобных запросов на сервер.

Проблема присутствует в Apache 2.2.x, включая последний релиз 2.2.19. Исправление пока доступно в виде патча. Также имеется несколько способов временной защиты, не требующих пересборки Apache. Например, можно принудительно очищать заголовок Range при помощи mod_header («RequestHeader unset Range») или блокировать длинные последовательности Range через mod_rewrite:


   # Вариант 1:
   RewriteEngine On
   RewriteCond %{HTTP:Range} bytes=0-[0-9]+, [NC,OR]
   RewriteCond %{HTTP:Range} bytes=([0-9-],){4,} [NC,OR]
   RewriteCond %{HTTP:Range} bytes=[0-9,-]+,0-(,|$) [NC]
   RewriteRule .? http://%{SERVER_NAME}/ [NS,L,F]

   # Вариант 2:
   RewriteEngine On
   RewriteCond %{REQUEST_METHOD} ^(HEAD|GET) [NC]
   RewriteCond %{HTTP:Range} ([0-9]*-[0-9]*)(s*,s*[0-9]*-[0-9]*)+
   RewriteRule .* - [F]

   # Вариант 3:
   RewriteEngine On
   RewriteCond %{HTTP:Range} bytes=0-.* [NC]
   RewriteRule .? http://%{SERVER_NAME}/ [R=302,L]


Интересно, что о теоретической возможности совершения подобной атаки Михаил Залевски (Michal Zalewski), известный польский эксперт в области компьютерной безопасности в настоящее время работающий в Google, сообщал еще 4 года назад, но проблема по каким-то причинам не была воспринята всерьез и исправления не были внесены.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.