XSS-уязвимость в WordPress

12 Ноября, 2005

О том, как можно осуществить XSS-нападение через функцию header() в PHP я прочитал тут. Кстати, автор статьи сообщил, что об этой уязвимости уже писали 3 года назад на securitylab.ru.

Я решил выяснить, подвержен ли WordPress такого рода нападению. В коде нашлось вот такие интересные места:

$location = (empty($_POST['redirect_to'])) ? $_SERVER["HTTP_REFERER"] : $_POST['redirect_to'];

wp_redirect($location);
это 60-62 строчки в файле wp-comments-post.php и соответственно реализация этой функции в файле wp-includes/pluggable-functions.php function wp_redirect($location) {
    global $is_IIS;

    if ($is_IIS)
        header("Refresh: 0;url=$location");
    else
        header("Location: $location");
}
В итоге получается, что вся логика работы такого редиректа сводится к строчке вида: header("Location: ".$_POST['redirect_to']);

Как видно, задача отличается от рассмотренной в выше указанной статье тем, что переменная берется из массива $_POST, а тут уже просто так символы "кавычка" и "обратный слеш" не передать, потому что предусмотрен механизм их экранирования.

Пришлось немного повозится, чтобы обойти эту преграду.

Читать далее