Защита сайта WordPress от XSS-уязвимости в пакете Genericons

Published by Leave your thoughts

6 мая 2015 года была обнаружена критическая уязвимость WordPress, повышающая восприимчивость сайтов к атакам типа Cross-Site Scripting (XSS). Причиной этой уязвимости являются компоненты, которые используют пакет Genericons.

Эта статья расскажет о воздействии уязвимости на сайт, способах проверки своего сайта на наличие уязвимости и методах её устранения.

Влияние уязвимости на сайт

Данная уязвимость присутствует не в самом ядре WordPress, а в пакете иконок под названием Genericons. К сожалению, данный пакет иконок в стандартной теме WordPress, которая называется TwentyFifteen. Также уязвимость затрагивает популярный плагин WordPress под названием JetPack, который по статистике насчитывает одного миллиона активных установок. Возможно, уязвимость присутствует и в других темах и плагинах WordPress.

Уязвимость обнаружена в файле example.html пакета Genericon. Этот второстепенный файл был добавлен для демонстрации шрифтов. Однако он содержит фрагмент jQuery, который и содержит уязвимость, что позволяет злоумышленнику выполнить межсайтовый скриптинг (XSS) через модель DOM.

XSS-атака в модели DOM изменяет окружение DOM во время обработки данных браузером клиента, в результате чего действия выполняются вопреки оригинальному проекту.

Чтобы воспользоваться уязвимостью, злоумышленник должен заставить пользователя открыть специально созданную ссылку при входе в WordPress. Если данное приложение уязвимо, сервер не сможет предотвратить нежелательное поведение, потому что все действия происходят в браузере. К счастью, эту уязвимость несложно устранить.

Проверка сервера на уязвимость

7 мая 2015 года вышел релиз WordPress 4.2.2, который исправляет данную уязвимость. Следовательно, чтобы устранить уязвимость и защитить свой сайт, достаточно установить новую версию WordPress или обновиться до нее.

Предыдущие версии WordPress (обновлённые до 07.05) остаются уязвимыми. Панель администратора будет выводить такое предупреждение:

WordPress 4.2.2 is available! Please update now.

Можно также открыть каталог document root и найти в нём файлы example.html. Для этого в каталоге document root можно запустить такую команду:

find . -path "*/genericons/example.html"

Результат будет выглядеть примерно так:

find output
./wp-content/themes/twentythirteen/genericons/example.html
./wp-content/themes/twentyfifteen/genericons/example.html
./wp-content/themes/twentyfourteen/genericons/example.html

В этом выводе файл example.html был обнаружен в теме TwentyFifteen, что значит, что данная тема уязвима. Остальные файлы example.html не содержат уязвимости, поскольку в них нет фрагмента jQuery. Найдите все файлы example.html в каталоге twentyfifteen/genericons или в других используемых плагинах.

Устранение уязвимости

Чтобы устранить данную уязвимость, достаточно просто обновить WordPress. Это защитит сайт от взлома и других возможных уязвимостей, содержащихся в старевших версиях программы.

Имея соответствующие права, вы можете обновить установку WordPress, открыв вкладку Обновления в консоли. Также обновления представлены в виде ссылки на главной странице.

Кроме того, рекомендуется отдельно обновить темы и плагины установки.

Также можно просто удалить уязвимые файлы.  Для этого откройте каталог document root и введите:

sudo find . -path "*/genericons/example.html" -exec rm -f {} ;

Проверьте структуру каталога:

find . -path "*/genericons/example.html"

Как видите, все файлы example.html были удалены из каталога genericons.

Эта ошибка затрагивает огромное количество пользователей, однако её довольно просто исправить: достаточно просто обновить WordPress, и патч релиза 4.2.2 легко устранит эту уязвимость. Конечно, чтобы обеспечить безопасность установки WordPress, нужно обновить её как можно скорее.

Tags: , , , ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>