Новая уязвимость в Apache.
30.08.2011Здравствуйте.
Недавно была обнаружена уязвимость в Apache всех версий, использование которой, при определенных условиях, могло привести к отказу в обслуживании. Проблема заключается в следующем: при выполнении некоторого perl-скрипта веб-серверу в несколько потоков отправляются простые запросы вида:
HEAD / HTTP/1.1
Host: www.example.com
Range: bytes=0-,5-0,5-1,5-2,5-3,5-4,<...>,5-1299,5-1300
Accept-Encoding: gzip
Connection: close
В результате чего, Apache пытается сгенерировать ответ, подсчитатывая в памяти Content-Length (размер тела запрашиваемого объекта) перекрывающихся частей запрашиваемого файла. Данный ответ может использовать значительную часть оперативной памяти сервера. Соответственно, в такой ситуации, потребление памяти со стороны Apache достаточно быстро растет, что даже при небольшом количестве запросов может привести к серьезным проблемам.
Как проверить, уязвим ли Ваш сервер?
Достаточно отправить серверу два простых запроса к любому статическому файлу, к примеру, robots.txt:
curl -I -H
"Range: bytes=0-1,0-2"
-s www.example.com
/robots
.txt |
grep
Partial
curl -I -H
"Request-Range: bytes=0-1,0-2,0-3,0-4,0-5,0-6"
-s www.example.com
/robots
.txt |
grep
Partial
Как устранить уязвимость?
Если на Вашем сервере установлен Nginx, достаточно в конфигурационный файл nginx добавить следующие параметры:
proxy_set_header Range "";
proxy_set_header Request-Range "";
apachectl -M
В результате выполнения данной команды будет отображен список всех подключенных модулей Apache. Если модуля нет в этом списке, его нужно подключить в сооветствии со спецификацией операционной системы. После того, необходимо добавить в конфигурационный файл Apache следующие строки:
RequestHeader unset Request-Range
RequestHeader unset Range
curl -I -H
"Range: bytes=0-1,0-2"
-s www.example.com
/robots
.txt |
grep
Partial
curl -I -H
"Request-Range: bytes=0-1,0-2,0-3,0-4,0-5,0-6"
-s www.example.com
/robots
.txt |
grep
Partial
Опубликовано в Новости | Нет комментариев »