...

четверг, 7 августа 2014 г.

Крупная уязвимость в WordPress и Drupal может положить сайт

image

Нир Гольдшлегер, исследователь безопасности из Salesforce.com, обнаружил XML-уязвимость в WordPress и Drupal, пишет Mashable. Уязвимость использует известную атаку XML Quadratic Blowup Attack — и при её выполнении может практически мгновенно положить весь сайт или сервер.


XML-уязвимость, обнаруженная Гольдшлегером, может привести к загрузке процессора и оперативной памяти на 100 %, что сделает сервер недоступным и создаст DoS-атаку на базу данных MySQL. Уязвимость присутствует в WordPress от 3.5 до 3.9 (текущая версия) и в Drupal от 6.x до 7.x (последняя версия). WordPress и Drupal уже выпустили патчи.



XML Quadratic Blowup Attack похожа на атаку Billion Laughs, которая может позволить очень небольшому XML-документу полностью нарушить работу сервисов на машине в считанные секунды. Quadratic Blowup Attack вместо использования вложенных объектов внутри XML-документа просто повторяет одну большую запись с десятками тысяч символов снова и снова.


При этом типе атаки XML-документ размером несколько сотен килобайт может в конечном итоге занять сотни мегабайт или даже гигабайт памяти. Это легко положит весь сайт или веб-сервер. По словам Гольдшлегера:



<?xml version="1.0"?>
<!DOCTYPE DoS [
<!ENTITY a "xxxxxxxxxxxxxxxxx...">
]>
<DoS>&x;&x;&x;&x;&x;&x;&x;&x;&x;...</DoS>
</code>


«Если злоумышленник определяет длину сущности &x; в 55 тысяч символов и ссылается на эту сущность 55 тысяч раз внутри DoS-элемента, парсер сталкивается с нагрузкой атаки XML Quadratic Blowup чуть более 200 КБ в размере, которая расширяется до 2,5 ГБ при парсинге. Этого расширения будет достаточно, чтобы убить процесс парсинга».


В PHP по умолчанию стоит предел выделения памяти 128 Мб для каждого процесса, то есть теоретически вы не можете превысить предел 128 МБ XML-бомбой. Однако в веб-сервере Apache параметр «Max Clients» по умолчанию равняется 256, а в базе данных MySQL параметр «Max Connections» по умолчанию установлен на 151. Если мы умножим эти соединения друг против друга (128x151), получаем 19328 МБ — которые будут потреблять всю доступную память.


Чтобы успешно атаковать сервер, злоумышленник должен определить предел доступной памяти на сервере жертвы. Если атака превысит PHP-лимит, сервер отклонит превышение, что сделает атаку безуспешной. Однако успешная атака в результате вернёт введенную нагрузку и положит систему:



This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий