Новости и события » Hi-Tech » Раскрыты детали уязвимости в WordPress 5.0.0

Раскрыты детали уязвимости в WordPress 5.0.0

Саймон Скэннелл (Simon Scannell), в прошлом году предложивший метод атаки "Phar deserialization" на PHP, опубликовал сведения об уязвимости в системе управления контентом WordPress, позволяющей выполнить произвольный код на сервере, имея привилегии автора публикаций (Author) на сайте. В обновлениях WordPress 4.9.9 и 5.0.1 была добавлена частичная защита, позяовлющая блокировать атаку в основном коде WordPress, но полностью проблема остается не исправленной и в актуальном выпуске WordPress 5.0.3 может быть эксплуатирована через дополнительные ошибки в плагинах (отмечается, что проблема проявляется в некоторых популярных плагинах c миллионами активных установок).

Уязвимость стала следствием двух проблем - ошибки при обработке файловых путей и возможности переопределения метаданных. Первая проблема позволяет переопределить в БД значение записи с параметрами изображения в таблице wp_postmeta. При изменении параметров загруженного изображения (например, описания), передаваемые данные обрабатываются в виде массива параметров, что позволяет переопределить и значение служебного параметра "_wp_attached_file", содержащего имя файла с изображением.

Так как, параметр из БД с именем файла используется относительно каталога "wp-content/uploads" без повторной проверки корректности имени, атакующий может через добавление символов "../" выйти за пределы базового каталога с загружаемыми файлами. В функциях обработки изображений, например в функции wp_crop_image, вызываемой при кадрировании изображения, поддерживается как обработка уже загруженного локального файла, так и загрузка внешнего файла. Если локальный файл присутствует, обрабатывается он, а если нет то предпринимается попытка его загрузки c внешнего хоста (например, если указан файл evil.jpg и его нет в локальной ФС, он будет загружен как "https://targetserver.com/wp-content/uploads/evil.jpg").

При сохранении после кадрирования файл сохраняется в отдельном каталоге с добавлением к имени приставки "cropped-" ("cropped-evil.jpg"). Изменив при помощи вышеотмеченной проблемы имя на "evil.jpg?/../../evil.jpg" можно сохранить результирующее изображение в любом каталоге, например, в каталоге с темами оформления (wp-content/themes), PHP-файлы в котором могут быть выполнены через вызов через функцию include. Имя выполняемого файла с темой определяется в переменной "_wp_page_template", которая по аналогии с именем изображения может быть изменена на произвольное значение. На данном этапе атакующий уже может добиться записи изображения в каталог с текущей темой оформления и указать этот файл в качестве текущего шаблона оформления.

Для решения задачи по передаче PHP-кода под видом изображения используется особенность PHP-расширения Imagick, которое после редактирования оставляет содержимое метаданных EXIF в неизменном виде, т. е. в результирующем изображении остаются те же параметры EXIF, что и в исходном. Разместив вместо блока EXIF PHP-код можно добиться его выполнения при попытке подключения шаблона определенной темы оформления. При применении для преображения изображений PHP-расришения GD, атака усложняется, так как GD очищает EXIF и для выполнения кода необходим особый подбор значений пикселей, который после обработки в GD образует PHP-код.

Интересно, что в ходе изучения внутренних структур PHP-расширения в libgd параллельно была выявлена уязвимость CVE-2019-69772, приводящая к переполнению буфера при разборе в функции gdImageColorMatch специально оформленных изображений, которую также можно использовать для атаки на PHP-приложения, вызывающие функцию [[http://php.net/imagecolormatchbimagecolormatch]]. Таким образом под видом изменения загруженного изображения, злоумышленник может изменить любой файл в файловой системе, насколько это позволяют права доступа, под которыми выполняется WordPress. Подобная проверка, в частности, отсутствует в функции wp_crop_image, вызываемой при кадрировании изображения.

Например, в штатном режиме при обработке загруженного изображения "evil.jpg" будет открыт файл "wp-content/uploads/evil.jpg", но если поменять имя в БД на "../evil.jpg" будет открыт уже файл "wp-content/uploads/../evil.jpg", т. е. "wp-content/evil.jpg".


Maxtang MAX-N100 - мини-ПК со встроенным блоком питания как у Mac...

Maxtang MAX-N100 - мини-ПК со встроенным блоком питания как у Mac mini

В продажу поступил новый компактный компьютер Maxtang MAX-N100 Mini PC. Единственное, чем он примечателен, это встроенный блок питания как у Mac mini (2024). У большинства современных мини-ПК блок питания внешний, но Maxtang MAX-N100 Mini PC - не тот...

сегодня 15:15

Свежие новости Украины на сегодня и последние события в мире экономики и политики, культуры и спорта, технологий, здоровья, происшествий, авто и мото

Вверх