Всем добрый день,
у нас регулярно происходит такой взлом. Мне удалось выработать к нему иммунитет. Более того - мне на почту теперь приходит полный дамп POST-запроса, который я перешлю всем желающим.
Уязвимость связана с одной функцией библиотеки KSES, которая используется в ядре Moodle - kses_bad_protocol_once. Она позволяет выполнять код, если он указан в ${}.
В более новых версиях (в данный момент у нас 1.9.7+) такой взлом не проходит - видимо, обновили библиотеку KSES.
Версия 1.8 оказалась уязвима. Поэтому рекомендую:
1. Обновиться как можно скорее. Запросы шлются несколько раз в день.
2. Закрыть всё дерево moodle для записи процессом веб-сервера. Как правило, нужно просто изменить владельца на root и поставить права 644.
3.
Для исключительных случаев, когда обновление невозможно по ряду причин, выкладываю полный код функции:
function kses_bad_protocol_once($string, $allowed_protocols)
{
// FIXME by M.Goncharenko - remove all $ from string because ${} executes a code!
$string = str_replace("$", "", $string);
$str2 = preg_replace('/^((&[^;]*;|[\sA-Za-z0-9])*)'. '(:|�*58;|&#[Xx]0*3[Aa];)\s*/e',
'kses_bad_protocol_once2("\\1", $allowed_protocols)',
$string);
return $str2;
} # function kses_bad_protocol_once
Эта функция находится в файле lib/kses.php. Думаю, понятно, что старую нужно удалить, а эту написать на её место.
Надеюсь, мои исследования вам помогут