ГлавнаяПлагиныКритическая уязвимость в плагине WordPress SEO от Yoast

Критическая уязвимость в плагине WordPress SEO от Yoast

В популярном плагине WordPress SEO от Yoast найдена критическая уязвимость, позволяющая пользователям с правами автора, редактора или администратора выполнять SQL инъекцию на сайте WordPress.

Плагин WordPress SEO от Yoast

Плагин WordPress SEO от Yoast

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

Мы не сторонники такой быстрой публикации подробностей уязвимостей, но благодарны за то, что WPScan Team хотя бы дождались официального ответа и патча от команды Yoast.

Есть вероятность того, что команда разработчиков ядра WordPress примет решение выполнить фоновое обновление для всех пользователей данного плагина автоматически. Многие хостинг-провайдеры уже обновили всех своих клиентов до последней версии, и проверили логи базы данных и веб-серверов на предмет доступа сторонними лицами.

Если вы еще не обновили WordPress SEO до версии 1.7.4, рекомендуем сделать это немедленно, особенно если на вашем сайте зарегистрированы любые другие пользователи кроме вас.

Подписаться на рассылку

Подписаться → Подпишитесь на бесплатную рассылку журнала WP Magazine и получайте новости, события, подборки тем и плагинов, уроки, советы и многое другое в мире WordPress!

  • Спасибо за оповещение! Добавлю некоторые свои замечания и впечатления. В официальном блоге этого плагина пока что ни слова про эту уязвимость, а зачем писать, действительно. Подробности уязвимости на WP Scan https://wpvulndb.com/vulnerabilities/7841

    Вкратце — у меня на сайте отключена capability, необходимая для этого пункта меню, поэтому, как я понял, у меня не было такой уязвимости :)

    Отложив все за и против этого ненужного балк редактора, посмотрим что внутри исходного кода.

    Страницы для админки регистрируются в plugins/wordpress-seo/admin/class-admin.php. Фрагмент массива с данными для регистрации страницы с «дыркой»:

    array(
    ‘wpseo_dashboard’,
    »,
    __( ‘Bulk Editor’, ‘wordpress-seo’ ),
    ‘wpseo_bulk_edit’,
    ‘wpseo_bulk-editor’,
    array( $this, ‘load_page’ ),
    array( array( $this, ‘bulk_edit_options’ ) ),
    ),

    Для этой страницы используется capability wpseo_bulk_edit, которая добавляется и удаляется при активации или удалении плагина.

    Насколько я понимаю те, у кого этой capability нет (я например на своем сайте выключил ее для всех учетных записей кроме администраторских), не смогут выполнить уязвимость потому что при вызове /wp-admin/admin.php?page=wpseo_bulk-editor произойдет следующее:

    Откроется страница admin.php, в ней на строчке 128 сработает

    require(ABSPATH . ‘wp-admin/menu.php’);

    Данный файл начинает строить меню и в самом конце вызывает другой файл подключиться к работе.

    require_once(ABSPATH . ‘wp-admin/includes/menu.php’);

    В menu.php производятся некоторые манипуляции с элементами меню и выкидываются те элементы, к которым доступ перекрыт, а в самом конце есть условие:

    if ( !user_can_access_admin_page() ) {
    /**
    * Fires when access to an admin page is denied.
    *
    * @since 2.5.0
    */
    do_action( ‘admin_page_access_denied’ );
    wp_die( __( ‘You do not have sufficient permissions to access this page.’ ), 403 );
    }
    Оно заставит WordPress отдать 403 и «умереть» еще до того момента, когда WP начнет парсерить аргументы и что-то с ними делать, т. к. в случае отсутствия данной capability мы попадаем в это условие.
    ***
    Отключить эту capability можно через любой плагин для редактирования ролей. Я пользуюсь https://wordpress.org/plugins/members/ от Джастина Тедлока.

    Также отключить добавление capability к некоторым типам учетных записей можно через фильтр. Для этого только надо сначала выключить плагин SEO, включить плагин с этим фильтром и потом заново активировать SEO плагин :) Потому что этот фильтр используется для удаления и добавления capability. Такие дела.

    /*
    * Выключаем bulk editor для всех, кроме администратора
    */
    function selena_network_clean_seo_by_yoast ($roles) {
    $roles = array (‘administrator’);
    return $roles;
    }
    add_filter (‘wpseo_bulk_edit_roles’, ‘selena_network_clean_seo_by_yoast’);

    • В официальном блоге этого плагина пока что ни слова про эту уязвимость

      https://yoast.com/wordpress-seo-security-release/

      • Прошу прощения, видимо невнимательно посмотрел их блог :)

    • По поводу самой уязвимости, вы не учли то, что злоумышленнику вовсе не нужен доступ к аккаунту с ролью администратора или правом на wp_seo_bulk_edit, да и аккаунт на вашем сайте им совсем не нужен.

      Им нужно лишь убедить вас, или другого администратора на вашем сайте щелкнуть по их ссылке – ведь у уязвимого действия нет проверки на CSRF, поэтому открыв его в iframe можно легко «заставить» вас исполнить на вашем сайте любой SQL запрос.

  • Looler

    Константин, Вы как опытный человек, что посоветуете WordPress SEO от Yoas, All in One SEO Pack или что то есть лучше (в плане нагрузки на сайт и реального эффекта для поисковиков)?

    • «Реальный эффект» для поисковиков вы получите от качественного контента на вашем сайте. Здесь на WP Magazine мы используем WordPress SEO от Yoast. AIOSEOP честно говоря давно не пробовали, но насколько я помню у них функционал пересекается процентов на 90, поэтому выбирать нужно тот, который вам более понятен, с которым вам проще работать.

      P.S. Некоторое время назад Павел Карпов в нашем журнале писал о базовой SEO оптимизации для WordPress сайтов, советуем почитать.

      • Не по теме вопрос, Константин, как у вас получается в disqus ссылкам придать текстовый анкор?

        • Обычный HTML:

          <a href=»https://wpmag.ru»>WP Magazine</a>

  • Артем

    Господи иисусе!!

  • Марина

    Подскажите, пожалуйста, почему не получается обновить плагин? Версия даже не 1.7.Х. Обновляю через консоль, пишет «Процесс обновления начался. На некоторых серверах он может занять какое-то время», и сразу же: «обновление успешно завершено, используется свежая версия плагина», хотя все равно указана старая версия.
    И так у всех плагинов, версии далеко не последние, но в консоли стоит, что плагины не требуют обновления. Версия WP 4.1.

    • Сложно сказать не имея логи ошибок и прочее. В вашем случае лучше всего обратиться за помощью к хостинг-провайдеру.

  • Игорь

    Здравствуйте, может вы напишите обзор по правильной настройки плагина? в сети имеются статьи, но они все разные, и особого доверия не вызывают.