Неприятный подарок на Рождество от 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