Плагин "Display Widgets", насчитывающий более 200 тысяч установок, окончательно удалён из каталога плагинов к WordPress после серии инцидентов, в результате которых была осуществлена подстановка вредоносного кода в новые выпуски. Указанный код представлял собой бэкдор, позволяющий владельцам плагина контролировать контент на использующих плагин сайтах и выполнять подстановку своих рекламных блоков. Всем пользователям Display Widgets рекомендуется прекратить использование ветки 2.6.x.

Проблемы начались после того, как автор плагина, заинтересованный в развитии коммерческого аналога, продал "Display Widgets" другому разработчику, который обещал продолжить сопровождение плагина. 21 июня, спустя месяц после завершения сделки, новым владельцем было выпущено обновление 2.6.0, в котором была представлена поддержка средств для определения местоположения по базе GeoIP.

На следующий день после релиза к администраторам каталога плагинов WordPress поступила жалоба о нарушении требований к размещаемым в каталоге дополнениям. В частности, было выявлено, что плагин загружает около 38 Мб данных, содержащих информацию о географической привязке IP-адресов от компании Maxmind. После удаления дополнения из каталога, через неделю новый владелец плагина выпустил обновление, в котором устранил проблему путём интеграции GeoIP БД в основную поставку в виде виде файла geolocation.php. Дополнение было восстановлено в каталоге.

После изучения нового кода вновь было найдено нарушение правил - плагин передавал сведения о посетителях на внешний сервер, нарушая конфиденциальность пользователей. 1 июля дополнение было блокировано второй раз, а 6 июля был выпущен релиз 2.6.2 с активной по умолчанию опцией для отключения отправки логов. Дополнение было восстановлено, но 23 июля стали поступать жалобы о появлении спама на сайтах с плагином "Display Widgets", подтверждённые ссылками на кэш Google.

Разбор проблем показал, что источником спама является файл geolocation.php, в котором оказался спрятан бэкдор, позволяющий владельцам плагина публиковать новый контент на сайтах пользователей, а также заменять или удалять содержимое страниц. При этом для зарегистрированных пользователей и администраторов вредоносный код отображал изначальное содержимое, а для остальных пользователей выводил изменённый контент. Вредоносный код использовался для подстановки сторонней рекламы, незаметно для постоянных пользователей и администраторов сайтов. 24 июля дополнение в третий раз было заблокировано.

2 сентября был сформирован релиз 2.6.3, а 7 сентября возобновились жалобы на появление спама на сайтах пользователей плагина. На жалобы пользователей разработчики отвечали советом почистить кэш браузера, установить новую версию "Display Widgets" и почистить содержимое таблицы wp_options. Разработчики также пытались ввести пользователей в заблуждение, указывая в качестве причины появления спама наличие уязвимости, проявляющейся только при включении режима GEO Location в сочетании с применением других дополнений.

В итоге в новой версии также был выявлен изменённый бэкдор и 8 сентября администрация WordPress в четвёртый раз заблокировала "Display Widgets" с предупреждением о наличии критических проблем с безопасностью, а для пользователей было сформировано обновление 2.7.0 в котором произведён откат на кодовую базу 2.0.5, последнюю версию до продажи.

Стефани Велс (Stephanie Wells), изначальный автор дополнения, прокомментировала, что дополнение было продано Мэйсону Сойза (Mason Soiza) за 15 тысяч долларов, который представлял компанию WP Devs, заявляющую о владении 34 плагинами c аудиторией более 10 млн пользователей. Примечательно, что ранее наблюдалась аналогичная ситуация со спамом в плагине "404 to 301", который тоже купил Сойза. Также была договорённость о покупке плагина Finance Calculator, но его автор отменил сделку, узнав об инциденте с "Display Widgets". Об остальных плагинах, купленных Сойза, пока ничего не известно. Из хостов, с которых загружался вредоносный код упоминаются stopspam.io, w-p.io, geoip2.io и maxmind.io.

Источник: http://www.opennet.ru/opennews/art.shtml?num=47229