WordPress 5.0.0 远程代码执行误差清静通告

宣布时间 2019-02-21

误差编号和级别


CVE编号:暂无,危险级别:高危, CVSS分值:官方未评定


影响规模


受影响版本: 

WordPress 5.0.0


误差概述


2月19日,外洋清静职员在博客中果真了WordPress中保存的一个远程代码执行误差,该误差已经在WordPress core中隐藏了6年未被发明。


该误差实质上是由一个目录遍历误差以及一个外地文件包括误差组合使用而导致的一个远程代码执行误差。


当攻击者获取到WordPress站点author及以上权限的账户后,即可使用该误差在底层服务器上执行恣意PHP代码,从而实现完全远程接受服务器的目的。


因WordPress 4.9.9和5.0.1其他清静补丁所致,文件包括误差仅有5.0.0简单版本可使用,而路径遍历误差仍可使用且目今仍未打补丁。任何装置了此插件的WordPress站点都会过失地处置惩罚Post Meta条目,这样仍然可以举行使用。


凭证WordPress的下载页面,凌驾33%的网站使用该软件�K剂康讲寮赡芑嶂匦乱胝飧鑫侍�,并思量到过时的站点等因素,受影响的装置数目仍然是数百万。


误差细节


1. 误差焦点原理-“Post Meta”的条目可以被笼罩


在WordPress 4.9.9 之前的版本以及WordPress  5.0.1之前的版本,WordPress文件上传爆发的Post Meta的所有条目皆可被修改,并且他们的value值可以恣意重置。当一张图片被更新的时间,将会挪用/wp-admin/include/post.php中edit_post()函数。


尊龙凯时 - 人生就是搏!


我们可以通过edit_post()函数向数据库注入恣意Post Meta条目。由于系统未对Post Meta条目的修刷新行检测,因此攻击者可以更新_wp_attached_file元条目并将其设置为任何值。这不会重命名任何文件,它只会更改WordPress在编辑图像时要查找的文件。这一点将导致稍后的路径遍历。


2. 通过修改“Post Meta”的来实现路径遍历


路径遍历爆发在用户裁剪图像时挪用的wp_crop_image()函数中。


尊龙凯时 - 人生就是搏!


该函数将图像的ID带到crop($attachment_id)中,并从数据库中获取响应的Post Meta条目_wp_attached_file的值。由于之前edit_post()保存的缺陷,$src_file可以设置为任何值。由于缺陷edit_post(),$src_file可以设置为任何值。


在下一步中,WordPress必需确保图像现实保存并加载它。WordPress有两种加载给定图像的要领。第一种是简朴地查找目录中Post Meta条目中_wp_attached_file提供的文件名wp-content/uploads。


若是该要领失败,WordPress将实验从其自己的服务器下载图像作为后备。为此,它将天生一个下载URL,该URL包括wp-content/uploads目录的URL 和存储在Post Meta条目中_wp_attached_file的文件名。


举一个详细的例子:若是存储在Post Meta条目中_wp_attached_file 的值是evil.jpg,那么WordPress将首先实验检查文件wp-content/uploads/evil.jpg是否保存。


若是没有,它会实验从以下URL下载文件:


https://targetserver.com/wp-content/uploads/evil.jpg


实验下载图像而不是在外地查找图像的缘故原由是某些插件在会见URL时会动态天生图像。


WordPress将简朴地将上传目录和URL与$src_file的用户输入毗连起来。一旦WordPress乐成加载了有用图像wp_get_image_editor(),它将裁剪图像。


尊龙凯时 - 人生就是搏!


裁剪竣事后,WordPress会将裁剪后的图像生涯回文件系统(无论是否下载)。天生的文件名将是$src_file由get_post_meta()攻击者控制的返回文件。对效果文件名字符串举行的唯一修改是在文件的基本名称加前缀cropped-。为了遵照示例evil.jpg,天生的文件名将是cropped-evil.jpg。


然后,WordPress通过wp_mkdir_p()在效果路径中建设不保存的任何目录。


最后使用save()要领将其最终写入文件系统。该save()要领还差池给定的文件名执行路径遍历检查。


尊龙凯时 - 人生就是搏!


3. 实现RCE


综上,可以确定哪个文件被加载到图像编辑器中(因未举行处置惩罚)。可是,若是文件不是有用图像,图像编辑器将会抛出异常。故而,只能在上传目录之外裁剪图像。


那么若是未找到所需图像,WordPress会实验下载,这就导致了RCE。


尊龙凯时 - 人生就是搏!


设置_wp_attached_file为evil.jpg?shell.php,这将导致对以下URL发出HTTP请求:https://targetserver.com/wp-content/uploads/evil.jpg?shell.php。此请求将返回有用的图像文件,由于?在此上下文中忽略了所有内容。天生的文件名将是evil.jpg?shell.php。


虽说save()图像编辑器的要领不会检查是否保存路径遍历,但它会将正在加载的图像的mime类型的扩展名附加到天生的文件名中。在这种情形下,效果文件名将是evil.jpg?cropped-shell.php.jpg。这使得新建设的文件再次无害。


可是,仍可以通过使用诸如的Payload将天生的图像植入任何目录evil.jpg?/../../evil.jpg。


4. 使用主问题录中的路径遍历-外地文件包括


凭证之前的路径遍历,我们可以使用主题系统的外地文件包括来最终实现远程代码执行。每个WordPress主题只是一个位于WordPress目录中的wp-content/themes目录,为差别的案例提供模板文件。例如,若是博客的会见者想要审查博客帖子,则WordPress会在目今运动主题的目录中查找一个post.php文件。若是它找到了对应模板,那将包括该模板。


为了添加特另外自界说层,可以为某些帖子选择自界说模板。为此,用户必需将数据库中的Post Meta条目的_wp_page_template设置为自界说文件名。这里唯一的限制是要包括的文件必需位于目今运动主题的目录中。



通常,用户关于目今运动主题的目录无法会见此目录,也无法上传该文件。可是,通过使用上述路径遍历,就可以将恶意制作的图像植入目今使用的主题的目录中。然后攻击者可以建设一个新帖子也使用上述的路径遍历过失,最终能够更新Post Meta条目中的_wp_attached_file,以便可以包括该图片。通过将PHP代码注入图片,攻击者就可以远程执行恣意代码。


修复建议


Wordpress官方已经在 WordPress 5.0.1更新了清静补丁,用户可以更新至WordPress 5.0.1之后的版本:https://wordpress.org/download/。


参考链接


https://blog.ripstech.com/2019/wordpress-image-remote-code-execution/