Обновление WordPress. Закрыта целая куча уязвимостей!

4 комментария

wordpress xss

Добрый вечер, уважаемые читатели блога! Вчера выложили обновление WordPress до версии 4.8.2. Вдруг неожиданно стало интересно, что же принесло данное обновление. Оказалось, что много чего позакрывали в плане безопасности блога — кучу уязвимостей WordPress, позволявших совершать XSS-атаки и одну, которая позволяла гипотетически проводить SQL-Injection, начиная с версии WordPress …. 2.3.

Уязвимости, при помощи которых можно было провести XSS-атаку, были обнаружены в:

  • Визуальном редакторе статей
  • В редакторе плагинов
  • В редакторе тем
  • В редакторе данных пользователя и т.д.

Почему так много? На самом деле потому, что необходимо было внести однотипные исправления  .

Как мы знаем, в админке блога на WordPress есть редактор плагинов. Попасть в него можно, перейдя по меню админки блога WordPress Плагины -> Редактор.

Редактор плагинов WordPress

Перед нами откроется редактор кода php, в правой части которого последовательно выводятся имена файлов существующих на блоге плагинов.

Пример того, что было до версии 4.8.2 в файле wp-admin\plugin-editor.php:

После:

Как видно, раньше список имен файлов выводился «как есть», что могло создать неприятную ситуацию…  Теперь все спецсимолы будут как положено заменяться на HTML-сущности.

Абсолютно аналогичная картина наблюдается в редакторе темы (Внешний вид -> Редактор).

редактор темы WordPress

В файле wp-admin\theme-editor.php до обновления:

После:

Также в коде новой версии можно встретить массовое «деслеширование» параметров запроса при помощи функции wp_unslash(). До версии 4.8.2 в файле plugins.php:

После:

Очень важная часть обновления — это устранения потенциальной уязвимости при распаковке ZIP-архивов. В обновлении добавлены строки, которые проверяют, как задан путь до файла, содержащегося в распаковываемом архиве. Это сделано в файле wp-admin\includes\file.php при помощи функции validate_file().

Данная функция «посылает», если в пути распаковываемого файла содержится «..» или «./», или «, или имя файла не содержится в белом списке (необязательный параметр). Т.е. она, например, отлавливает попытки «пройтись» на каталог выше в процессе распаковки архива.

Была существенно отредактирована функция $wpdb->prepare(), которая должна подготавливать SQL запрос, чтобы нельзя было совершить SQL-Injection. Увы, вплоть до версии 4.8.2 это было сделать можно )))

Функция находится в файле wp-includes\wp-db.php.

Было:

Стало:

По сути добавилась проверка того, что в качестве параметров запроса должны выступать скалярные переменные, т.е. чтобы там ничего, кроме чисел, строк и булевых переменных не было — ни массивов, ни чего-либо еще. Существенное ограничение! Также в запросе «доэкранируются» все неэкранированные ранее проценты (%).

Короче говоря, смысл сей басни прост — обновитесь  .

 


4 комментария “Обновление WordPress. Закрыта целая куча уязвимостей!”

  1. seoonly.ru

    Хорошо когда стоит автообновление-)

    Ответить
    • NoService
      NoService

      Добрый день, seoonly.ru!
      Конечно, это удобно для владельца площадки http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ab.gif . Но я от этого отказалась, обновляю WordPress вручную на сервере.

      Ответить
      • Максим

        А почему Вы решили обновлять вручную? Поделитесь секретом. Спасибо.

        Ответить
        • NoService
          NoService

          Максим, здесь нет секрета http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ab.gif
          Дело в том, что при ручном обновлении нет необходимости выдавать права на запись на папки с плагинами и самим ворпрессом не админу сервера. Я уже столкнулась с тем, что это может привести к легкому внедрению на блог левого кода… Или даже к полной зашифровке файлов, есть статья на блоге…

          Также есть проблема с тем, что обновление может привести к полной неработоспособности ресурса. Когда я вручную обновляю, я это полностью контролирую — что и когда пошло не так.

          Ответить

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

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url=""> <img src="" alt="" class="" width="" height="">

http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ab.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ac.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ag.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ah.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ai.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ak.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/am.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/an.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ao.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/aq.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ar.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/at.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/av.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/aw.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ay.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/az.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/bb.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/bc.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/bd.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/be.gif 
больше...