В плагине wpDiscuz, который расширяет возможности и дизайн комментариев для сайтов на базе CMS WordPress, обнаружена критическая уязвимость, позволяющая пользователям загружать произвольные файлы на сервер, а затем выполнять произвольный код на более чем 70000 сайтов, на которых установлен плагин.
Уязвимость заключается в следующем: плагин был разработан таким образом, чтобы разрешать пользователям прикреплять к сообщениям только изображения, но уязвимые версии wpDiscuz не могли корректно проверить тип прикрепляемых файлов, в результате чего пользователи получали возможность загружать на сервер файлы любого типа, включая файлы PHP. После загрузки такого файла на сервер уязвимого сайта, злоумышленники могли осуществить его запуск и выполнение, что влекло за собой и удаленное выполнение произвольного кода.
Уязвимость появилась в связи с применением функции getMIMEType
, которая использовала три разных метода для определения MIME-типа файла. Для начала используется первая проверка MIME_content_type
, которая определяет тип файла на основе содержимого файла. Если бы эта функция PHP была недоступна, использовалась бы finfo_file
, которая также определяет MIME-тип файла на основе его содержимого. Наконец, если и эта функция недоступна, то будет использоваться wp_check_filetype
— специфичная для WordPress проверка типа файла, которая определяет MIME-тип файла на основе имени файла и сопоставляет его со встроенным списком разрешенных типов файлов. Большинство файлов начинаются с нескольких так называемых «волшебных байтов», которые представляют собой особую сигнатуру и могут использоваться для определения их MIME-типа. Но из-за особенности обработки файлов интерпретатором PHP, игнорируются все в файле до открывающего тега <?php
. Таким образом, первые две используемые функции могут легко позволить подделать файлы и отображаться как разрешенные файлы изображений, просто добавив «магические байты», специфичные для изображения.
Проблема актуальная для плагина wpDiscuz версии 7.0.0-7.0.4 и исправлена в версии 7.0.5, поэтому рекомендуется в кратчайшие сроки обновить плагин. Источник
Использование Nemesida WAF позволит блокировать попытки эксплуатации этой уязвимости.