• База знаний
  • /
  • Блог
  • /
+380 (44) 364 05 71

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

 

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

 

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

 

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

 

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

 

Любопытно, что в процессе изучения в libgd внутренних элементов PHP-расширения одновременно была установлена уязвимость CVE-2019-69772, которая вызывает переполнение буфера в процессе разбора в функции gdImageColorMatch оформленных специально изображений. Такую уязвимость также можно применить при атаке на приложения PHP, которые вызывают imagecolormatch() функцию.

 

В феврале была также была обнаружена уязвимость в популярном плагине Simple Social Buttons, дающая возможность устанавливать над ресурсом контроль. Данный плагин позволяет подставлять адаптивно кнопки отправки в соцсети данных, которые располагаются в разных местах страницы в зависимости от текущего содержимого. Плагин насчитывает свыше 40000 активных установок, при этом количество загрузок превышает 500000.

 

Известно, что уязвимость связана с отсутствием необходимых проверок полномочий. Из-за этого обычный пользователь, в том числе и рядовой подписчик, сможет поменять настройки системного характера в WordPress, которые определены в wp_options таблице.

 

Например, Simple Social Buttons осуществляет разбор JSON-объекта, переданного в составе запроса. Также он обновляет все указанные настройки в таблице без проверки принадлежности плагину, типа и присутствия прав доступа. Наличие проблемы зафиксировано с версии 2.0.4, а ее решение найдено в выпуске 2.0.22.

 

Дата: 26.02.2019
Автор: Евгений

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
Спасибо, что выбираете FREEhost.UA