近日白帽汇安全研究院关注到,WordPress中被报存在一项因文件删除功能引发的代码执行漏洞。该漏洞可使攻击者在利用有后台文章编辑上传删除的权限下,删除任意文件,甚至利用该漏洞绕过安全机制执行任意代码。该漏洞影响WordPress的所有版本,包括最新的 4.9.6 版本。
WordPress是一款由PHP+Mysql构建的开源博客软件和CMS系统,全球约30%的站点都是用WordPress搭建的。根据华顺信安FOFA系统数据显示,目前全网共有 4105647个系统对外开放。WordPress的使用受众数量庞大,该漏洞将影响众多的企业单位和站点使用者,相关企业、使用者需要高度重视。
仅为全球分布情况,非受影响情况
仅为国内分布情况,非受影响情况
漏洞原理与危害
该漏洞出现的原因是由于在wordpress的wp-includes/post.php文件中wp_delete_attachement()函数在接收删除文件参数时未进行安全处理,直接进行执行导致。
如图所示,在wp_delete_attachement()
中,unlink()
传入的$meta[‘thumb’],未经过任何过滤处理直接被调用。这段代码的目的是为了在删除图像的同时删除图像的缩略图。在WordPress中通过媒体管理器上传的图像被表示为附件类型的内容。$meta[‘thumb’]
的值,从数据库中检索,并保存成表示图像的文章自定义字段。因此,在从数据库检索到unlink()函数调用之间表示缩略图文件名的值没有经过任何检查和过滤。如果该值在保存到数据库之前也没有经过对过滤不安全内容处理措施,将可能导致出现利用该功能执行任意文件删除。
/wp-admin/post.php后面的代码片段,如上图,可以看到附件中属于附件的缩略图文件名如何保存到数据库中。在从用户传值并赋给$_POST[‘thumb’]
数到保存到数据库wp_update_attachment_metadata()
函数执行之间,没有安全措施来确保这个值为真正是在编辑的附件缩略图。$_POST[‘thumb’]
可以变为任意文件的路径,这个值可以保存到WordPress上传目录的相对路径中,当附件被删除时,该文件将被删除。攻击者可利用此漏洞进而执行任意代码。
修复建议
可将此钩子加载到wordpress中进行弥补,该方案目前不确定对后续升级是否兼容,请慎重操作。
白帽汇会持续对该漏洞进行跟进。后续可以关注本链接
参考
[1] https://blog.ripstech.com/2018/wordpress-file-delete-to-code-execution/