Появился чужой код в Moodle

Re: Появился чужой код в Moodle - решение

от Michael Goncharenko -
Количество ответов: 0
Всем добрый день,

у нас регулярно происходит такой взлом. Мне удалось выработать к нему иммунитет. Более того - мне на почту теперь приходит полный дамп 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])*)'. '(:|&#0*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. Думаю, понятно, что старую нужно удалить, а эту написать на её место.

Надеюсь, мои исследования вам помогут одобряю