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/