Pull to refresh

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

Reading time2 min
Views36K
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-лимит, сервер отклонит превышение, что сделает атаку безуспешной. Однако успешная атака в результате вернёт введенную нагрузку и положит систему:

Tags:
Hubs:
+30
Comments17

Articles