Неприятный подарок на Рождество от W3 Total Cache

Уязвимость в плагине W3 Total Cache

Счастливого Рождества! Я думаю, не стоит представлять плагин W3 Total Cache – он известен, пожалуй, каждому пользователю WordPress. Однако сегодня мы поговорим не о его красочных и привлекательных сторонах, а о довольно неприятном «подарке», сделанном в канун Рождества. Речь идет об опасной уязвимости, найденной в W3 Total Cache. С ее помощью можно получить ваши пароли, хранящиеся в кэше. Для начала давайте посмотрим, для чего мы обычно используем этот плагин, а затем плавно перейдем к изучению открытой уязвимости.

Что делает плагин?

Плагин W3 Total Cache помогает ускорить обработку веб-страниц путем выполнения некоторых действий, позволяющих страницам загружаться быстрее.

Кэширование страниц и запросов к базе данных

Каждый раз, когда кто-то посещает веб-страницу на вашем сайте WordPress, ваш сервер должен обратиться к вашей базе данных MySQL, чтобы получить всю информацию, необходимую для представления страницы, после чего готовая страница передается браузеру посетителя. Также для представления страницы требуется проанализировать код вашего сайта, рассмотреть CSS-стили и выполнить некоторые другие операции. Каждое обращение к базе данных, CSS и коду требует некоторое количество времени – пусть даже это время может быть незначительным. Каждая операция прибавляет несколько миллисекунд ко времени загрузки страницы.

Вместо того чтобы каждый раз бегать по разным местам и собирать крупицы информации, плагин W3 Total Cache позволяет заранее построить каждую страницу. Как только пользователь обратится к ней, она уже будет готова для вывода. В дополнение к этому, если что-нибудь на странице изменится, он подготовит ее новую версию. Это не только снимает нагрузку с вашего сервера, но и позволяет загружать веб-сайт быстрее.

Минимизация Javascript и CSS

Рылись ли вы когда-нибудь в CSS вашей темы? Все стили находятся в одном файле? Или они раскиданы по разным файлам? Я был несколько потрясен, узнав, что в некоторых темах есть целых 10 отдельных файлов CSS. И большая часть информации в них дублируется. Добавьте несколько плагинов, у которых есть свои собственные CSS-стили и JavaScript, и в итоге вы очень скоро запутаетесь. Получение информации из всех этих файлов увеличивает время загрузки вашего сайта.

Плагин W3 Total Cache помещает весь CSS-код в отдельный компактный файл, который легко и быстро можно найти, когда вам требуется какая-то информация. Не беспокойтесь – если вы захотите отредактировать ваши CSS или Javascript-файлы, исходные файлы никуда не денутся. Когда вы закончите их редактирование, плагин просто опять упакует их в отдельный файл – и так постоянно для нескольких файлов.

Оптимизация кэша браузера посетителей

Браузеры посетителей вашего сайта точно не знают, какие элементы вашего сайта могут кэшироваться на компьютерах посетителей, а какие нет. К тому же браузер не знает, сколько времени необходимо хранить кэш с информацией, полученной от вашего сайта. Все это верно только в том случае, если веб-сайт не дает ему информацию, необходимую для того, чтобы узнать, что кэшировать и как долго хранить кэш.

Плагин W3 Total Cache проверяет готовность такой информации и отправляет ее в веб-браузер посетителей, чтобы он знал, что нужно кэшировать и сколько времени надо хранить кэш. Плагин позволяет повысить эффективность использования локального кэша. В теории, при использовании кэширования ваш веб-сайт должен загрузиться быстрее.

В чем состоит уязвимость?

Вы можете сказать: «отлично, если плагин настолько хорош, то в чем состоит проблема?». Что в нем не так? Давайте узнаем.

В основном, кэширование вашего веб-сайта будет сохранять некоторую информацию, которую не должен знать остальной мир – прежде всего, это зашифрованный пароль вашего пользовательского аккаунта. Вообще, простое хранение этой информации на вашем хостинг-аккаунте не приводит к проблемам, однако существует две ситуации, в которых взломщик может получить доступ к вашим данным.

Проблема первая

По умолчанию, W3 Total Cache хранит файлы кэша в папке /wp-content/w3tc/dbcache/, и если на вашем сервере включен вывод списка директорий, то любой человек может сделать простой поиск в Google по запросу inurl:wp-content/w3tc, в результате которого можно найти веб-сайты, являющиеся потенциальными уязвимыми целями. Если взломщики найдут веб-сайт WordPress, который предлагает указанные данные, эти люди могут легко загрузить файлы кэша на свой компьютер.

Как только взломщики загрузят эти файлы кэша, они могут просматривать файлы кэша вашей базы данных и определять расположение ключей для вашей базы данных (таких, как ваши хэши паролей). Что могут сделать взломщики, если у них есть ваш логин, и они могут декодировать ваши пароли?

Проблема вторая

Даже если просмотр директорий отключен, кто-либо, знающий об этой уязвимости в системе безопасности, может напрямую загрузить весь кэш базы данных и затем уже найти то, что ему понадобится. Есть небольшой скринкаст от Джейсона, — человека, который сообщил об этой уязвимости, — посвященный тому, как найти ваши логины и хэши паролей. Скринкаст доступен по ссылке: http://git.zx2c4.com/w3-total-fail/plain/screencast.ogv.

Хотите знать, работает ли это с вашим сайтом? Используйте следующий код: http://git.zx2c4.com/w3-total-fail/tree/w3-total-fail.sh.

Что можно сделать?

Было предложено много разных исправлений, чтобы закрыть эту дыру в системе безопасности плагина, однако все они оказались бесполезными. Я сталкивался с приемом блокирования доступа через htaccess, однако большая часть этих файлов являлись публично доступными, чтобы они могли обрабатываться браузерами посетителей, так что полностью блокировать доступ к ним невозможно.

Лучший выход, на мой взгляд – это обновление плагина. Разработчик выпустил новую версию плагина 29 декабря 2012 года, которая, как предполагается, должна закрыть эту дыру в безопасности. Версия, которая несет в себе необходимое исправление – 0.9.2.5. Согласно автору плагина, эта версия:

«Исправляет проблемы с безопасностью, которые могут произойти при использовании кэширования базы данных на диск. Проблема может возникнуть, если вы используете кэширование базы данных на диск, причем ваш сервер поддерживает вывод списка директорий или открывает доступ к директориям wp-content/w3tc/dbcache/*. Этот патч работает для всех типов хостинга с настроенным PHP, таким образом, модификации htaccess в данном случае не требуются. Очистите кэш базы данных после проведения обновления, если вы используете кэширование базы данных на диск».

Когда вы войдете в панель администратора WordPress, обязательно обновите ядро системы. Затем обновите свои темы, если они не являются актуальными. После чего обновите все плагины, которые не являются актуальными. Как только вы сделаете все эти действия, обязательно отметьте себе, что требуется постоянно проводить все обновления в будущем. Многочисленные уязвимости в WordPress являются результатом использования устаревших версий плагинов, тем и ядра системы. Существуют различные инструменты, позволяющие помочь с защитой, однако в конечном счете вся ответственность лежит только на вас.

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

Эта статья – прекрасный пример того, почему использование WordPress не должно быть основано на методе «установил и забыл». Когда я только начинал работать с локальными клиентами, они практически всегда отказывались от ежемесячного обслуживания их веб-сайтов. В итоге я решил перейти на другой, более жесткий язык объяснения данной услуги. Теперь я говорю им, что основной код их сайта постоянно улучшается, поэтому необходимо проводить регулярные обновления, позволяющие сохранить безопасность и целостность их сайтов. Небольшое разъяснение того, ПОЧЕМУ они должны нанять меня на ежемесячную работу, обычно хватает, чтобы они все поняли и приняли соответствующее решение.

Источник: wpmu.org

Блог про WordPress
Комментарии: 9
  1. Дмитрий

    Здравствуйте! Извините, что не по теме.
    Мне очень нравится плагин, который вы используете для подсветки программного кода, но у меня установить его нормально не получилось.
    Думал, найду у вас статью на сайте, но увы, таковой нет.
    Поиски в инете не увенчались успехом — кругом сайты как под копирку, с одинаковой инфой.
    Если вам не трудно, расскажите как правильно его установить и как изменять стили под него.
    Сколько я не бился — не смог поменять фон для этого плагина, + он не отображает у меня кнопку копировать в буфер.
    Еще хотелось бы пару слов о русификации.
    Заранее благодарен.

  2. Дмитрий (автор)

    Плагин SyntaxHighlighter — в настройках поставлена версия 2.x, установлены опции:

    Display line numbers
    Display the toolbar
    Automatically make URLs clickable
    Use smart tabs allowing tabs being used for alignment
    Wrap long lines (v2.x only, disabling this will make a scrollbar show instead)
    

    Стили задавать в поле Additional CSS Classes (имя класса, после чего прописать его в CSS). Таким же образом меняется и цвет фона, через CSS.

  3. Дмитрий

    Благодарю!
    Если можно еще один вопрос: возможно ли сделать так, чтобы высота окна скрипта была фиксированная, но появлялась полоса прокрутки?
    Все тот же пример.

    1. Дмитрий (автор)

      Тоже с помощью стилей. В CSS надо будет дописать что-то, похожее на следующее:

      .syntaxhighlighter div,
      .syntaxhighlighter table
      {
      max-height: 600px;
      overflow: auto;
      }
      

      Код не тестировал, потому не знаю, будет ли он работать. Но в общем стили должны быть примерно такими. Max-height — это высота окна, а overflow указывает на появление прокрутки. Возможно, что .syntaxhighlighter table и не потребуется, если для div сработает. В общем, протестируйте, пожалуйста, и отпишитесь о результате.

  4. Волшебник

    Еще один неприятный подарок от W3 Total Cache — он не полностью совместим с актуальной версией WP, в результате чего не работает функция предзагрузка кеша (cache preload), когда он создаётся заранее, а не в момент например когда страницу посещает поисковик и получает от сервера не быстрый кешированный заранее ответ, а задержку, которая уходит на кеширование страницы. А скорость загрузки для SEO немаловажный фактор.

  5. Волшебник

    Так что подумываю сменить его на super cache.

    1. Дмитрий (автор)

      Total Cache вообще, хоть и раскрученный, но имеет вот такую вот негативную историю с разными ошибками.

      Столкнувшись раз с ошибкой, второго шанса уже обычно таким плагинам не даешь. Это как изменившая девушка — зачем давать ей второй шанс, все равно люди не исправляются :)

      Да и все это стремление к разрастанию в размерах мне лично ничуть не импонирует. Напоминает какой-нибудь обрюзгший винамп с горой скинов, плагинов, опций. Сам пользуюсь AIMP и счастлив.

  6. Волшебник

    Ну я тоже отказался лет 5 уже как от винампа )
    Пользуюсь очень лёгким минималистичным плеером xmplay, весит всего 335кб и всё проигрывает (не проигрывает только cue). Правда он уже давно не обновлялся.

    Еще многие FooBar советуют, но по мне он очень уж запутан. Хотя там можно свои библиотеки с картинками делать и т.д.

    1. Дмитрий (автор)

      Foobar — уж слишком топорный интерфейс у него. Сам тоже отказался от него, но видел, что многие пользователи за рубежом отдают предпочтение именно ему.

Добавить комментарий для Architect Of Ruin Отменить ответ

Получать новые комментарии по электронной почте.