近期,外网的RIPSTECH安全研究人员曝出WordPress的远程代码执行,是通过目录遍历和本地文件包含这两个漏洞组合而成。这个漏洞在WordPress的核心代码中存在时间超过了6年。影响
要利用这个漏洞,攻击者必须在目标站点拥有author权限,能够登录后台而RIPSTECH同时也表示,他们还发现了一个WordPress的权限漏洞,能够使任何人登录到WordPress网站,目前该漏洞还没披露。
版本号目前只有5.0.0受影响,4.9.9和5.0.1版本中的某一个安全补丁使该漏洞无效,但目录遍历漏洞依然存在但是,如果WordPress站点上的某个插件没有正确处理Post me ta,都有可能使网站不安全。
而在过去的几个月内,RIPSTECH已经观测有数百万活跃量的插件存在这种问题而根据WordPress下载页面的数据,约有33%的网站使用了该插件综合考虑,潜在的受到该漏洞影响的网站的数量级为百万背景当图像上传到WordPress时,首先会保存到
wp-content/uploadsWordPress同时也会在数据库中创建和保存图像的内部引用,以记录跟踪图片元信息,如上传时间等此元信息在数据库中作为Post me ta进行存储每一条都是一个键值对,分配一个特定的ID。
在上面的例子中,图像被分配post_ID50如果用户希望使用或编辑该图像,WordPress将在wp-content/uploads文件夹下查找数据库中_wp_attached_file值所对应的图片核心问题-Post me ta会被覆盖
WordPress 4.9.9和5.0.1之前的版本中的这些Post me ta的问题在于可以被修改为任意值当图像的相关信息被更新(例如,它的描述被更改)时,将调用edit_post()函数而此函数直接作用于。
$_POST数组从上可以看到,你可以注入任何数据到Post me ta,并且没有安全检查所以攻击者可以更新_wp_attached_file的值由于WordPress处理图像时并不会重命名文件,只会更改文件。
这就将导致稍后介绍的目录遍历通过修改Post me ta进行目录遍历目录遍历发生在wp_crop_image()函数中,该函数用于裁剪图像当该函数运行时,需要输入图像的ID($attachment_id。
),并从数据库中获取相应的_wp_attached_file但是,由于edit_post()的缺陷,$src_file可以被设为任何值下一步中,WordPress必须确保图像存在并加载它WordPress有两种加载图像的方法。
第一种方法是简单的在wp-content/uploads目录查找由_wp_attached_file所规定的文件名如果该方法失败,WordPress将尝试从自己的服务器下载图像为此,它将生成一个下载URL,并且包含。
wp-content/uploads和_wp_attached_file的值举个例子:如果存储在_wp_attached_file的值为evil.jpg,那么Wordpress将首先寻找文件wp-content/uploads/evil.jpg。
;如果找不到,它将尝试从以下URL下载文件:https://targetserver.com/wp-content/uploads/evil.jpg尝试下载图像而不是在本地查找图像的原因是,当访问特定URL时,某个插件可能会动态生成图像。
请注意,这套流程无任何安全防护WordPress只会将上传目录和用户控制输入$src_file连接起来一旦WordPress通过wp_get_image_editor()成功加载了一个有效的图像,它就将裁剪该图像。
然后,被裁剪后的图像被保存回文件系统(不管它是否被下载),文件名是由攻击者控制的$src_file系统对文件名字符串所做的唯一修改是在文件名前加上cropped-例如上文的evil.jpg,被裁剪后的文件名是。
cropped-evil.jpg接着,wordPress通过wp_mkdir_p()在目标路径中创建新目录最后使用图像编辑的save()方法将其写入文件系统save()方法也无安全检查想法虽然将文件加载到图像编辑器中没有执行任何安全检查。
但是,如果文件不是有效的图像,图像编辑器将触发异常第一个假设可行的攻击手段是,裁剪不在上传目录的图像如果WordPress没有在上传文件夹找到,就会试图下载图像,这就会导致远程代码执行。
将_wp_attached_file设置为evil.jpg?shell.php,这使WordPress会发出请求https://targetserver.com/wp-content/uploads/evil.jpg?shell.php
此请求将返回一个有效的图像文件,文件名是evil.jpg?shell.php但是,尽管图像编辑器的save()方法不会进行安全检查,但它会将要加载的图像的mime类型附加到新文件名中在这种情况下,得到的文件名将是。
evil.jpg?cropped-shell.php.jpg当然,我们仍可以使用evil.jpg?/../../evil.jpg来将图像保存在任何目录利用每个WordPress主题只位于WordPress的wp-content/themes目录下的一个目录。
例如,如果博客访问者想要查看博客文章,WordPress会在当前活动主题的目录中查找post.php文件如果找到模板,它将include()为了拥有额外的自定义内容,可能需要WordPress包含一个上传的自定义模板。
为此,用户必须在数据库中设置Post me ta中的_wp_page_template,例如文件名这里唯一的限制是要包含的文件必须位于当前活动主题的目录中通常,用户无法访问此目录,也无法上载任何文件但是,通过利用上述目录遍历,就可以把包含恶意代码的图像放入当前使用主题的目录中。
然后,攻击者使用前面的方法更改_wp_attached_file,以include()恶意图像最后,攻击者成功进行任意远程代码制作恶意图像-GD vs ImagickWordPress支持两个PHP图像编辑扩展:GD和Imagick。
它们之间的区别在于Imagick不会剥离图像的exif元数据,而这其中可以存储PHP代码GD会压缩编辑每个图像,并剥离所有exif元数据但是,通过制作包含精心制作的像素的图像,仍然可以进行利用在我们研究php的GD扩展的内部结构时,还在libgd中发现了一个内存破坏缺陷。
(CVE-2019-69772)
文章来源:玄蜂安全
你可能喜欢全球N个WordPress网站感染了。。。WordPress 4.6远程代码执行漏洞WordPress 4.5.1的远程命令执行(附exp)
亲爱的读者们,感谢您花时间阅读本文。如果您对本文有任何疑问或建议,请随时联系我。我非常乐意与您交流。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。